diff --git a/dist/android-ui.es5.js b/dist/android-ui.es5.js index ee11598..aa041e6 100644 --- a/dist/android-ui.es5.js +++ b/dist/android-ui.es5.js @@ -1,3 +1,3 @@ -'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;this.top=t;this.right=right;this.bottom=bottom;}}},{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:'intersects',value:function intersects(){for(var _len5=arguments.length,args=Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}if(args.length===1){var rect=args[0];return this.intersects(rect.left,rect.top,rect.right,rect.bottom);}else {var _args$17=args[0];var left=_args$17===undefined?0:_args$17;var _args$18=args[1];var t=_args$18===undefined?0:_args$18;var _args$19=args[2];var right=_args$19===undefined?0:_args$19;var _args$20=args[3];var bottom=_args$20===undefined?0:_args$20;return this.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]));}}]);return Rect;}();graphics.Rect=Rect;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Gravity=function(){function Gravity(){_classCallCheck(this,Gravity);}_createClass(Gravity,null,[{key:'apply',value:function apply(gravity,w,h,container,outRect,layoutDirection){var xAdj=0,yAdj=0;if(layoutDirection!=null)gravity=Gravity.getAbsoluteGravity(gravity,layoutDirection);switch(gravity&(Gravity.AXIS_PULL_BEFORE|Gravity.AXIS_PULL_AFTER)<container.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 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 android;(function(android){var util;(function(util){var System=java.lang.System;var StateSet=function(){function StateSet(){_classCallCheck(this,StateSet);}_createClass(StateSet,null,[{key:'isWildCard',value:function isWildCard(stateSetOrSpec){return stateSetOrSpec.length==0||stateSetOrSpec[0]==0;}},{key:'stateSetMatches',value:function stateSetMatches(stateSpec,stateSetOrState){if(Number.isInteger(stateSetOrState)){return StateSet._stateSetMatches_single(stateSpec,stateSetOrState);}var stateSet=stateSetOrState;if(stateSet==null){return stateSpec==null||this.isWildCard(stateSpec);}var stateSpecSize=stateSpec.length;var stateSetSize=stateSet.length;for(var i=0;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=new Array(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)=='#'){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");}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");}},{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.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.mAlpha=paint.mAlpha;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(){if(this.mAlpha==null)return 255;return this.mAlpha;}},{key:'setAlpha',value:function setAlpha(alpha){this.mAlpha=alpha;}},{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=new Array(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.mAlpha==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.mAlpha!=null){canvas.multiplyAlpha(this.mAlpha/255);}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=new Array(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=new Array(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(new Array(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=new Array(9);var tmp2=new Array(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(new Array(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=new Array(9);var tmp2=new Array(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=new Array(9);var tmp2=new Array(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 _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=this.mOnLoads[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var load=_step.value;load();}}catch(err){_didIteratorError=true;_iteratorError=err;}finally {try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally {if(_didIteratorError){throw _iteratorError;}}}}},{key:'fireOnError',value:function fireOnError(){this.mImageLoaded=false;var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=this.mOnErrors[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var error=_step2.value;error();}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally {try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally {if(_didIteratorError2){throw _iteratorError2;}}}}},{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:'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:'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:'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;}}]);return Drawable;}();Drawable.ZERO_BOUNDS_RECT=new Rect();drawable.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,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(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:'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 _this9=_possibleConstructorReturn(this,(_Object$getPrototypeO=Object.getPrototypeOf(ScrollBarDrawable)).call.apply(_Object$getPrototypeO,[this].concat(args)));_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(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_1){var InsetDrawable=function(_drawable_1$Drawable){_inherits(InsetDrawable,_drawable_1$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 _this10=_possibleConstructorReturn(this,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:'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_1.Drawable);drawable_1.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_2){var ShadowDrawable=function(_drawable_2$Drawable){_inherits(ShadowDrawable,_drawable_2$Drawable);function ShadowDrawable(drawable,radius,dx,dy,color){_classCallCheck(this,ShadowDrawable);var _this11=_possibleConstructorReturn(this,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(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_2.Drawable);drawable_2.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 _this12=_possibleConstructorReturn(this,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(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++;this._class=new Class(this.constructor.name);}_createClass(JavaObject,[{key:'hashCode',value:function hashCode(){return this.hash;}},{key:'getClass',value:function getClass(){return this._class;}},{key:'equals',value:function equals(o){return this===o;}}],[{key:'class',get:function get(){return new Class(this.name);}}]);return JavaObject;}();lang.JavaObject=JavaObject;var Class=function(){function Class(name){_classCallCheck(this,Class);this.name=name;}_createClass(Class,[{key:'getName',value:function getName(){return this.name;}},{key:'getSimpleName',value:function getSimpleName(){return this.name;}}]);return Class;}();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 _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=listeners[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var listener=_step4.value;listener.onTouchModeChanged(inTouchMode);}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally {try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally {if(_didIteratorError4){throw _iteratorError4;}}}}}},{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","id":"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \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(layoutRef){if(!layoutRef)return null;layoutRef=layoutRef.replace('/','.').split('.').pop();if(!_layout_data[layoutRef])return null;_tempDiv.innerHTML=_layout_data[layoutRef];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.id='@android:layout/id';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 android;(function(android){var content;(function(content){var res;(function(res){var DisplayMetrics=android.util.DisplayMetrics;var Resources=function(){function Resources(context){_classCallCheck(this,Resources);this.context=context;}_createClass(Resources,[{key:'getDisplayMetrics',value:function getDisplayMetrics(){if(this.displayMetrics)return this.displayMetrics;this.displayMetrics=new DisplayMetrics();var displayMetrics=this.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;displayMetrics.widthPixels=window.innerWidth*density;displayMetrics.heightPixels=window.innerHeight*density;return displayMetrics;}},{key:'getObjectRef',value:function getObjectRef(refString){if(refString.startsWith('@'))refString=refString.substring(1);if(refString=='null')return null;try{return window.eval(refString);}catch(e){console.log(e);}}},{key:'getAttr',value:function getAttr(refString){if(refString.startsWith('@android:attr/')){refString=refString.substring('@android:attr/'.length);return android.R.attr[refString];}else if(Resources.buildAttrFinder&&refString.startsWith('@attr/')){return Resources.buildAttrFinder(refString);}else if(refString.startsWith('@')){return this.getObjectRef(refString);}return null;}},{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];}else if(Resources.buildDrawableFinder&&refString.startsWith('@drawable/')){return Resources.buildDrawableFinder(refString);}else if(refString.startsWith('@')){return this.getObjectRef(refString);}}},{key:'getColor',value:function getColor(refString){var s=this.getString(refString);return android.graphics.Color.parseColor(s);}},{key:'getColorStateList',value:function getColorStateList(refString){if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);return android.R.color[refString];}else if(refString.startsWith('@')){return this.getObjectRef(refString);}}},{key:'getString',value:function getString(refString){var notFindValue=arguments.length<=1||arguments[1]===undefined?refString:arguments[1];if(!refString||!refString.startsWith('@'))return notFindValue;if(refString.startsWith('@android:string/')){refString=refString.substring('@android:string/'.length);return android.R.string_[refString];}var referenceArray=[];var attrValue=refString;while(attrValue&&attrValue.startsWith('@')){var reference=this.getReference(attrValue,false);if(!reference)return notFindValue;if(referenceArray.indexOf(reference)>=0)throw Error('findReference Error: circle reference');referenceArray.push(reference);attrValue=reference.innerText;}return attrValue;}},{key:'getTextArray',value:function getTextArray(refString){if(!refString||!refString.startsWith('@'))return null;var reference=this.getReference(refString,false);if(reference instanceof HTMLElement){var array=[];var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=Array.from(reference.children)[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var ele=_step8.value;if(ele instanceof HTMLElement)array.push(ele.innerText);}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally {try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally {if(_didIteratorError8){throw _iteratorError8;}}}return array;}return null;}},{key:'getLayout',value:function getLayout(refString){if(!refString||!refString.trim().startsWith('@'))return null;var reference=this.getReference(refString,true);if(reference)return reference.firstElementChild;if(refString.startsWith('@android:layout/')){return android.R.layout.getLayoutData(refString);}else if(Resources.buildLayoutFinder&&refString.startsWith('@layout/')){return Resources.buildLayoutFinder(refString);}else if(refString.startsWith('@')){return this.getObjectRef(refString);}}},{key:'getReference',value:function getReference(refString){var cloneNode=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(refString)refString=refString.trim();if(refString&&refString.startsWith('@')){refString=refString.substring(1);var _refString$split=refString.split('/');var _refString$split2=_toArray(_refString$split);var tagName=_refString$split2[0];var refIds=_refString$split2.slice(1);if(!refIds||refIds.length===0)return null;var resourcesElement=Resources.buildResourcesElement;if(tagName.startsWith('android:')){tagName=tagName.substring('android:'.length);resourcesElement=Resources.SDKResourcesElement;}if(!tagName.startsWith('android-'))tagName='android-'+tagName;var q='resources '+tagName+'#'+refIds.join(' #');var rootElement=this.context?this.context.androidUI.rootResourceElement:Resources.emptySelectorNode;var el=rootElement.querySelector(q)||resourcesElement.querySelector(q);if(!el)return null;return cloneNode?el.cloneNode(true):el;}return null;}}],[{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.emptySelectorNode=document.createElement('resources');Resources.buildResourcesElement=document.createElement('resources');Resources.SDKResourcesElement=document.createElement('resources');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 MotionEvent=function(){function MotionEvent(){_classCallCheck(this,MotionEvent);this.mAction=0;this.mEdgeFlags=0;this.mDownTime=0;this.mEventTime=0;this.mActivePointerId=0;this.mXOffset=0;this.mYOffset=0;this._axisValues=new Map();}_createClass(MotionEvent,[{key:'initWithTouch',value:function initWithTouch(event,baseAction){var windowBound=arguments.length<=2||arguments[2]===undefined?new Rect():arguments[2];var e=event;var now=android.os.SystemClock.uptimeMillis();var action=baseAction;var actionIndex=-1;var activeTouch=e.changedTouches[0];this._activeTouch=activeTouch;var activePointerId=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?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].identifier;}},{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={identifier: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:'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 {m.target=args[0];}}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);};}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 _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=MessageQueue.messages[Symbol.iterator](),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var p=_step9.value;if(p.target==h&&p.what==what&&(object==null||p.obj==object)){msgs.push(p);}}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally {try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally {if(_didIteratorError9){throw _iteratorError9;}}}}else {var r=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.callback==r&&(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;}}}}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 _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=p[Symbol.iterator](),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){var item=_step11.value;MessageQueue.recycleMessage(h,item);}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally {try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally {if(_didIteratorError11){throw _iteratorError11;}}}}}},{key:'removeCallbacksAndMessages',value:function removeCallbacksAndMessages(h,object){if(h==null){return;}var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=MessageQueue.messages[Symbol.iterator](),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var p=_step12.value;if(p!=null&&p.target==h&&(object==null||p.obj==object)){MessageQueue.recycleMessage(h,p);}}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally {try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally {if(_didIteratorError12){throw _iteratorError12;}}}}},{key:'checkLoop',value:function checkLoop(){if(!MessageQueue._loopActive){MessageQueue._loopActive=true;requestAnimationFrame(MessageQueue.loop);}}},{key:'loop',value:function loop(){var normalMessages=[];var traversalMessages=[];var now=os.SystemClock.uptimeMillis();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 msg=_step13.value;if(msg.when<=now){if(msg.mType===os.Message.Type_Traversal)traversalMessages.push(msg);else normalMessages.push(msg);}}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally {try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally {if(_didIteratorError13){throw _iteratorError13;}}}for(var i=0,length=normalMessages.length;i0)requestAnimationFrame(MessageQueue.loop);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(mCallback){_classCallCheck(this,Handler);this.mCallback=mCallback;}_createClass(Handler,[{key:'handleMessage',value:function handleMessage(msg){}},{key:'dispatchMessage',value:function dispatchMessage(msg){if(msg.callback!=null){msg.callback.run.call(msg.callback);}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 ColorStateList=function(){function ColorStateList(states,colors){_classCallCheck(this,ColorStateList);this.mDefaultColor=0xffff0000;this.mStateSpecs=states;this.mColors=colors;if(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;ib?1:-1;});for(var i=fromIndex;itoIndex){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;i=0)return '@ref/'+index;this.objectRefs.push(obj);return '@ref/'+(this.objectRefs.length-1);}},{key:'parsePaddingMarginLTRB',value:function parsePaddingMarginLTRB(value){value=value+'';var parts=[];var _iteratorNormalCompletion26=true;var _didIteratorError26=false;var _iteratorError26=undefined;try{for(var _iterator26=value.split(' ')[Symbol.iterator](),_step26;!(_iteratorNormalCompletion26=(_step26=_iterator26.next()).done);_iteratorNormalCompletion26=true){var part=_step26.value;if(part)parts.push(part);}}catch(err){_didIteratorError26=true;_iteratorError26=err;}finally {try{if(!_iteratorNormalCompletion26&&_iterator26.return){_iterator26.return();}}finally {if(_didIteratorError26){throw _iteratorError26;}}}switch(parts.length){case 1:return [parts[0],parts[0],parts[0],parts[0]];case 2:return [parts[1],parts[0],parts[1],parts[0]];case 3:return [parts[1],parts[0],parts[1],parts[2]];case 4:return [parts[3],parts[0],parts[1],parts[2]];}throw Error('not a padding or margin value : '+value);}},{key:'parseBoolean',value:function parseBoolean(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(value===false||value==='false'||value==='0')return false;else if(value===true||value==='true'||value==='1'||value==='')return true;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;gravity=Gravity.NO_GRAVITY;try{var parts=s.split("|");parts.forEach(function(part){var g=Gravity[part.toUpperCase()];if(Number.isInteger(g))gravity|=g;});}catch(e){console.error(e);}if(Number.isNaN(gravity)||gravity===Gravity.NO_GRAVITY)gravity=defaultValue;return gravity;}},{key:'parseDrawable',value:function parseDrawable(s){if(!s)return null;if(s instanceof Drawable)return s;s=(s+'').trim();if(s.startsWith('@')){var refObj=this.getRefObject(s);if(refObj)return refObj;return Resources.getSystem().getDrawable(s);}else if(s.startsWith('url(')){s=s.substring('url('.length);if(s.endsWith(')'))s=s.substring(0,s.length-1);return new androidui.image.NetDrawable(s);}else {try{var color=this.parseColor(s);return new ColorDrawable(color);}catch(e){}}return null;}},{key:'parseColor',value:function parseColor(value,defaultValue){var color=Number.parseInt(value);if(Number.isInteger(color))return color;try{if(value.startsWith('@')){return Resources.getSystem().getColor(value);}else {if(value.startsWith('#')&&value.length===4){value='#'+value[1]+value[1]+value[2]+value[2]+value[2]+value[2];}return Color.parseColor(value);}}catch(e){if(defaultValue==null)throw e;}return defaultValue;}},{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('@')){var refObj=this.getRefObject(value);if(refObj)return refObj;return Resources.getSystem().getColorStateList(value);}else {try{var color=this.parseColor(value);return ColorStateList.valueOf(color);}catch(e){console.log(e);}}return null;}},{key:'parseNumber',value:function parseNumber(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==='string'&&value.startsWith('@')){value=Resources.getSystem().getString(value);}try{return TypedValue.complexToDimensionPixelSize(value,baseValue);}catch(e){return defaultValue;}}},{key:'parseString',value:function parseString(value,defaultValue){if(typeof value==='string'){if(value.startsWith('@')){return Resources.getSystem().getString(value);}return value;}return defaultValue;}},{key:'parseTextArray',value:function parseTextArray(value){value+='';if(value.startsWith('@')){return Resources.getSystem().getTextArray(value);}else {try{var json=JSON.parse(value);if(json instanceof Array)return json;}catch(e){}}return null;}}]);return AttrBinder;}();attr.AttrBinder=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 _this16=_possibleConstructorReturn(this,Object.getPrototypeOf(NetDrawable).call(this));_this16.mImageWidth=0;_this16.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 _this16.onLoad();},function(){return _this16.onError();});_this16.mState=new State(image,paint);if(image.isImageLoaded())_this16.initBoundWithLoadedImage(image);return _this16;}_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:'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,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);}}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;}}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.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_3){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 _this17=_possibleConstructorReturn(this,Object.getPrototypeOf(LayerDrawable).call(this));_this17.mOpacityOverride=PixelFormat.UNKNOWN;_this17.mTmpRect=new Rect();var _as=_this17.createConstantState(state);_this17.mLayerState=_as;if(_as.mNum>0){_this17.ensurePadding();}if(layers!=null){var length=layers.length;var r=new Array(length);for(var i=0;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=new Array(N);this.mPaddingT=new Array(N);this.mPaddingR=new Array(N);this.mPaddingB=new Array(N);}},{key:'getConstantState',value:function getConstantState(){if(this.mLayerState.canConstantState()){return this.mLayerState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(LayerDrawable.prototype),'mutate',this).call(this)==this){this.mLayerState=this.createConstantState(this.mLayerState);var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;for(var i=0;i0?this.mChildren[0].mDrawable.getOpacity():PixelFormat.TRANSPARENT;for(var i=1;i0){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_4.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_4.ScaleDrawable||(drawable_4.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),_key17=0;_key17<_len17;_key17++){args[_key17]=arguments[_key17];}var _this20=_possibleConstructorReturn(this,(_Object$getPrototypeO2=Object.getPrototypeOf(DrawableContainer)).call.apply(_Object$getPrototypeO2,[this].concat(args)));_this20.mAlpha=0xFF;_this20.mCurIndex=-1;_this20.mMutated=false;_this20.mEnterAnimationEnd=0;_this20.mExitAnimationEnd=0;return _this20;}_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 _this21=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=_this21;_this21.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:'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 _this23=_possibleConstructorReturn(this,Object.getPrototypeOf(AnimationState).call(this,orig,owner));if(orig!=null){_this23.mDurations=orig.mDurations;_this23.mOneShot=orig.mOneShot;}else {_this23.mDurations=new Array(_this23.getCapacity());_this23.mOneShot=true;}return _this23;}_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_5){var DEBUG=android.util.Log.DBG_StateListDrawable;var TAG="StateListDrawable";var DEFAULT_DITHER=true;var StateListDrawable=function(_drawable_5$DrawableC){_inherits(StateListDrawable,_drawable_5$DrawableC);function StateListDrawable(){_classCallCheck(this,StateListDrawable);var _this24=_possibleConstructorReturn(this,Object.getPrototypeOf(StateListDrawable).call(this));_this24.initWithState(null);return _this24;}_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:'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 _this28=this;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?1:bound.width()/staticWidthSum;var staticHeightPartScale=extraHeight>=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=_this28.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 _this29=_possibleConstructorReturn(this,Object.getPrototypeOf(ChangeImageSizeDrawable).call(this));_this29.mTmpRect=new Rect();_this29.mMutated=false;_this29.mState=new State(null,_this29);_this29.mState.mDrawable=drawable;_this29.mState.mOverrideWidth=overrideWidth;_this29.mState.mOverrideHeight=overrideHeight;if(drawable!=null){drawable.setCallback(_this29);}return _this29;}_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=="],"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,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:'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:'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=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();}},{key:'white',get:function get(){return Color.WHITE;}},{key:'black',get:function get(){return Color.BLACK;}}]);return color;}();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 TypedValue=android.util.TypedValue;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 _this34=_possibleConstructorReturn(this,Object.getPrototypeOf(View).call(this));_this34.mPrivateFlags=0;_this34.mPrivateFlags2=0;_this34.mPrivateFlags3=0;_this34.mCurrentAnimation=null;_this34.mOldWidthMeasureSpec=Number.MIN_SAFE_INTEGER;_this34.mOldHeightMeasureSpec=Number.MIN_SAFE_INTEGER;_this34.mMeasuredWidth=0;_this34.mMeasuredHeight=0;_this34.mBackgroundSizeChanged=false;_this34.mBackgroundWidth=0;_this34.mBackgroundHeight=0;_this34.mHasPerformedLongPress=false;_this34.mMinWidth=0;_this34.mMinHeight=0;_this34.mDrawingCacheBackgroundColor=0;_this34.mTouchSlop=0;_this34.mVerticalScrollFactor=0;_this34.mOverScrollMode=0;_this34.mViewFlags=0;_this34.mLayerType=View.LAYER_TYPE_NONE;_this34.mCachingFailed=false;_this34.mWindowAttachCount=0;_this34.mTransientStateCount=0;_this34.mLastIsOpaque=false;_this34._mLeft=0;_this34._mRight=0;_this34._mTop=0;_this34._mBottom=0;_this34._mScrollX=0;_this34._mScrollY=0;_this34.mPaddingLeft=0;_this34.mPaddingRight=0;_this34.mPaddingTop=0;_this34.mPaddingBottom=0;_this34.mCornerRadiusTopLeft=0;_this34.mCornerRadiusTopRight=0;_this34.mCornerRadiusBottomRight=0;_this34.mCornerRadiusBottomLeft=0;_this34._attrBinder=new AttrBinder(_this34);_this34.mContext=context;_this34.mTouchSlop=view_2.ViewConfiguration.get().getScaledTouchSlop();_this34.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);_this34.initBindAttr(_this34._attrBinder);_this34.initBindElement(bindElement);if(defStyle)_this34.applyDefaultAttributes(defStyle);return _this34;}_createClass(View,[{key:'initBindAttr',value:function initBindAttr(a){var _this35=this;a.addAttr('background',function(value){_this35.setBackground(a.parseDrawable(value));},function(){return _this35.mBackground;});a.addAttr('padding',function(value){if(value==null)value=0;var _a$parsePaddingMargin=a.parsePaddingMarginLTRB(value);var _a$parsePaddingMargin2=_slicedToArray(_a$parsePaddingMargin,4);var left=_a$parsePaddingMargin2[0];var top=_a$parsePaddingMargin2[1];var right=_a$parsePaddingMargin2[2];var bottom=_a$parsePaddingMargin2[3];_this35._setPaddingWithUnit(left,top,right,bottom);},function(){return _this35.mPaddingTop+' '+_this35.mPaddingRight+' '+_this35.mPaddingBottom+' '+_this35.mPaddingLeft;}),a.addAttr('paddingLeft',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(value,_this35.mPaddingTop,_this35.mPaddingRight,_this35.mPaddingBottom);},function(){return _this35.mPaddingLeft;}),a.addAttr('paddingStart',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(value,_this35.mPaddingTop,_this35.mPaddingRight,_this35.mPaddingBottom);},function(){return _this35.mPaddingLeft;}),a.addAttr('paddingTop',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,value,_this35.mPaddingRight,_this35.mPaddingBottom);},function(){return _this35.mPaddingTop;}),a.addAttr('paddingRight',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,_this35.mPaddingTop,value,_this35.mPaddingBottom);},function(){return _this35.mPaddingRight;}),a.addAttr('paddingEnd',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,_this35.mPaddingTop,value,_this35.mPaddingBottom);},function(){return _this35.mPaddingRight;}),a.addAttr('paddingBottom',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,_this35.mPaddingTop,_this35.mPaddingRight,value);},function(){return _this35.mPaddingBottom;}),a.addAttr('scrollX',function(value){value=Number.parseInt(value);if(Number.isInteger(value))_this35.scrollTo(value,_this35.mScrollY);},function(){return _this35.getScrollX();}),a.addAttr('scrollY',function(value){value=Number.parseInt(value);if(Number.isInteger(value))_this35.scrollTo(_this35.mScrollX,value);},function(){return _this35.getScrollY();}),a.addAttr('alpha',function(value){_this35.setAlpha(a.parseNumber(value,_this35.getAlpha()));},function(){return _this35.getAlpha();}),a.addAttr('transformPivotX',function(value){_this35.setPivotX(a.parseNumber(value,_this35.getPivotX()));},function(){return _this35.getPivotX();}),a.addAttr('transformPivotY',function(value){_this35.setPivotY(a.parseNumber(value,_this35.getPivotY()));},function(){return _this35.getPivotY();}),a.addAttr('translationX',function(value){_this35.setTranslationX(a.parseNumber(value,_this35.getTranslationX()));},function(){return _this35.getTranslationX();}),a.addAttr('translationY',function(value){_this35.setTranslationY(a.parseNumber(value,_this35.getTranslationY()));},function(){return _this35.getTranslationY();}),a.addAttr('rotation',function(value){_this35.setRotation(a.parseNumber(value,_this35.getRotation()));},function(){return _this35.getRotation();}),a.addAttr('rotationX',function(value){}),a.addAttr('rotationY',function(value){}),a.addAttr('scaleX',function(value){_this35.setScaleX(a.parseNumber(value,_this35.getScaleX()));},function(){return _this35.getScaleX();}),a.addAttr('scaleY',function(value){_this35.setScaleY(a.parseNumber(value,_this35.getScaleY()));},function(){return _this35.getScaleY();}),a.addAttr('tag',function(value){_this35.setTag(value);}),a.addAttr('id',function(value){_this35.setId(value);}),a.addAttr('focusable',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.FOCUSABLE,View.FOCUSABLE_MASK);}},function(){return _this35.isFocusable();}),a.addAttr('focusableInTouchMode',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE,View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE_MASK);}},function(){return _this35.isFocusableInTouchMode();}),a.addAttr('clickable',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.CLICKABLE,View.CLICKABLE);}},function(){return _this35.isClickable();}),a.addAttr('longClickable',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.LONG_CLICKABLE,View.LONG_CLICKABLE);}},function(){return _this35.isLongClickable();}),a.addAttr('saveEnabled',function(value){if(a.parseBoolean(value,false)){}}),a.addAttr('duplicateParentState',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.DUPLICATE_PARENT_STATE,View.DUPLICATE_PARENT_STATE);}}),a.addAttr('visibility',function(value){if(value==='gone')_this35.setVisibility(View.GONE);else if(value==='invisible')_this35.setVisibility(View.INVISIBLE);else if(value==='visible')_this35.setVisibility(View.VISIBLE);},function(){return _this35.getVisibility();}),a.addAttr('scrollbars',function(value){if(value==='none'){_this35.setHorizontalScrollBarEnabled(false);_this35.setVerticalScrollBarEnabled(false);}}),a.addAttr('isScrollContainer',function(value){if(a.parseBoolean(value,false)){_this35.setScrollContainer(true);}}),a.addAttr('minWidth',function(value){_this35.setMinimumWidth(a.parseNumber(value,0));},function(){return _this35.mMinWidth;}),a.addAttr('minHeight',function(value){_this35.setMinimumHeight(a.parseNumber(value,0));},function(){return _this35.mMinHeight;}),a.addAttr('onClick',function(value){if(a.parseBoolean(value))_this35.setClickable(true);}),a.addAttr('overScrollMode',function(value){var scrollMode=View[('OVER_SCROLL_'+value).toUpperCase()];if(scrollMode===undefined)scrollMode=View.OVER_SCROLL_IF_CONTENT_SCROLLS;_this35.setOverScrollMode(scrollMode);}),a.addAttr('layerType',function(value){if((value+'').toLowerCase()=='software'){_this35.setLayerType(View.LAYER_TYPE_SOFTWARE);}else {_this35.setLayerType(View.LAYER_TYPE_NONE);}});a.addAttr('cornerRadius',function(value){var _a$parsePaddingMargin3=a.parsePaddingMarginLTRB(value);var _a$parsePaddingMargin4=_slicedToArray(_a$parsePaddingMargin3,4);var leftTop=_a$parsePaddingMargin4[0];var topRight=_a$parsePaddingMargin4[1];var rightBottom=_a$parsePaddingMargin4[2];var bottomLeft=_a$parsePaddingMargin4[3];_this35.setCornerRadius(a.parseNumber(leftTop,0),a.parseNumber(topRight,0),a.parseNumber(rightBottom,0),a.parseNumber(bottomLeft,0));},function(){return _this35.mCornerRadiusTopLeft+' '+_this35.mCornerRadiusTopRight+' '+_this35.mCornerRadiusBottomRight+' '+_this35.mCornerRadiusBottomLeft;});a.addAttr('cornerRadiusTopLeft',function(value){_this35.setCornerRadiusTopLeft(a.parseNumber(value,_this35.mCornerRadiusTopLeft));},function(){return _this35.mCornerRadiusTopLeft;});a.addAttr('cornerRadiusTopRight',function(value){_this35.setCornerRadiusTopRight(a.parseNumber(value,_this35.mCornerRadiusTopRight));},function(){return _this35.mCornerRadiusTopRight;});a.addAttr('cornerRadiusBottomLeft',function(value){_this35.setCornerRadiusBottomLeft(a.parseNumber(value,_this35.mCornerRadiusBottomLeft));},function(){return _this35.mCornerRadiusBottomLeft;});a.addAttr('cornerRadiusBottomRight',function(value){_this35.setCornerRadiusBottomRight(a.parseNumber(value,_this35.mCornerRadiusBottomRight));},function(){return _this35.mCornerRadiusBottomRight;});a.addAttr('viewShadowColor',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();_this35.setShadowView(_this35.mShadowPaint.shadowRadius,_this35.mShadowPaint.shadowDx,_this35.mShadowPaint.shadowDy,a.parseColor(value,_this35.mShadowPaint.shadowColor));},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowColor;});a.addAttr('viewShadowDx',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();var dx=_this35._attrBinder.parseNumber(value,_this35.mShadowPaint.shadowDx);_this35.setShadowView(_this35.mShadowPaint.shadowRadius,dx,_this35.mShadowPaint.shadowDy,_this35.mShadowPaint.shadowColor);},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowDx;});a.addAttr('viewShadowDy',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();var dy=a.parseNumber(value,_this35.mShadowPaint.shadowDy);_this35.setShadowView(_this35.mShadowPaint.shadowRadius,_this35.mShadowPaint.shadowDx,dy,_this35.mShadowPaint.shadowColor);},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowDy;});a.addAttr('viewShadowRadius',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();var radius=_this35._attrBinder.parseNumber(value,_this35.mShadowPaint.shadowRadius);_this35.setShadowView(radius,_this35.mShadowPaint.shadowDx,_this35.mShadowPaint.shadowDy,_this35.mShadowPaint.shadowColor);},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowRadius;});}},{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 dm=Resources.getDisplayMetrics();var width=view.getWidth();var height=view.getHeight();var padLeft=TypedValue.complexToDimensionPixelSize(left,width,dm);var padTop=TypedValue.complexToDimensionPixelSize(top,height,dm);var padRight=TypedValue.complexToDimensionPixelSize(right,width,dm);var padBottom=TypedValue.complexToDimensionPixelSize(bottom,height,dm);view.setPadding(padLeft,padTop,padRight,padBottom);var unit=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=TypedValue.complexToDimensionPixelSize(left,width,dm);var padTopN=TypedValue.complexToDimensionPixelSize(top,height,dm);var padRightN=TypedValue.complexToDimensionPixelSize(right,width,dm);var padBottomN=TypedValue.complexToDimensionPixelSize(bottom,height,dm);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){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;}}},{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 _this36=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(!_this36.mID)return {v:null};var id=_this36.mID;return {v:root.findViewByPredicateInsideOut(_this36,{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){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){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(!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);}}},{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);}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);}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 handle=false;if(this.bindElementOnClickAttr){handle=eval(this.bindElementOnClickAttr);}var li=this.mListenerInfo;if(li!=null&&li.mOnClickListener!=null){handle=li.mOnClickListener.onClick(this)||handle;}return handle;}},{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){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;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;}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.multiplyAlpha(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.multiplyAlpha(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;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);this.syncDrawStateToElement();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=new Array(drawableState.length+extraSpace);System.arraycopy(drawableState,0,fullState,0,drawableState.length);}else {fullState=new Array(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 _iteratorNormalCompletion29=true;var _didIteratorError29=false;var _iteratorError29=undefined;try{for(var _iterator29=listeners[Symbol.iterator](),_step29;!(_iteratorNormalCompletion29=(_step29=_iterator29.next()).done);_iteratorNormalCompletion29=true){var listener=_step29.value;listener.onViewAttachedToWindow(this);}}catch(err){_didIteratorError29=true;_iteratorError29=err;}finally {try{if(!_iteratorNormalCompletion29&&_iterator29.return){_iterator29.return();}}finally {if(_didIteratorError29){throw _iteratorError29;}}}}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();var li=this.mListenerInfo;var listeners=li!=null?li.mOnAttachStateChangeListeners:null;if(listeners!=null&&listeners.size()>0){var _iteratorNormalCompletion30=true;var _didIteratorError30=false;var _iteratorError30=undefined;try{for(var _iterator30=listeners[Symbol.iterator](),_step30;!(_iteratorNormalCompletion30=(_step30=_iterator30.next()).done);_iteratorNormalCompletion30=true){var listener=_step30.value;listener.onViewDetachedFromWindow(this);}}catch(err){_didIteratorError30=true;_iteratorError30=err;}finally {try{if(!_iteratorNormalCompletion30&&_iterator30.return){_iterator30.return();}}finally {if(_didIteratorError30){throw _iteratorError30;}}}}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];var originProto=Object.getPrototypeOf(this);console.dir(Object.assign(Object.create(originProto),this));}},{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:'findViewByPredicateTraversal',value:function findViewByPredicateTraversal(predicate,childToSkip){if(predicate.apply(this)){return this;}return null;}},{key:'findViewById',value:function findViewById(id){if(!id)return null;if(id==this.bindElement.id){return this;}return this.findViewTraversal(id);}},{key:'findViewTraversal',value:function findViewTraversal(id){var bindEle=this.bindElement.querySelector('#'+id);return bindEle?bindEle[View.AndroidViewProperty]:null;}},{key:'findViewByPredicate',value:function findViewByPredicate(predicate){return this.findViewByPredicateTraversal(predicate,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){if(this.bindElement)this.bindElement.id=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.bindElementOnClickAttr=this.bindElement.getAttribute('onclick');this.bindElement.removeAttribute('onclick');if(this.bindElementOnClickAttr)this.setClickable(true);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._parseInitedAttribute();this._initAttrObserver();}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length<=0||arguments[0]===undefined?false: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(){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.left=(left-pScrollX)/density+'px';bind.style.top=(top-pScrollY)/density+'px';bind.style.width=width/density+'px';bind.style.height=height/density+'px';}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);var mCanvasContent=this.mCanvasElement.getContext('2d');mCanvasContent.clearRect(left,top,width,height);}else {canvas=new SurfaceLockCanvas(this.mCanvasBound.width(),this.mCanvasBound.height(),this.mCanvasElement);this.mLockSaveCount=canvas.save();canvas.clipRect(left,top,left+width,top+height);canvas.clearColor();}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);}}}]);return Surface;}();Surface.DrawToCacheFirstMode=false;view.Surface=Surface;var SurfaceLockCanvas=function(_Canvas){_inherits(SurfaceLockCanvas,_Canvas);function SurfaceLockCanvas(width,height,canvasElement){_classCallCheck(this,SurfaceLockCanvas);var _this37=_possibleConstructorReturn(this,Object.getPrototypeOf(SurfaceLockCanvas).call(this,width,height));_this37.mCanvasElement=canvasElement;_this37._mCanvasContent=_this37.mCanvasElement.getContext("2d");return _this37;}_createClass(SurfaceLockCanvas,[{key:'initImpl',value:function initImpl(){}}]);return SurfaceLockCanvas;}(Canvas);})(view=android.view||(android.view={}));})(android||(android={}));var PageStack;(function(PageStack){PageStack.DEBUG=false;var history_go=history.go;var historyLocking=false;var pendingFuncLock=[];function init(){removeLastHistoryIfFaked();ensureLockDo(_init);history.go=function(delta){PageStack.go(delta);};history.back=function(){PageStack.go(-1);};history.forward=function(){PageStack.go(1);};}PageStack.init=init;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}]};history.replaceState(PageStack.currentStack,null,'#');}ensureLastHistoryFaked();initOnpopstate();window.addEventListener('load',function(){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(firePageOpen(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;if(firePageClose(stackList[stackList.length-1].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];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)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);}function restorePageFromStackIfNeed(){if(PageStack.currentStack){var copy=PageStack.currentStack.stack.concat();copy.shift();var _iteratorNormalCompletion35=true;var _didIteratorError35=false;var _iteratorError35=undefined;try{for(var _iterator35=copy[Symbol.iterator](),_step35;!(_iteratorNormalCompletion35=(_step35=_iterator35.next()).done);_iteratorNormalCompletion35=true){var saveState=_step35.value;firePageOpen(saveState.pageId,saveState.extra,true);}}catch(err){_didIteratorError35=true;_iteratorError35=err;}finally {try{if(!_iteratorNormalCompletion35&&_iterator35.return){_iterator35.return();}}finally {if(_didIteratorError35){throw _iteratorError35;}}}}}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 firePageClose(pageId,pageExtra){if(PageStack.pageCloseHandler){try{return PageStack.pageCloseHandler(pageId,pageExtra);}catch(e){console.error(e);}}}function notifyPageClosed(pageId){if(PageStack.DEBUG)console.log('notifyPageClosed',pageId);if(historyLocking){ensureLockDo(function(){notifyPageClosed(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){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){activity.mCallActivity.dispatchActivityResult(null,activity.getIntent().mRequestCode,activity.mResultCode,activity.mResultData);}_this40.handleDestroyActivity(activity,finishing);if(!isCreateSuc)return;if(isRootActivity){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 _iteratorNormalCompletion41=true;var _didIteratorError41=false;var _iteratorError41=undefined;try{for(var _iterator41=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step41;!(_iteratorNormalCompletion41=(_step41=_iterator41.next()).done);_iteratorNormalCompletion41=true){var activity=_step41.value;if(activity.getIntent()&&activity.getIntent().activityName==intent.activityName){findActivity=true;break;}destroyList.push(activity);}}catch(err){_didIteratorError41=true;_iteratorError41=err;}finally {try{if(!_iteratorNormalCompletion41&&_iterator41.return){_iterator41.return();}}finally {if(_didIteratorError41){throw _iteratorError41;}}}if(findActivity){var _iteratorNormalCompletion42=true;var _didIteratorError42=false;var _iteratorError42=undefined;try{for(var _iterator42=destroyList[Symbol.iterator](),_step42;!(_iteratorNormalCompletion42=(_step42=_iterator42.next()).done);_iteratorNormalCompletion42=true){var activity=_step42.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError42=true;_iteratorError42=err;}finally {try{if(!_iteratorNormalCompletion42&&_iterator42.return){_iterator42.return();}}finally {if(_didIteratorError42){throw _iteratorError42;}}}return true;}return false;}},{key:'canBackTo',value:function canBackTo(intent){var _iteratorNormalCompletion43=true;var _didIteratorError43=false;var _iteratorError43=undefined;try{for(var _iterator43=this.mLaunchedActivities[Symbol.iterator](),_step43;!(_iteratorNormalCompletion43=(_step43=_iterator43.next()).done);_iteratorNormalCompletion43=true){var activity=_step43.value;if(activity.getIntent().activityName==intent.activityName){return true;}}}catch(err){_didIteratorError43=true;_iteratorError43=err;}finally {try{if(!_iteratorNormalCompletion43&&_iterator43.return){_iterator43.return();}}finally {if(_didIteratorError43){throw _iteratorError43;}}}return false;}},{key:'scheduleBackToRoot',value:function scheduleBackToRoot(){var destroyList=Array.from(this.mLaunchedActivities).reverse();destroyList.shift();var _iteratorNormalCompletion44=true;var _didIteratorError44=false;var _iteratorError44=undefined;try{for(var _iterator44=destroyList[Symbol.iterator](),_step44;!(_iteratorNormalCompletion44=(_step44=_iterator44.next()).done);_iteratorNormalCompletion44=true){var activity=_step44.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError44=true;_iteratorError44=err;}finally {try{if(!_iteratorNormalCompletion44&&_iterator44.return){_iterator44.return();}}finally {if(_didIteratorError44){throw _iteratorError44;}}}}},{key:'handlePauseActivity',value:function handlePauseActivity(activity){this.performPauseActivity(activity);}},{key:'performPauseActivity',value:function performPauseActivity(activity){activity.mCalled=false;activity.performPause();if(!activity.mCalled){throw new Error("Activity "+ActivityThread.getActivityName(activity)+" did not call through to super.onPause()");}}},{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 _iteratorNormalCompletion45=true;var _didIteratorError45=false;var _iteratorError45=undefined;try{for(var _iterator45=visibleActivities[Symbol.iterator](),_step45;!(_iteratorNormalCompletion45=(_step45=_iterator45.next()).done);_iteratorNormalCompletion45=true){var visibleActivity=_step45.value;this.handleStopActivity(visibleActivity);}}catch(err){_didIteratorError45=true;_iteratorError45=err;}finally {try{if(!_iteratorNormalCompletion45&&_iterator45.return){_iterator45.return();}}finally {if(_didIteratorError45){throw _iteratorError45;}}}}}}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.mCalled=false;activity.performPause();if(!activity.mCalled){throw new Error("Activity "+ActivityThread.getActivityName(activity)+" did not call through to super.onPause()");}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 _iteratorNormalCompletion46=true;var _didIteratorError46=false;var _iteratorError46=undefined;try{for(var _iterator46=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step46;!(_iteratorNormalCompletion46=(_step46=_iterator46.next()).done);_iteratorNormalCompletion46=true){var activity=_step46.value;list.push(activity);if(!activity.getWindow().getAttributes().isFloating())break;}}catch(err){_didIteratorError46=true;_iteratorError46=err;}finally {try{if(!_iteratorNormalCompletion46&&_iterator46.return){_iterator46.return();}}finally {if(_didIteratorError46){throw _iteratorError46;}}}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){var MotionEvent=android.view.MotionEvent;var KeyEvent=android.view.KeyEvent;var Intent=android.content.Intent;var ActivityThread=android.app.ActivityThread;var AndroidUI=function(){function AndroidUI(androidUIElement){_classCallCheck(this,AndroidUI);this._canvas=document.createElement("canvas");this._windowBound=new android.graphics.Rect();this.tempRect=new android.graphics.Rect();this.touchEvent=new MotionEvent();this.touchAvailable=false;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._viewRootImpl.androidUIElement=this.androidUIElement;this.rootResourceElement=this.androidUIElement.querySelector('resources');if(this.rootResourceElement)this.androidUIElement.removeChild(this.rootResourceElement);else this.rootResourceElement=document.createElement('resources');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(){this.mApplication=new android.app.Application(this);this.mApplication.onCreate();}},{key:'initLaunchActivity',value:function initLaunchActivity(){this.mActivityThread=new ActivityThread(this);var _iteratorNormalCompletion47=true;var _didIteratorError47=false;var _iteratorError47=undefined;try{for(var _iterator47=Array.from(this.androidUIElement.children)[Symbol.iterator](),_step47;!(_iteratorNormalCompletion47=(_step47=_iterator47.next()).done);_iteratorNormalCompletion47=true){var ele=_step47.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 _iteratorNormalCompletion48=true;var _didIteratorError48=false;var _iteratorError48=undefined;try{for(var _iterator48=Array.from(ele.children)[Symbol.iterator](),_step48;!(_iteratorNormalCompletion48=(_step48=_iterator48.next()).done);_iteratorNormalCompletion48=true){var element=_step48.value;android.view.LayoutInflater.from(activity).inflate(element,activity.getWindow().mContentParent,true);}}catch(err){_didIteratorError48=true;_iteratorError48=err;}finally {try{if(!_iteratorNormalCompletion48&&_iterator48.return){_iterator48.return();}}finally {if(_didIteratorError48){throw _iteratorError48;}}}var onCreateFunc=ele.getAttribute('oncreate');if(onCreateFunc&&typeof window[onCreateFunc]==="function"){window[onCreateFunc].call(this,activity);}}}}catch(err){_didIteratorError47=true;_iteratorError47=err;}finally {try{if(!_iteratorNormalCompletion47&&_iterator47.return){_iterator47.return();}}finally {if(_didIteratorError47){throw _iteratorError47;}}}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(){if(this.androidUIElement.style.display==='none'){this.androidUIElement.style.display='';}this.androidUIElement.setAttribute('tabindex','0');this.androidUIElement.focus();}},{key:'initEvent',value:function initEvent(){this.initTouchEvent();this.initMouseEvent();this.initKeyEvent();this.initGenericEvent();}},{key:'initTouchEvent',value:function initTouchEvent(){var _this41=this;this.androidUIElement.addEventListener('touchstart',function(e){_this41.touchAvailable=true;_this41.refreshWindowBound();if(e.target!=document.activeElement||!_this41.androidUIElement.contains(document.activeElement)){_this41.androidUIElement.focus();}_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_DOWN,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchmove',function(e){_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_MOVE,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchend',function(e){_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_UP,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchcancel',function(e){_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_CANCEL,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initMouseEvent',value:function initMouseEvent(){var _this42=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){if(_this42.touchAvailable)return;isMouseDown=true;_this42.refreshWindowBound();_this42.androidUIElement.focus();_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_DOWN,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mousemove',function(e){if(_this42.touchAvailable)return;if(!isMouseDown)return;_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_MOVE,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseup',function(e){if(_this42.touchAvailable)return;isMouseDown=false;_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_UP,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseleave',function(e){if(_this42.touchAvailable)return;if(e.fromElement===_this42.androidUIElement){isMouseDown=false;_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_CANCEL,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}}},true);var scrollEvent=new MotionEvent();this.androidUIElement.addEventListener('mousewheel',function(e){scrollEvent.initWithMouseWheel(e);if(_this42._viewRootImpl.dispatchInputEvent(scrollEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initKeyEvent',value:function initKeyEvent(){var _this43=this;this.androidUIElement.addEventListener('keydown',function(e){_this43.ketEvent.initKeyEvent(e,KeyEvent.ACTION_DOWN);if(_this43._viewRootImpl.dispatchInputEvent(_this43.ketEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('keyup',function(e){_this43.ketEvent.initKeyEvent(e,KeyEvent.ACTION_UP);if(_this43._viewRootImpl.dispatchInputEvent(_this43.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 _this44=this;var eventName='visibilitychange';if(document['webkitHidden']!=undefined){eventName='webkitvisibilitychange';}document.addEventListener(eventName,function(){if(document['hidden']||document['webkitHidden']){_this44.mActivityThread.scheduleApplicationHide();}else {_this44.mActivityThread.scheduleApplicationShow();_this44._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:'showDebugLayout',value:function showDebugLayout(){if(this.windowManager.getWindowsLayout().bindElement.parentNode===null){this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);}}},{key:'windowManager',get:function get(){return this.mApplication.getWindowManager();}},{key:'windowBound',get:function get(){return this._windowBound;}}]);return AndroidUI;}();AndroidUI.BindToElementName='AndroidUI';androidui.AndroidUI=AndroidUI;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){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 _this46=this;$domReady(function(){return initElement(_this46);});}},{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.showDebugLayout();}}}]);return AndroidUIElement;}(HTMLDivElement);androidui.AndroidUIElement=AndroidUIElement;function initElement(ele){ele.AndroidUI=new androidui.AndroidUI(ele);var debugAttr=ele.getAttribute('debug');if(debugAttr!=null&&debugAttr!='0'&&debugAttr!='false')ele.AndroidUI.showDebugLayout();}if(typeof document['registerElement']==="function"){document.registerElement("android-ui",AndroidUIElement);}else {$domReady(function(){var eles=document.getElementsByTagName('android-ui');var _iteratorNormalCompletion49=true;var _didIteratorError49=false;var _iteratorError49=undefined;try{for(var _iterator49=Array.from(eles)[Symbol.iterator](),_step49;!(_iteratorNormalCompletion49=(_step49=_iterator49.next()).done);_iteratorNormalCompletion49=true){var ele=_step49.value;initElement(ele);}}catch(err){_didIteratorError49=true;_iteratorError49=err;}finally {try{if(!_iteratorNormalCompletion49&&_iterator49.return){_iterator49.return();}}finally {if(_didIteratorError49){throw _iteratorError49;}}}});}function $domReady(func){if(/^loaded|^complete|^interactive/.test(document.readyState)){setTimeout(func,0);}else {document.addEventListener('DOMContentLoaded',func);}}})(androidui||(androidui={}));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 _this47=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);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.androidUIElement.appendChild(this._showFPSNode);}this._showFPSNode.innerText='FPS:'+fps.toFixed(1);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 _this53=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;}_this53.getRect(first,_this53.mFirstRect);_this53.getRect(second,_this53.mSecondRect);if(_this53.mFirstRect.top<_this53.mSecondRect.top){return -1;}else if(_this53.mFirstRect.top>_this53.mSecondRect.top){return 1;}else if(_this53.mFirstRect.left<_this53.mSecondRect.left){return _this53.mIsLayoutRtl?1:-1;}else if(_this53.mFirstRect.left>_this53.mSecondRect.left){return _this53.mIsLayoutRtl?-1:1;}else if(_this53.mFirstRect.bottom<_this53.mSecondRect.bottom){return -1;}else if(_this53.mFirstRect.bottom>_this53.mSecondRect.bottom){return 1;}else if(_this53.mFirstRect.right<_this53.mSecondRect.right){return _this53.mIsLayoutRtl?1:-1;}else if(_this53.mFirstRect.right>_this53.mSecondRect.right){return _this53.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=Number.MIN_SAFE_INTEGER;Integer.MAX_VALUE=Number.MAX_SAFE_INTEGER;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 TypedValue=android.util.TypedValue;var System=java.lang.System;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var Transformation=view_5.animation.Transformation;var ViewGroup=function(_view_5$View){_inherits(ViewGroup,_view_5$View);function ViewGroup(context,bindElement,defStyle){_classCallCheck(this,ViewGroup);var _this54=_possibleConstructorReturn(this,Object.getPrototypeOf(ViewGroup).call(this,context,bindElement,defStyle));_this54.mLastTouchDownTime=0;_this54.mLastTouchDownIndex=-1;_this54.mLastTouchDownX=0;_this54.mLastTouchDownY=0;_this54.mGroupFlags=0;_this54.mLayoutMode=ViewGroup.LAYOUT_MODE_UNDEFINED;_this54.mChildren=[];_this54.mSuppressLayout=false;_this54.mLayoutCalledWhileSuppressed=false;_this54.mChildCountWithTransientState=0;_this54.initViewGroup();var a=_this54._attrBinder;a.addAttr('clipChildren',function(value){_this54.setClipChildren(a.parseBoolean(value));},function(){return _this54.getClipChildren();});a.addAttr('clipToPadding',function(value){_this54.setClipToPadding(a.parseBoolean(value));},function(){return _this54.isClipToPadding();});a.addAttr('animationCache',function(value){_this54.setAnimationCacheEnabled(a.parseBoolean(value,true));});a.addAttr('persistentDrawingCache',function(value){if(value=='none')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);else if(value=='animation')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);else if(value=='scrolling')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);else if(value=='all')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);});a.addAttr('addStatesFromChildren',function(value){_this54.setAddStatesFromChildren(a.parseBoolean(value,false));});a.addAttr('alwaysDrawnWithCache',function(value){_this54.setAlwaysDrawnWithCacheEnabled(a.parseBoolean(value,true));});a.addAttr('descendantFocusability',function(value){if(value=='beforeDescendants')_this54.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);else if(value=='afterDescendants')_this54.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);else if(value=='blocksDescendants')_this54.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);});a.addAttr('splitMotionEvents',function(value){_this54.setMotionEventSplittingEnabled(a.parseBoolean(value,false));});return _this54;}_createClass(ViewGroup,[{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_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:'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),_key19=0;_key19<_len19;_key19++){args[_key19]=arguments[_key19];}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;i--){var child=disappearingChildren.get(i);more=this.drawChild(canvas,child,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 LayoutParams=function(){function LayoutParams(){var _this55=this;_classCallCheck(this,LayoutParams);this._width=0;this._height=0;this._measuringParentWidthMeasureSpec=0;this._measuringParentHeightMeasureSpec=0;for(var _len20=arguments.length,args=Array(_len20),_key20=0;_key20<_len20;_key20++){args[_key20]=arguments[_key20];}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);this._attrBinder.addAttr('width',function(value){if(value==null)value=-2;_this55.width=value;},function(){return _this55._widthOrig;});this._attrBinder.addAttr('height',function(value){if(value==null)value=-2;_this55.height=value;},function(){return _this55._heightOrig;});}}_createClass(LayoutParams,[{key:'parseAttributeFrom',value:function parseAttributeFrom(node,context){var _this56=this;Array.from(node.attributes).forEach(function(attr){var layoutParamFiled=attr.name.split("layout_")[1];_this56._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{this._width=TypedValue.complexToDimensionPixelSize(this._width,parentWidth,this._measuringMeasureSpec);}catch(e){console.error(e);this._width=-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{this._height=TypedValue.complexToDimensionPixelSize(this._height,parentHeight,this._measuringMeasureSpec);}catch(e){console.error(e);this._height=-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(){_classCallCheck(this,MarginLayoutParams);var _this57=_possibleConstructorReturn(this,Object.getPrototypeOf(MarginLayoutParams).call(this));_this57._leftMargin=0;_this57._topMargin=0;_this57._rightMargin=0;_this57._bottomMargin=0;_this57._leftMarginOrig=0;_this57._topMarginOrig=0;_this57._rightMarginOrig=0;_this57._bottomMarginOrig=0;if(arguments.length===1){var src=arguments.length<=0?undefined:arguments[0];var _this57=_possibleConstructorReturn(this,Object.getPrototypeOf(MarginLayoutParams).call(this,src));if(src instanceof MarginLayoutParams){_this57.leftMargin=src._leftMargin;_this57.topMargin=src._topMargin;_this57.rightMargin=src._rightMargin;_this57.bottomMargin=src._bottomMargin;}}else if(arguments.length==2){var _this57=_possibleConstructorReturn(this,Object.getPrototypeOf(MarginLayoutParams).call(this,arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]));}_this57._attrBinder.addAttr('marginLeft',function(value){if(value==null)value=0;_this57.leftMargin=value;},function(){return _this57._leftMarginOrig;});_this57._attrBinder.addAttr('marginStart',function(value){if(value==null)value=0;_this57.leftMargin=value;},function(){return _this57._leftMarginOrig;});_this57._attrBinder.addAttr('marginTop',function(value){if(value==null)value=0;_this57.topMargin=value;},function(){return _this57._topMarginOrig;});_this57._attrBinder.addAttr('marginRight',function(value){if(value==null)value=0;_this57.rightMargin=value;},function(){return _this57._rightMarginOrig;});_this57._attrBinder.addAttr('marginEnd',function(value){if(value==null)value=0;_this57.rightMargin=value;},function(){return _this57._rightMarginOrig;});_this57._attrBinder.addAttr('marginBottom',function(value){if(value==null)value=0;_this57.bottomMargin=value;},function(){return _this57._bottomMargin;});_this57._attrBinder.addAttr('margin',function(value){if(value==null)value=0;var _this57$_attrBinder$p=_this57._attrBinder.parsePaddingMarginLTRB(value);var _this57$_attrBinder$p2=_slicedToArray(_this57$_attrBinder$p,4);var left=_this57$_attrBinder$p2[0];var top=_this57$_attrBinder$p2[1];var right=_this57$_attrBinder$p2[2];var bottom=_this57$_attrBinder$p2[3];_this57.leftMargin=left;_this57.topMargin=top;_this57.rightMargin=right;_this57.bottomMargin=bottom;});return _possibleConstructorReturn(_this57);}_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{this._leftMargin=TypedValue.complexToDimensionPixelSize(this._leftMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._leftMargin=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{this._topMargin=TypedValue.complexToDimensionPixelSize(this._topMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._topMargin=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{this._rightMargin=TypedValue.complexToDimensionPixelSize(this._rightMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._rightMargin=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{this._bottomMargin=TypedValue.complexToDimensionPixelSize(this._bottomMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._bottomMargin=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 i=0;i0&&(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(wp);}}if(replacement!=null){x+=this.handleReplacement(replacement,wp,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(wp);}x+=this.handleText(wp,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 i=0;ilineEnd){limit=lineEnd;}if(offset>=start&&offset>>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 _this68=_possibleConstructorReturn(this,Object.getPrototypeOf(Ellipsizer).call(this,s));_this68.mWidth=0;_this68.mText=s;return _this68;}_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 _this69=_possibleConstructorReturn(this,Object.getPrototypeOf(SpannedEllipsizer).call(this,display));_this69.mSpanned=display;return _this69;}_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 i=limit-1;while(i>=0){width-=w[i];if(width<0.0)break;i--;}while(i=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()&&child.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 _this71=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT));_this71.x=0;_this71.y=0;_this71.type=0;_this71.flags=0;_this71.exitAnimation=android.R.anim.activity_close_exit;_this71.enterAnimation=android.R.anim.activity_open_enter;_this71.resumeAnimation=android.R.anim.activity_close_enter;_this71.hideAnimation=android.R.anim.activity_open_exit;_this71.dimAmount=0;_this71.mTitle="";_this71.type=_type;return _this71;}_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 _this72=_possibleConstructorReturn(this,Object.getPrototypeOf(TranslateAnimation).call(this));_this72.mFromXType=TranslateAnimation.ABSOLUTE;_this72.mToXType=TranslateAnimation.ABSOLUTE;_this72.mFromYType=TranslateAnimation.ABSOLUTE;_this72.mToYType=TranslateAnimation.ABSOLUTE;_this72.mFromXValue=0.0;_this72.mToXValue=0.0;_this72.mFromYValue=0.0;_this72.mToYValue=0.0;_this72.mFromXDelta=0;_this72.mToXDelta=0;_this72.mFromYDelta=0;_this72.mToYDelta=0;if(arguments.length===4){_this72.mFromXValue=arguments.length<=0?undefined:arguments[0];_this72.mToXValue=arguments.length<=1?undefined:arguments[1];_this72.mFromYValue=arguments.length<=2?undefined:arguments[2];_this72.mToYValue=arguments.length<=3?undefined:arguments[3];_this72.mFromXType=TranslateAnimation.ABSOLUTE;_this72.mToXType=TranslateAnimation.ABSOLUTE;_this72.mFromYType=TranslateAnimation.ABSOLUTE;_this72.mToYType=TranslateAnimation.ABSOLUTE;}else {_this72.mFromXType=arguments.length<=0?undefined:arguments[0];_this72.mFromXValue=arguments.length<=1?undefined:arguments[1];_this72.mToXType=arguments.length<=2?undefined:arguments[2];_this72.mToXValue=arguments.length<=3?undefined:arguments[3];_this72.mFromYType=arguments.length<=4?undefined:arguments[4];_this72.mFromYValue=arguments.length<=5?undefined:arguments[5];_this72.mToYType=arguments.length<=6?undefined:arguments[6];_this72.mToYValue=arguments.length<=7?undefined:arguments[7];}return _this72;}_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 _this73=_possibleConstructorReturn(this,Object.getPrototypeOf(AlphaAnimation).call(this));_this73.mFromAlpha=0;_this73.mToAlpha=0;_this73.mFromAlpha=fromAlpha;_this73.mToAlpha=toAlpha;return _this73;}_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 _this74=_possibleConstructorReturn(this,Object.getPrototypeOf(ScaleAnimation).call(this));_this74.mFromX=0;_this74.mToX=0;_this74.mFromY=0;_this74.mToY=0;_this74.mFromXData=0;_this74.mToXData=0;_this74.mFromYData=0;_this74.mToYData=0;_this74.mPivotXType=ScaleAnimation.ABSOLUTE;_this74.mPivotYType=ScaleAnimation.ABSOLUTE;_this74.mPivotXValue=0.0;_this74.mPivotYValue=0.0;_this74.mPivotX=0;_this74.mPivotY=0;_this74.mResources=null;_this74.mFromX=fromX;_this74.mToX=toX;_this74.mFromY=fromY;_this74.mToY=toY;_this74.mPivotXValue=pivotXValue;_this74.mPivotXType=pivotXType;_this74.mPivotYValue=pivotYValue;_this74.mPivotYType=pivotYType;_this74.initializePivotPoint();return _this74;}_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 _this75=_possibleConstructorReturn(this,Object.getPrototypeOf(AnimationSet).call(this));_this75.mFlags=0;_this75.mAnimations=new ArrayList();_this75.mTempTransformation=new Transformation();_this75.mLastEnd=0;_this75.setFlag(AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK,shareInterpolator);_this75.init();return _this75;}_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 _this76=_possibleConstructorReturn(this,Object.getPrototypeOf(DecorView).call(this,window.mContext));_this76.Window_this=window;_this76.bindElement.classList.add(window.mContext.constructor.name);_this76.setBackgroundColor(android.graphics.Color.WHITE);return _this76;}_createClass(DecorView,[{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 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 _this77=_possibleConstructorReturn(this,Object.getPrototypeOf(Activity).call(this,androidUI));_this77.mWindowAdded=false;_this77.mVisibleFromClient=true;_this77.mResultCode=Activity.RESULT_CANCELED;_this77.mResultData=null;_this77.mWindow=new Window(_this77);_this77.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);_this77.mWindow.setDimAmount(0.7);_this77.mWindow.getAttributes().flags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;_this77.mWindow.setCallback(_this77);return _this77;}_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:'startActivityForResult',value:function startActivityForResult(intent,requestCode,options){if(typeof intent==='string')intent=new Intent(intent);if(requestCode>=0)intent.mRequestCode=requestCode;this.androidUI.mActivityThread.scheduleLaunchActivity(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 _iteratorNormalCompletion55=true;var _didIteratorError55=false;var _iteratorError55=undefined;try{for(var _iterator55=intents[Symbol.iterator](),_step55;!(_iteratorNormalCompletion55=(_step55=_iterator55.next()).done);_iteratorNormalCompletion55=true){var intent=_step55.value;this.startActivity(intent,options);}}catch(err){_didIteratorError55=true;_iteratorError55=err;}finally {try{if(!_iteratorNormalCompletion55&&_iterator55.return){_iterator55.return();}}finally {if(_didIteratorError55){throw _iteratorError55;}}}}},{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);}},{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(){this.mCalled=false;this.onPause();this.mResumed=false;if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " 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$getPrototypeO7;_classCallCheck(this,Application);for(var _len25=arguments.length,args=Array(_len25),_key25=0;_key25<_len25;_key25++){args[_key25]=arguments[_key25];}var _this78=_possibleConstructorReturn(this,(_Object$getPrototypeO7=Object.getPrototypeOf(Application)).call.apply(_Object$getPrototypeO7,[this].concat(args)));_this78.mActivityLifecycleCallbacks=new ArrayList();return _this78;}_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=new Array(VelocityTracker.NUM_PAST);this.pastY=new Array(VelocityTracker.NUM_PAST);this.pastTime=new Array(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 _this79=this;this.mQuickScaleEnabled=scales;if(this.mQuickScaleEnabled&&this.mGestureDetector==null){var gestureListener=function(){var _this=_this79;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=new Array(SplineOverScroller.NB_SAMPLES+1);SplineOverScroller.SPLINE_TIME=new Array(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 _this82=_possibleConstructorReturn(this,Object.getPrototypeOf(ScrollView).call(this,context,bindElement,defStyle));_this82.mLastScroll=0;_this82.mTempRect=new Rect();_this82.mLastMotionY=0;_this82.mIsLayoutDirty=true;_this82.mIsBeingDragged=false;_this82.mFillViewport=false;_this82.mSmoothScrollingEnabled=true;_this82.mMinimumVelocity=0;_this82.mMaximumVelocity=0;_this82.mOverscrollDistance=0;_this82._mOverflingDistance=0;_this82.mActivePointerId=ScrollView.INVALID_POINTER;_this82.initScrollView();_this82._attrBinder.addAttr('fillViewport',function(value){_this82.setFillViewport(_this82._attrBinder.parseBoolean(value));});return _this82;}_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 _get3;if(this.getChildCount()>0){throw new Error("ScrollView can host only one direct child");}for(var _len28=arguments.length,args=Array(_len28),_key28=0;_key28<_len28;_key28++){args[_key28]=arguments[_key28];}return (_get3=_get2(Object.getPrototypeOf(ScrollView.prototype),'addView',this)).call.apply(_get3,[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()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 _this83=_possibleConstructorReturn(this,Object.getPrototypeOf(LinearLayout).call(this,context,bindElement,defStyle));_this83.mBaselineAligned=true;_this83.mBaselineAlignedChildIndex=-1;_this83.mBaselineChildTop=0;_this83.mOrientation=0;_this83.mGravity=Gravity.LEFT|Gravity.TOP;_this83.mTotalLength=0;_this83.mWeightSum=-1;_this83.mUseLargestChild=false;_this83.mDividerWidth=0;_this83.mDividerHeight=0;_this83.mShowDividers=LinearLayout.SHOW_DIVIDER_NONE;_this83.mDividerPadding=0;_this83._attrBinder.addAttr('orientation',function(value){if((value+"").toUpperCase()==='VERTICAL'||LinearLayout.VERTICAL==value){_this83.setOrientation(LinearLayout.VERTICAL);}else if((value+"").toUpperCase()==='HORIZONTAL'||LinearLayout.HORIZONTAL==value){_this83.setOrientation(LinearLayout.HORIZONTAL);}},function(){return _this83.mOrientation;});_this83._attrBinder.addAttr('gravity',function(value){_this83.setGravity(_this83._attrBinder.parseGravity(value,_this83.mGravity));},function(){return _this83.mGravity;});_this83._attrBinder.addAttr('baselineAligned',function(value){if(!_this83._attrBinder.parseBoolean(value))_this83.setBaselineAligned(false);});_this83._attrBinder.addAttr('weightSum',function(value){var weightSum=Number.parseFloat(value);if(!Number.isNaN(weightSum)&&weightSum!=null){_this83.setWeightSum(weightSum);}},function(){return _this83.mWeightSum;});_this83._attrBinder.addAttr('baselineAlignedChildIndex',function(value){value=Number.parseInt(value);if(Number.isSafeInteger(value)){_this83.mBaselineAlignedChildIndex=value;}});_this83._attrBinder.addAttr('measureWithLargestChild',function(value){value=Number.parseInt(value);if(Number.isSafeInteger(value)){_this83.mUseLargestChild=_this83._attrBinder.parseBoolean(value,_this83.mUseLargestChild);}});_this83._attrBinder.addAttr('divider',function(value){_this83.setDividerDrawable(_this83._attrBinder.parseDrawable(value));});_this83._attrBinder.addAttr('showDividers',function(value){var fieldName=('SHOW_DIVIDER_'+value).toUpperCase();if(Number.isInteger(LinearLayout[fieldName])){_this83.setShowDividers(LinearLayout[fieldName]);}});_this83._attrBinder.addAttr('dividerPadding',function(value){value=Number.parseInt(value);if(Number.isInteger(value)){_this83.setDividerPadding(value);}});return _this83;}_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 i=0;i0){var weightSum=this.mWeightSum>0?this.mWeightSum:totalWeight;this.mTotalLength=0;for(var i=0;i0){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childWidthMeasureSpec=LinearLayout.getChildMeasureSpec(widthMeasureSpec,this.mPaddingLeft+this.mPaddingRight+lp.leftMargin+lp.rightMargin,lp.width);if(lp.height!=0||heightMode!=MeasureSpec.EXACTLY){var 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));}childState=LinearLayout.combineMeasuredStates(childState,child.getMeasuredState()&View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT);}var margin=lp.leftMargin+lp.rightMargin;var measuredWidth=child.getMeasuredWidth()+margin;maxWidth=Math.max(maxWidth,measuredWidth);var 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;var 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(var i=0;i0){child.measure(MeasureSpec.makeMeasureSpec(child.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 totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+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 i=0;i0){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 i=0;i0){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childHeightMeasureSpec=LinearLayout.getChildMeasureSpec(heightMeasureSpec,this.mPaddingTop+this.mPaddingBottom+lp.topMargin+lp.bottomMargin,lp.height);if(lp.width!=0||widthMode!=MeasureSpec.EXACTLY){var 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 {var totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+child.getMeasuredWidth()+lp.leftMargin+lp.rightMargin+this.getNextLocationOffset(child));}var matchHeightLocally=heightMode!=MeasureSpec.EXACTLY&&lp.height==LinearLayout.LayoutParams.MATCH_PARENT;var margin=lp.topMargin+lp.bottomMargin;var 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){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);}}}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 i=0;i0){child.measure(MeasureSpec.makeMeasureSpec(largestChildWidth,MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(child.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;(function(InputType){InputType[InputType["TYPE_NULL"]=0]="TYPE_NULL";InputType[InputType["TYPE_CLASS_TEXT"]=1]="TYPE_CLASS_TEXT";InputType[InputType["TYPE_CLASS_URI"]=2]="TYPE_CLASS_URI";InputType[InputType["TYPE_CLASS_EMAIL_ADDRESS"]=3]="TYPE_CLASS_EMAIL_ADDRESS";InputType[InputType["TYPE_CLASS_NUMBER"]=4]="TYPE_CLASS_NUMBER";InputType[InputType["TYPE_CLASS_PHONE"]=5]="TYPE_CLASS_PHONE";InputType[InputType["TYPE_PASSWORD"]=6]="TYPE_PASSWORD";InputType[InputType["TYPE_TEXT_PASSWORD"]=7]="TYPE_TEXT_PASSWORD";InputType[InputType["TYPE_TEXT_VISIBLE_PASSWORD"]=8]="TYPE_TEXT_VISIBLE_PASSWORD";InputType[InputType["TYPE_NUMBER_PASSWORD"]=9]="TYPE_NUMBER_PASSWORD";InputType[InputType["TYPE_NUMBER_SIGNED"]=10]="TYPE_NUMBER_SIGNED";InputType[InputType["TYPE_NUMBER_DECIMAL"]=11]="TYPE_NUMBER_DECIMAL";})(text.InputType||(text.InputType={}));var InputType=text.InputType;var 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];LimitCode.TYPE_NUMBER_PASSWORD=[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_NUMBER_SIGNED=[KeyEvent.KEYCODE_Minus,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_NUMBER_DECIMAL=[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$getPrototypeO8;_classCallCheck(this,AdapterView);for(var _len31=arguments.length,args=Array(_len31),_key31=0;_key31<_len31;_key31++){args[_key31]=arguments[_key31];}var _this88=_possibleConstructorReturn(this,(_Object$getPrototypeO8=Object.getPrototypeOf(AdapterView)).call.apply(_Object$getPrototypeO8,[this].concat(args)));_this88.mFirstPosition=0;_this88.mSpecificTop=0;_this88.mSyncPosition=0;_this88.mSyncRowId=AdapterView.INVALID_ROW_ID;_this88.mSyncHeight=0;_this88.mNeedSync=false;_this88.mSyncMode=0;_this88.mLayoutHeight=0;_this88.mInLayout=false;_this88.mNextSelectedPosition=AdapterView.INVALID_POSITION;_this88.mNextSelectedRowId=AdapterView.INVALID_ROW_ID;_this88.mSelectedPosition=AdapterView.INVALID_POSITION;_this88.mSelectedRowId=AdapterView.INVALID_ROW_ID;_this88.mItemCount=0;_this88.mOldItemCount=0;_this88.mOldSelectedPosition=AdapterView.INVALID_POSITION;_this88.mOldSelectedRowId=AdapterView.INVALID_ROW_ID;_this88.mBlockLayoutRequests=false;return _this88;}_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 v=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$getPrototypeO9;_classCallCheck(this,Metrics);for(var _len32=arguments.length,args=Array(_len32),_key32=0;_key32<_len32;_key32++){args[_key32]=arguments[_key32];}var _this91=_possibleConstructorReturn(this,(_Object$getPrototypeO9=Object.getPrototypeOf(Metrics)).call.apply(_Object$getPrototypeO9,[this].concat(args)));_this91.width=0;return _this91;}_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=new Array(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 i=this.mColumns-1;i>=0;i--){this.setValueInternal(row,i,values[i]);}}}},{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=new Array(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 i=where+moving-1;i>=where;i--){var destrow=i-where+gapend-moving;for(var j=0;j=valuegap[j]){val+=valuegap[j+columns];}if(destrow>=valuegap[j]){val-=valuegap[j+columns];}values[destrow*columns+j]=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;i--){var destrow=i-where+this.mRowGapStart+this.mRowGapLength-moving;for(var j=0;j=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 _this92=_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));_this92.mLineCount=0;_this92.mTopPadding=0;_this92.mBottomPadding=0;_this92.mColumns=0;_this92.mEllipsizedWidth=0;_this92.mMaximumVisibleLineCount=Integer.MAX_VALUE;_this92.mFontMetricsInt=new Paint.FontMetricsInt();if(source==null){_this92.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;_this92.mLines=new Array(2*_this92.mColumns);_this92.mLineDirections=new Array(2*_this92.mColumns);_this92.mMeasured=MeasuredText.obtain();return _possibleConstructorReturn(_this92);}if(ellipsize!=null){var e=_this92.getText();e.mLayout=_this92;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this92.mEllipsizedWidth=ellipsizedWidth;_this92.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;}else {_this92.mColumns=StaticLayout.COLUMNS_NORMAL;_this92.mEllipsizedWidth=outerwidth;}_this92.mLines=new Array(2*_this92.mColumns);_this92.mLineDirections=new Array(2*_this92.mColumns);_this92.mMaximumVisibleLineCount=maxLines;_this92.mMeasured=MeasuredText.obtain();_this92.generate(source,bufstart,bufend,paint,outerwidth,textDir,spacingmult,spacingadd,includepad,includepad,ellipsizedWidth,ellipsize);_this92.mMeasured=MeasuredText.recycle(_this92.mMeasured);_this92.mFontMetricsInt=null;return _this92;}_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=new Array(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 i=undefined;for(i=0;iavail){break;}sum+=w;}ellipsisStart=i;ellipsisCount=len-i;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 w=widths[right-1+lineStart-widthStart];if(w+rsum>ravail){break;}rsum+=w;}var lavail=avail-ellipsisWidth-rsum;for(left=0;leftlavail){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;}},{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 _this93=_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));_this93.mEllipsizedWidth=0;_this93.mNumberOfBlocks=0;_this93.mIndexFirstChangedBlock=0;_this93.mTopPadding=0;_this93.mBottomPadding=0;_this93.mBase=base;_this93.mDisplay=display;if(ellipsize!=null){_this93.mInts=new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE);_this93.mEllipsizedWidth=ellipsizedWidth;_this93.mEllipsizeAt=ellipsize;}else {_this93.mInts=new PackedIntVector(DynamicLayout.COLUMNS_NORMAL);_this93.mEllipsizedWidth=width;_this93.mEllipsizeAt=null;}_this93.mObjects=new PackedObjectVector(1);_this93.mIncludePad=includepad;if(ellipsize!=null){var e=_this93.getText();e.mLayout=_this93;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this93.mEllipsize=true;}var start=undefined;if(ellipsize!=null){start=new Array(DynamicLayout.COLUMNS_ELLIPSIZE);start[DynamicLayout.ELLIPSIS_START]=DynamicLayout.ELLIPSIS_UNDEFINED;}else {start=new Array(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=new Array(this.mBlockEndLines.length);for(var i=0;ipreviousBlockEndLine){if(this.mNumberOfBlocks==this.mBlockEndLines.length){var blockEndLines=new Array(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 i=firstBlock;i=endLine){lastBlock=i;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=new Array(newSize);var blockIndices=new Array(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 i=newFirstChangedBlock;i>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 _this94=_possibleConstructorReturn(this,Object.getPrototypeOf(ReplacementCharSequence).call(this,source));_this94.mSource=source;_this94.mOriginal=original;_this94.mReplacement=replacement;return _this94;}_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)_this96.setHeight(value);},function(){if(_this96.getMaxHeight()===_this96.getMinimumHeight())return _this96.getMaxHeight();return null;});a.addAttr('minLines',function(value){_this96.setMinLines(a.parseNumber(value,_this96.getMinLines()));},function(){return _this96.getMinLines();});a.addAttr('minHeight',function(value){_this96.setMinHeight(a.parseNumber(value,_this96.getMinHeight()));},function(){return _this96.getMinHeight();});a.addAttr('maxEms',function(value){_this96.setMaxEms(a.parseNumber(value,_this96.getMaxEms()));},function(){return _this96.getMaxEms();});a.addAttr('maxWidth',function(value){_this96.setMaxWidth(a.parseNumber(value,_this96.getMaxWidth()));},function(){return _this96.getMaxWidth();});a.addAttr('ems',function(value){var ems=a.parseNumber(value,null);if(ems!=null)_this96.setEms(ems);},function(){if(_this96.getMinEms()===_this96.getMaxEms())return _this96.getMaxEms();return null;});a.addAttr('width',function(value){value=a.parseNumber(value,-1);if(value>=0)_this96.setWidth(value);},function(){if(_this96.getMinWidth()===_this96.getMaxWidth())return _this96.getMinWidth();return null;});a.addAttr('minEms',function(value){_this96.setMinEms(a.parseNumber(value,_this96.getMinEms()));},function(){return _this96.getMinEms();});a.addAttr('minWidth',function(value){_this96.setMinWidth(a.parseNumber(value,_this96.getMinWidth()));},function(){return _this96.getMinWidth();});a.addAttr('gravity',function(value){_this96.setGravity(a.parseGravity(value,_this96.mGravity));},function(){return _this96.mGravity;});a.addAttr('hint',function(value){_this96.setHint(a.parseString(value));},function(){return _this96.getHint();});a.addAttr('text',function(value){_this96.setText(a.parseString(value));},function(){return _this96.getText();});a.addAttr('scrollHorizontally',function(value){_this96.setHorizontallyScrolling(a.parseBoolean(value,false));});a.addAttr('singleLine',function(value){_this96.setSingleLine(a.parseBoolean(value,false));});a.addAttr('ellipsize',function(value){var ellipsize=TextUtils.TruncateAt[(value+'').toUpperCase()];if(ellipsize)_this96.setEllipsize(ellipsize);});a.addAttr('marqueeRepeatLimit',function(value){var marqueeRepeatLimit=a.parseNumber(value,-1);if(marqueeRepeatLimit>=0)_this96.setMarqueeRepeatLimit(marqueeRepeatLimit);});a.addAttr('includeFontPadding',function(value){_this96.setIncludeFontPadding(a.parseBoolean(value,false));});a.addAttr('enabled',function(value){_this96.setEnabled(a.parseBoolean(value,_this96.isEnabled()));},function(){return _this96.isEnabled();});a.addAttr('lineSpacingExtra',function(value){_this96.setLineSpacing(a.parseNumber(value,_this96.mSpacingAdd),_this96.mSpacingMult);},function(){return _this96.mSpacingAdd;});a.addAttr('lineSpacingMultiplier',function(value){_this96.setLineSpacing(_this96.mSpacingAdd,a.parseNumber(value,_this96.mSpacingMult));},function(){return _this96.mSpacingMult;});_this96.setTextSize(14);if(defStyle)_this96.applyDefaultAttributes(defStyle);_this96.bindElement.innerHTML=_this96.bindElement.innerHTML.trim();var text=_this96.mText||_this96.bindElement.innerText;_this96.bindElement.innerHTML='';_this96.setText(text,_this96.mBufferType);return _this96;}_createClass(TextView,[{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 _len33=arguments.length,args=Array(_len33),_key33=0;_key33<_len33;_key33++){args[_key33]=arguments[_key33];}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 _vspace=bottom-top-compoundPaddingBottom-compoundPaddingTop;var 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();}}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();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 dx=Math.floor(this.mMarquee.getGhostOffset());canvas.translate(isLayoutRtl?-dx:dx,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 _this97=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=_this97;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];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 _this100=_possibleConstructorReturn(this,Object.getPrototypeOf(AbsListView).call(this,context,bindElement,defStyle));_this100.mChoiceMode=AbsListView.CHOICE_MODE_NONE;_this100.mCheckedItemCount=0;_this100.mDeferNotifyDataSetChanged=false;_this100.mDrawSelectorOnTop=false;_this100.mSelectorPosition=AbsListView.INVALID_POSITION;_this100.mSelectorRect=new Rect();_this100.mRecycler=new AbsListView.RecycleBin(_this100);_this100.mSelectionLeftPadding=0;_this100.mSelectionTopPadding=0;_this100.mSelectionRightPadding=0;_this100.mSelectionBottomPadding=0;_this100.mListPadding=new Rect();_this100.mWidthMeasureSpec=0;_this100.mMotionPosition=0;_this100.mMotionViewOriginalTop=0;_this100.mMotionViewNewTop=0;_this100.mMotionX=0;_this100.mMotionY=0;_this100.mTouchMode=AbsListView.TOUCH_MODE_REST;_this100.mLastY=0;_this100.mMotionCorrection=0;_this100.mSelectedTop=0;_this100.mSmoothScrollbarEnabled=true;_this100.mResurrectToPosition=AbsListView.INVALID_POSITION;_this100.mOverscrollMax=0;_this100.mLastTouchMode=AbsListView.TOUCH_MODE_UNKNOWN;_this100.mScrollProfilingStarted=false;_this100.mFlingProfilingStarted=false;_this100.mTranscriptMode=0;_this100.mCacheColorHint=0;_this100.mLastScrollState=AbsListView.OnScrollListener.SCROLL_STATE_IDLE;_this100.mDensityScale=0;_this100.mMinimumVelocity=0;_this100.mMaximumVelocity=0;_this100.mVelocityScale=1.0;_this100.mIsScrap=new Array(1);_this100.mActivePointerId=AbsListView.INVALID_POINTER;_this100.mOverscrollDistance=0;_this100._mOverflingDistance=0;_this100.mFirstPositionDistanceGuess=0;_this100.mLastPositionDistanceGuess=0;_this100.mDirection=0;_this100.mGlowPaddingLeft=0;_this100.mGlowPaddingRight=0;_this100.mLastHandledItemCount=0;_this100.initAbsListView();_this100.setVerticalScrollBarEnabled(true);_this100.initializeScrollbars();_this100._attrBinder.addAttr('listSelector',function(value){var d=_this100._attrBinder.parseDrawable(value);if(d)_this100.setSelector(d);});_this100._attrBinder.addAttr('drawSelectorOnTop',function(value){_this100.mDrawSelectorOnTop=_this100._attrBinder.parseBoolean(value,false);});_this100._attrBinder.addAttr('stackFromBottom',function(value){_this100.setStackFromBottom(_this100._attrBinder.parseBoolean(value,false));});_this100._attrBinder.addAttr('scrollingCache',function(value){_this100.setScrollingCacheEnabled(_this100._attrBinder.parseBoolean(value,true));});_this100._attrBinder.addAttr('transcriptMode',function(value){var transcriptMode=_this100._attrBinder.parseNumber(value,AbsListView.TRANSCRIPT_MODE_DISABLED);_this100.setTranscriptMode(transcriptMode);});_this100._attrBinder.addAttr('cacheColorHint',function(value){var color=_this100._attrBinder.parseColor(value,0);_this100.setCacheColorHint(color);});_this100._attrBinder.addAttr('fastScrollEnabled',function(value){var enableFastScroll=_this100._attrBinder.parseBoolean(value,false);_this100.setFastScrollEnabled(enableFastScroll);});_this100._attrBinder.addAttr('fastScrollAlwaysVisible',function(value){var fastScrollAlwaysVisible=_this100._attrBinder.parseBoolean(value,false);_this100.setFastScrollAlwaysVisible(fastScrollAlwaysVisible);});_this100._attrBinder.addAttr('smoothScrollbar',function(value){var smoothScrollbar=_this100._attrBinder.parseBoolean(value,true);_this100.setSmoothScrollbarEnabled(smoothScrollbar);});_this100._attrBinder.addAttr('choiceMode',function(value){_this100.setChoiceMode(_this100._attrBinder.parseNumber(value,AbsListView.CHOICE_MODE_NONE));});return _this100;}_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 child=this.getChildAt(count-1);canScrollDown=child.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 _len34=arguments.length,args=Array(_len34),_key34=0;_key34<_len34;_key34++){args[_key34]=arguments[_key34];}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 x=Math.floor(ev.getX(index));var y=Math.floor(ev.getY(index));this.mMotionCorrection=0;this.mActivePointerId=id;this.mMotionX=x;this.mMotionY=y;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;}}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 _this101=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;i--){var child=this.getChildAt(i);if(child.getTop()<=bottom){break;}else {start=i;count++;var position=firstPosition+i;if(position>=headerViewsCount&&position0){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 i=childCount-1;i>=0;i--){var v=this.getChildAt(i);var top=v.getTop();var bottom=v.getBottom();if(i==childCount-1){selectedTop=top;if(firstPosition+childCountchildrenBottom){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();}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 _this106=this;_classCallCheck(this,FlingRunnable);this.mLastFlingY=0;this.mCheckFlywheel=function(){var _this=_this106;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 _this107=this;this.stop();if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this107;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 _this108=this;this.stop();if(boundPosition==AbsListView.INVALID_POSITION){this.start(position);return;}if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this108;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(boundTravel0){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 _this109=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;_this109._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this109;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(nextPosextraScroll){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 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:{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 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 {var bottom=listHeight-extraScroll;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 lastPos=firstPos+childCount-1;var viewTravelCount=0;if(positionlastPos){viewTravelCount=position-lastPos;}var screenTravelCount=viewTravelCount/childCount;var modifier=Math.min(Math.abs(screenTravelCount),1.);if(positionlastPos){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 distance=targetTop-this.mOffsetFromTop;var duration=Math.floor(this.mScrollDuration*(Math.abs(distance)/this._AbsListView_this.getHeight()));this._AbsListView_this.smoothScrollBy(distance,duration,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 _this110=_possibleConstructorReturn(this,Object.getPrototypeOf(AdapterDataSetObserver).call(this,arg));_this110._AbsListView_this=arg;return _this110;}_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(){_classCallCheck(this,LayoutParams);var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this));_this111.viewType=0;_this111.scrappedFromPosition=0;_this111.itemId=-1;if(arguments.length===1){var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,arguments.length<=0?undefined:arguments[0]));}else if(arguments.length===2){var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]));}else if(arguments.length===3){var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]));_this111.viewType=arguments.length<=2?undefined:arguments[2];}return _possibleConstructorReturn(_this111);}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 _this113=_possibleConstructorReturn(this,Object.getPrototypeOf(ListView).call(this,context,bindElement,null));_this113.mHeaderViewInfos=new ArrayList();_this113.mFooterViewInfos=new ArrayList();_this113.mDividerHeight=0;_this113.mIsCacheColorOpaque=false;_this113.mDividerIsOpaque=false;_this113.mHeaderDividersEnabled=true;_this113.mFooterDividersEnabled=true;_this113.mAreAllItemsSelectable=true;_this113.mItemsCanFocus=false;_this113.mTempRect=new Rect();_this113.mArrowScrollFocusResult=new ListView.ArrowScrollFocusResult();_this113._attrBinder.addAttr('divider',function(value){var divider=_this113._attrBinder.parseDrawable(value);if(divider)_this113.setDivider(divider);});_this113._attrBinder.addAttr('overScrollHeader',function(value){var header=_this113._attrBinder.parseDrawable(value);if(header)_this113.setOverscrollHeader(header);});_this113._attrBinder.addAttr('overScrollFooter',function(value){var footer=_this113._attrBinder.parseDrawable(value);if(footer)_this113.setOverscrollFooter(footer);});_this113._attrBinder.addAttr('dividerHeight',function(value){var dividerHeight=_this113._attrBinder.parseNumber(value,-1);if(dividerHeight>=0){_this113.setDividerHeight(dividerHeight);}});_this113._attrBinder.addAttr('headerDividersEnabled',function(value){_this113.setHeaderDividersEnabled(_this113._attrBinder.parseBoolean(value,true));});_this113._attrBinder.addAttr('footerDividersEnabled',function(value){_this113.setFooterDividersEnabled(_this113._attrBinder.parseBoolean(value,true));});if(defStyle)_this113.applyDefaultAttributes(defStyle);return _this113;}_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;i--){var v=this.getChildAt(i);if(y>=v.getTop()){return this.mFirstPosition+i;}}}}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 childCount=this.getChildCount();if(childCount>0){this.correctTooLow(childCount);}}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(position);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 i=start;i=footerLimit;if((headerDividers||!isHeader)&&(footerDividers||!isFooter)){var child=this.getChildAt(i);top=child.getTop();if(drawDividers&&top>effectivePaddingTop){var isFirstItem=i==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,i-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 _len35=arguments.length,args=Array(_len35),_key35=0;_key35<_len35;_key35++){args[_key35]=arguments[_key35];}return (_get4=_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'addView',this)).call.apply(_get4,[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 x=Math.floor(ev.getX());if(!this.inChild(Math.floor(x),Math.floor(ev.getY()))){this.mIsBeingDragged=false;this.recycleVelocityTracker();break;}this.mLastMotionX=x;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 parent=this.getParent();if(parent!=null){parent.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_HSCROLL);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 scrollDelta=maxJump;if(direction==View.FOCUS_LEFT&&this.getScrollX()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 _this115=_possibleConstructorReturn(this,Object.getPrototypeOf(RelativeLayout).call(this,context,bindElement,defStyle));_this115.mBaselineView=null;_this115.mGravity=Gravity.START|Gravity.TOP;_this115.mContentBounds=new Rect();_this115.mSelfBounds=new Rect();_this115.mIgnoreGravity=View.NO_ID;_this115.mGraph=new RelativeLayout.DependencyGraph();_this115.mAllowBrokenMeasureSpecs=false;_this115.mMeasureVerticalWithPaddingMargin=false;_this115._attrBinder.addAttr('ignoreGravity',function(value){_this115.setIgnoreGravity(value);});_this115._attrBinder.addAttr('gravity',function(value){_this115.setGravity(_this115._attrBinder.parseGravity(value,_this115.mGravity));});_this115.queryCompatibilityModes();return _this115;}_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 i=0;i=0){height=Math.max(height,this.mLayoutParams.height);}height=Math.max(height,this.getSuggestedMinimumHeight());height=RelativeLayout.resolveSize(height,heightMeasureSpec);if(offsetVerticalAxis){for(var i=0;i=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){_this119.setForceDisableDrawText(true);}};this.mSingleLineInputElement.oninput=function(){return _this119.onInputValueChange();};}if(this.inputElement===this.mSingleLineInputElement)return;if(this.inputElement&&this.inputElement.parentElement){this.bindElement.removeChild(this.inputElement);this.bindElement.appendChild(this.mSingleLineInputElement);}this.inputElement=this.mSingleLineInputElement;}},{key:'switchToMultilineInputElement',value:function switchToMultilineInputElement(){var _this120=this;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.mMultilineInputElement.onblur=function(){_this120.mMultilineInputElement.style.opacity='0';_this120.setForceDisableDrawText(false);};this.mMultilineInputElement.onfocus=function(){_this120.mMultilineInputElement.style.opacity='1';if(_this120.getText().length>0){_this120.setForceDisableDrawText(true);}};this.mMultilineInputElement.oninput=function(){return _this120.onInputValueChange();};}if(this.inputElement===this.mMultilineInputElement)return;if(this.inputElement&&this.inputElement.parentElement){this.bindElement.removeChild(this.inputElement);this.bindElement.appendChild(this.mMultilineInputElement);}this.inputElement=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:'performClick',value:function performClick(event){this.tryShowInputElement();return _get2(Object.getPrototypeOf(EditText.prototype),'performClick',this).call(this,event);}},{key:'tryDismissInputElement',value:function tryDismissInputElement(){try{if(this.inputElement.parentNode)this.bindElement.removeChild(this.inputElement);}catch(e){}this.setForceDisableDrawText(false);}},{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:'isInputElementShowed',value:function isInputElementShowed(){return this.inputElement.parentElement!=null;}},{key:'setForceDisableDrawText',value:function setForceDisableDrawText(disable){if(this.mForceDisableDraw==disable)return;this.mForceDisableDraw=disable;if(disable){this.mTextPaint.setAlpha(0);}else {this.mTextPaint.setAlpha(255);}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){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 _get2(Object.getPrototypeOf(EditText.prototype),'onTouchEvent',this).call(this,event)||this.isInputElementShowed();}},{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.filterKeyCode(keyCode);}return false;}},{key:'filterKeyCode',value:function filterKeyCode(keyCode){switch(this.mInputType){case InputType.TYPE_NUMBER_SIGNED:if(keyCode===android.view.KeyEvent.KEYCODE_Minus&&this.getText().length>0)return true;return InputType.LimitCode.TYPE_NUMBER_SIGNED.indexOf(keyCode)===-1;case InputType.TYPE_NUMBER_DECIMAL:return InputType.LimitCode.TYPE_NUMBER_DECIMAL.indexOf(keyCode)===-1;case InputType.TYPE_CLASS_NUMBER:return InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode)===-1;case InputType.TYPE_NUMBER_PASSWORD:return InputType.LimitCode.TYPE_NUMBER_PASSWORD.indexOf(keyCode)===-1;case InputType.TYPE_CLASS_PHONE:return InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode)===-1;}return false;}},{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;}}}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){this.checkFilterKeyEventToDom(event);return _get2(Object.getPrototypeOf(EditText.prototype),'onKeyDown',this).call(this,keyCode,event)||true;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){this.checkFilterKeyEventToDom(event);return _get2(Object.getPrototypeOf(EditText.prototype),'onKeyUp',this).call(this,keyCode,event)||true;}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length<=0||arguments[0]===undefined?false:arguments[0];if(this.inputElement.parentNode&&this.inputElement.style.opacity!='0'){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:'setInputType',value:function setInputType(type){this.mInputType=type;this.inputElement.style['webkitTextSecurity']='';this.setTransformationMethod(null);switch(type){case InputType.TYPE_NULL:this.switchToMultilineInputElement();this.setSingleLine(false);break;case InputType.TYPE_CLASS_TEXT:this.switchToMultilineInputElement();this.setSingleLine(false);break;case InputType.TYPE_CLASS_URI:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','url');this.setSingleLine(true);break;case InputType.TYPE_CLASS_EMAIL_ADDRESS:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','email');this.setSingleLine(true);break;case InputType.TYPE_NUMBER_SIGNED:case InputType.TYPE_NUMBER_DECIMAL:case InputType.TYPE_CLASS_NUMBER:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','number');this.setSingleLine(true);break;case InputType.TYPE_NUMBER_PASSWORD:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','number');this.inputElement.style['webkitTextSecurity']='disc';this.setSingleLine(true);this.setTransformationMethod(PasswordTransformationMethod.getInstance());break;case InputType.TYPE_CLASS_PHONE:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','tel');this.setSingleLine(true);break;case InputType.TYPE_TEXT_PASSWORD:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','password');this.setSingleLine(true);this.setTransformationMethod(PasswordTransformationMethod.getInstance());break;case InputType.TYPE_TEXT_VISIBLE_PASSWORD:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','email');this.setSingleLine(true);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:'onAttachedToWindow',value:function onAttachedToWindow(){this.getContext().androidUI.showDebugLayout();return _get2(Object.getPrototypeOf(EditText.prototype),'onAttachedToWindow',this).call(this);}},{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 ImageView=function(_View2){_inherits(ImageView,_View2);function ImageView(context,bindElement,defStyle){_classCallCheck(this,ImageView);var _this121=_possibleConstructorReturn(this,Object.getPrototypeOf(ImageView).call(this,context,bindElement,defStyle));_this121.mHaveFrame=false;_this121.mAdjustViewBounds=false;_this121.mMaxWidth=Integer.MAX_VALUE;_this121.mMaxHeight=Integer.MAX_VALUE;_this121.mAlpha=255;_this121.mViewAlphaScale=256;_this121.mColorMod=false;_this121.mDrawable=null;_this121.mState=null;_this121.mMergeState=false;_this121.mLevel=0;_this121.mDrawableWidth=0;_this121.mDrawableHeight=0;_this121.mDrawMatrix=null;_this121.mTempSrc=new RectF();_this121.mTempDst=new RectF();_this121.mBaseline=-1;_this121.mBaselineAlignBottom=false;_this121.mAdjustViewBoundsCompat=false;_this121.initImageView();var a=_this121._attrBinder;a.addAttr('src',function(value){var d=a.parseDrawable(value);if(d)_this121.setImageDrawable(d);else _this121.setImageURI(value);},function(){return _this121.mDrawable;});a.addAttr('baselineAlignBottom',function(value){_this121.setBaselineAlignBottom(a.parseBoolean(value,_this121.mBaselineAlignBottom));});a.addAttr('baseline',function(value){_this121.setBaseline(a.parseNumber(value,_this121.mBaseline));},function(){return _this121.mBaseline;});a.addAttr('adjustViewBounds',function(value){_this121.setAdjustViewBounds(a.parseBoolean(value,false));});a.addAttr('maxWidth',function(value){var baseValue=_this121.getParent() instanceof View?_this121.getParent().getWidth():0;_this121.setMaxWidth(a.parseNumber(value,_this121.mMaxWidth,baseValue));},function(){return _this121.mMaxWidth;});a.addAttr('maxHeight',function(value){var baseValue=_this121.getParent() instanceof View?_this121.getParent().getHeight():0;_this121.setMaxHeight(a.parseNumber(value,_this121.mMaxHeight,baseValue));},function(){return _this121.mMaxHeight;});a.addAttr('scaleType',function(value){_this121.setScaleType(ImageView.parseScaleType(value,_this121.mScaleType));},function(){return _this121.mScaleType.toString();});a.addAttr('drawableAlpha',function(value){_this121.setAlpha(a.parseNumber(value,_this121.mAlpha));},function(){return _this121.mAlpha;});a.addAttr('cropToPadding',function(value){_this121.setCropToPadding(a.parseBoolean(value,false));});return _this121;}_createClass(ImageView,[{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){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;this.requestLayout();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 scale=undefined;var dx=undefined;var dy=undefined;if(dwidth<=vwidth&&dheight<=vheight){scale=1.0;}else {scale=Math.min(vwidth/dwidth,vheight/dheight);}dx=Math.floor((vwidth-dwidth*scale)*0.5+0.5);dy=Math.floor((vheight-dheight*scale)*0.5+0.5);this.mDrawMatrix.setScale(scale,scale);this.mDrawMatrix.postTranslate(dx,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){this.setAlpha(alpha);}},{key:'setAlpha',value:function setAlpha(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 _this123=_possibleConstructorReturn(this,Object.getPrototypeOf(GridView).call(this,context,bindElement,null));_this123.mNumColumns=GridView.AUTO_FIT;_this123.mHorizontalSpacing=0;_this123.mRequestedHorizontalSpacing=0;_this123.mVerticalSpacing=0;_this123.mStretchMode=GridView.STRETCH_COLUMN_WIDTH;_this123.mColumnWidth=0;_this123.mRequestedColumnWidth=0;_this123.mRequestedNumColumns=0;_this123.mReferenceView=null;_this123.mReferenceViewInSelectedRow=null;_this123.mGravity=Gravity.LEFT;_this123.mTempRect=new Rect();_this123._attrBinder.addAttr('horizontalSpacing',function(value){_this123.setHorizontalSpacing(_this123._attrBinder.parseNumber(value,0));});_this123._attrBinder.addAttr('verticalSpacing',function(value){_this123.setVerticalSpacing(_this123._attrBinder.parseNumber(value,0));});_this123._attrBinder.addAttr('stretchMode',function(value){var strechMode=_this123._attrBinder.parseNumber(value,-1);if(strechMode>=0){_this123.setStretchMode(strechMode);}});_this123._attrBinder.addAttr('columnWidth',function(value){var columnWidth=_this123._attrBinder.parseNumber(value,-1);if(columnWidth>0){_this123.setColumnWidth(columnWidth);}});_this123._attrBinder.addAttr('numColumns',function(value){_this123.setNumColumns(_this123._attrBinder.parseNumber(value,1));});_this123._attrBinder.addAttr('gravity',function(value){_this123.setNumColumns(_this123._attrBinder.parseNumber(value,1));});if(defStyle)_this123.applyDefaultAttributes(defStyle);return _this123;}_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 startOffset=count>0?this.getChildAt(0).getTop()-verticalSpacing:this.getHeight()-paddingBottom;var position=this.mFirstPosition;if(!this.mStackFromBottom){position-=numColumns;}else {position--;}this.fillUp(position,startOffset);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;i-=numColumns){if(y>=this.getChildAt(i).getTop()){return this.mFirstPosition+i;}}}}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 childCount=this.getChildCount();if(childCount>0){this.correctTooLow(numColumns,verticalSpacing,childCount);}}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 _this124=_possibleConstructorReturn(this,Object.getPrototypeOf(NumberPicker).call(this,context,bindElement,defStyle));_this124.SELECTOR_WHEEL_ITEM_COUNT=3;_this124.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this124.SELECTOR_WHEEL_ITEM_COUNT/2);_this124.mSelectionDividersDistance=0;_this124.mMinHeight_=NumberPicker.SIZE_UNSPECIFIED;_this124.mMaxHeight=NumberPicker.SIZE_UNSPECIFIED;_this124.mMinWidth_=NumberPicker.SIZE_UNSPECIFIED;_this124.mMaxWidth=NumberPicker.SIZE_UNSPECIFIED;_this124.mTextSize=0;_this124.mSelectorTextGapHeight=0;_this124.mMinValue=0;_this124.mMaxValue=0;_this124.mValue=0;_this124.mLongPressUpdateInterval=NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL;_this124.mSelectorIndexToStringCache=new SparseArray();_this124.mSelectorElementHeight=0;_this124.mInitialScrollOffset=Integer.MIN_VALUE;_this124.mCurrentScrollOffset=0;_this124.mPreviousScrollerY=0;_this124.mLastDownEventY=0;_this124.mLastDownEventTime=0;_this124.mLastDownOrMoveEventY=0;_this124.mMinimumFlingVelocity=0;_this124.mMaximumFlingVelocity=0;_this124.mSolidColor=0;_this124.mSelectionDividerHeight=0;_this124.mScrollState=NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;_this124.mTopSelectionDividerTop=0;_this124.mBottomSelectionDividerBottom=0;_this124.mLastHoveredChildVirtualViewId=0;_this124.mLastHandledDownDpadKeyCode=-1;_this124.mHasSelectorWheel=true;_this124._attrBinder.addAttr('solidColor',function(value){_this124.mSolidColor=_this124._attrBinder.parseColor(value)||0;});_this124._attrBinder.addAttr('selectionDivider',function(value){_this124.mSelectionDivider=_this124._attrBinder.parseDrawable(value);});_this124._attrBinder.addAttr('selectionDividerHeight',function(value){var defSelectionDividerHeight=NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT*_this124.getResources().getDisplayMetrics().density;_this124.mSelectionDividerHeight=_this124._attrBinder.parseNumber(value,defSelectionDividerHeight);});_this124._attrBinder.addAttr('selectionDividersDistance',function(value){var defSelectionDividerDistance=NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE*_this124.getResources().getDisplayMetrics().density;_this124.mSelectionDividersDistance=_this124._attrBinder.parseNumber(value,defSelectionDividerDistance);});_this124._attrBinder.addAttr('internalMinHeight',function(value){_this124.mMinHeight_=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMaxHeight',function(value){_this124.mMaxHeight=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMinWidth',function(value){_this124.mMinWidth_=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMaxWidth',function(value){_this124.mMaxWidth=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMaxWidth',function(value){_this124.mMaxWidth=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('virtualButtonPressedDrawable',function(value){_this124.mVirtualButtonPressedDrawable=_this124._attrBinder.parseDrawable(value);});_this124._attrBinder.addAttr('textSize',function(value){_this124.mTextSize=_this124._attrBinder.parseNumber(value,_this124.mTextSize);_this124.mSelectorWheelPaint.setTextSize(_this124.mTextSize);});_this124._attrBinder.addAttr('textColor',function(value){_this124.mSelectorWheelPaint.setColor(_this124._attrBinder.parseColor(value,_this124.mSelectorWheelPaint.getColor()));});_this124._attrBinder.addAttr('minValue',function(value){_this124.setMinValue(_this124._attrBinder.parseNumber(value,_this124.mMinValue));});_this124._attrBinder.addAttr('maxValue',function(value){_this124.setMaxValue(_this124._attrBinder.parseNumber(value,_this124.mMaxValue));});_this124._attrBinder.addAttr('itemCount',function(value){_this124.SELECTOR_WHEEL_ITEM_COUNT=_this124._attrBinder.parseNumber(value,_this124.SELECTOR_WHEEL_ITEM_COUNT);_this124.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this124.SELECTOR_WHEEL_ITEM_COUNT/2);_this124.mSelectorIndices=new Array(_this124.SELECTOR_WHEEL_ITEM_COUNT);});_this124.mTextSize=Math.floor(16*_this124.getResources().getDisplayMetrics().density);var paint=new Paint();paint.setAntiAlias(true);paint.setTextAlign(Align.CENTER);paint.setTextSize(_this124.mTextSize);paint.setColor(Color.DKGRAY);_this124.mSelectorWheelPaint=paint;_this124.mSelectorIndices=new Array(_this124.SELECTOR_WHEEL_ITEM_COUNT);_this124.applyDefaultAttributes(R.attr.numberPickerStyle);if(_this124.mMinHeight_!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMaxHeight!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMinHeight_>_this124.mMaxHeight){throw Error('new IllegalArgumentException("minHeight > maxHeight")');}if(_this124.mMinWidth_!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMaxWidth!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMinWidth_>_this124.mMaxWidth){throw Error('new IllegalArgumentException("minWidth > maxWidth")');}_this124.mComputeMaxWidth=_this124.mMaxWidth==NumberPicker.SIZE_UNSPECIFIED;_this124.mPressedStateHelper=new NumberPicker.PressedStateHelper(_this124);_this124.setWillNotDraw(!_this124.mHasSelectorWheel);var configuration=ViewConfiguration.get();_this124.mMinimumFlingVelocity=configuration.getScaledMinimumFlingVelocity();_this124.mMaximumFlingVelocity=configuration.getScaledMaximumFlingVelocity()/NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT;_this124.mFlingScroller=new OverScroller(null,true);_this124.mAdjustScroller=new OverScroller(new DecelerateInterpolator(2.5));_this124.updateInputTextView();return _this124;}_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 i=0;imaxTextWidth){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_6){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 _this125=_possibleConstructorReturn(this,Object.getPrototypeOf(ClipDrawable).call(this));_this125.mTmpRect=new Rect();if(arguments.length<=1){_this125.mClipState=new ClipDrawable.ClipState(arguments.length<=0?undefined:arguments[0],_this125);}else {_this125.mClipState=new ClipDrawable.ClipState(null,_this125);var _drawable=arguments.length<=0?undefined:arguments[0];var gravity=arguments.length<=1?undefined:arguments[1];var orientation=arguments.length<=2?undefined:arguments[2];_this125.mClipState.mDrawable=_drawable;_this125.mClipState.mGravity=gravity;_this125.mClipState.mOrientation=orientation;if(_drawable!=null){_drawable.setCallback(_this125);}}return _this125;}_createClass(ClipDrawable,[{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_6.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_6.ClipDrawable||(drawable_6.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 _this126=_possibleConstructorReturn(this,Object.getPrototypeOf(ProgressBar).call(this,context,bindElement,null));_this126.mMinWidth=0;_this126.mMaxWidth=0;_this126.mMinHeight=0;_this126.mMaxHeight=0;_this126.mProgress=0;_this126.mSecondaryProgress=0;_this126.mMax=0;_this126.mBehavior=0;_this126.mDuration=0;_this126.mMirrorForRtl=false;_this126.mRefreshData=new ArrayList();_this126.initProgressBar();var a=_this126._attrBinder;a.addAttr('progressDrawable',function(value){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=_this126.tileify(drawable,false);_this126.setProgressDrawable(drawable);}},function(){return _this126.mProgressDrawable;});a.addAttr('indeterminateDuration',function(value){_this126.mDuration=Math.floor(a.parseNumber(value,_this126.mDuration));},function(){return _this126.mDuration;});a.addAttr('minWidth',function(value){_this126.mMinWidth=Math.floor(a.parseNumber(value,_this126.mMinWidth));},function(){return _this126.mMinWidth;});a.addAttr('maxWidth',function(value){_this126.mMaxWidth=Math.floor(a.parseNumber(value,_this126.mMaxWidth));},function(){return _this126.mMaxWidth;});a.addAttr('minHeight',function(value){_this126.mMinHeight=Math.floor(a.parseNumber(value,_this126.mMinHeight));},function(){return _this126.mMinHeight;});a.addAttr('maxHeight',function(value){_this126.mMaxHeight=Math.floor(a.parseNumber(value,_this126.mMaxHeight));},function(){return _this126.mMaxHeight;});a.addAttr('indeterminateBehavior',function(value){if(value+''.toLowerCase()=='cycle'){_this126.mBehavior=Animation.REVERSE;}else {_this126.mBehavior=Animation.RESTART;}});a.addAttr('interpolator',function(value){});a.addAttr('max',function(value){_this126.setMax(a.parseNumber(value,_this126.mMax));},function(){return _this126.mMax;});a.addAttr('progress',function(value){_this126.setProgress(a.parseNumber(value,_this126.mProgress));},function(){return _this126.mProgress;});a.addAttr('secondaryProgress',function(value){_this126.setSecondaryProgress(a.parseNumber(value,_this126.mSecondaryProgress));},function(){return _this126.mSecondaryProgress;});a.addAttr('indeterminateDrawable',function(value){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=_this126.tileifyIndeterminate(drawable);_this126.setIndeterminateDrawable(drawable);}},function(){return _this126.mIndeterminateDrawable;});a.addAttr('indeterminateOnly',function(value){_this126.mOnlyIndeterminate=a.parseBoolean(value,_this126.mOnlyIndeterminate);_this126.setIndeterminate(_this126.mOnlyIndeterminate||_this126.mIndeterminate);});a.addAttr('indeterminate',function(value){_this126.setIndeterminate(_this126.mOnlyIndeterminate||a.parseBoolean(value,_this126.mIndeterminate));});_this126.mNoInvalidate=true;if(defStyle)_this126.applyDefaultAttributes(defStyle);_this126.mNoInvalidate=false;_this126.setIndeterminate(_this126.mOnlyIndeterminate||_this126.mIndeterminate);return _this126;}_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 _this135=_possibleConstructorReturn(this,Object.getPrototypeOf(RatingBar).call(this,context,bindElement,null));_this135.mNumStars=5;_this135.mProgressOnStartTracking=0;var a=_this135._attrBinder;a.addAttr('numStars',function(value){_this135.setNumStars(a.parseNumber(value,_this135.mNumStars));},function(){return _this135.mNumStars;});a.addAttr('isIndicator',function(value){_this135.setIsIndicator(a.parseBoolean(value,!_this135.mIsUserSeekable));},function(){return !_this135.mIsUserSeekable;});a.addAttr('stepSize',function(value){_this135.setStepSize(a.parseNumber(value,0.5));},function(){return _this135.getStepSize();});a.addAttr('rating',function(value){_this135.setRating(a.parseNumber(value,_this135.getRating()));},function(){return _this135.getRating();});if(defStyle)_this135.applyDefaultAttributes(defStyle);_this135.mTouchProgressOffset=1.1;return _this135;}_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 _this136=_possibleConstructorReturn(this,Object.getPrototypeOf(ExpandableListConnector).call(this));_this136.mTotalExpChildrenCount=0;_this136.mMaxExpGroupCount=Integer.MAX_VALUE;_this136.mDataSetObserver=new ExpandableListConnector.MyDataSetObserver(_this136);_this136.mExpGroupMetadataList=new ArrayList();_this136.setExpandableListAdapter(expandableListAdapter);return _this136;}_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 i=0;i=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 _this137=_possibleConstructorReturn(this,Object.getPrototypeOf(MyDataSetObserver).call(this));_this137._ExpandableListConnector_this=arg;return _this137;}_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 _this138=_possibleConstructorReturn(this,Object.getPrototypeOf(ExpandableListView).call(this,context,bindElement,null));_this138.mIndicatorLeft=0;_this138.mIndicatorRight=0;_this138.mIndicatorStart=0;_this138.mIndicatorEnd=0;_this138.mChildIndicatorLeft=0;_this138.mChildIndicatorRight=0;_this138.mChildIndicatorStart=0;_this138.mChildIndicatorEnd=0;_this138.mIndicatorRect=new Rect();_this138._attrBinder.addAttr('groupIndicator',function(value){_this138.setGroupIndicator(_this138._attrBinder.parseDrawable(value));},function(){return _this138.mGroupIndicator;});_this138._attrBinder.addAttr('childIndicator',function(value){_this138.setChildIndicator(_this138._attrBinder.parseDrawable(value));},function(){return _this138.mChildIndicator;});_this138._attrBinder.addAttr('indicatorLeft',function(value){_this138.setIndicatorBounds(_this138._attrBinder.parseNumber(value,0),_this138.mIndicatorRight);},function(){return _this138.mIndicatorLeft;});_this138._attrBinder.addAttr('indicatorRight',function(value){var num=_this138._attrBinder.parseNumber(value,0);if(num==0&&_this138.mGroupIndicator!=null){num=_this138.mIndicatorLeft+_this138.mGroupIndicator.getIntrinsicWidth();}_this138.setIndicatorBounds(_this138.mIndicatorLeft,num);},function(){return _this138.mIndicatorRight;});_this138._attrBinder.addAttr('childIndicatorLeft',function(value){_this138.setChildIndicatorBounds(_this138._attrBinder.parseNumber(value,ExpandableListView.CHILD_INDICATOR_INHERIT),_this138.mChildIndicatorRight);},function(){return _this138.mChildIndicatorLeft;});_this138._attrBinder.addAttr('childIndicatorRight',function(value){var num=_this138._attrBinder.parseNumber(value,ExpandableListView.CHILD_INDICATOR_INHERIT);if(num==0&&_this138.mChildIndicator!=null){num=_this138.mChildIndicatorLeft+_this138.mChildIndicator.getIntrinsicWidth();}_this138.setIndicatorBounds(_this138.mChildIndicatorLeft,num);},function(){return _this138.mChildIndicatorRight;});_this138._attrBinder.addAttr('childDivider',function(value){_this138.setChildDivider(_this138._attrBinder.parseDrawable(value));});if(defStyle)_this138.applyDefaultAttributes(defStyle);return _this138;}_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 _this139=this;_classCallCheck(this,Toast);this.mDuration=0;this.mHandler=new Handler();this.mDelayHide=function(){var _this=_this139;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 _this140=this;_classCallCheck(this,TN);this.mShow=function(){var _this=_this140;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=_this140;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 _params=this.mWindow.getAttributes();_params.height=WindowManager.LayoutParams.WRAP_CONTENT;_params.width=WindowManager.LayoutParams.WRAP_CONTENT;_params.dimAmount=0;_params.type=WindowManager.LayoutParams.TYPE_TOAST;_params.setTitle("Toast");_params.leftMargin=_params.rightMargin=36*this.mView.getContext().getResources().getDisplayMetrics().density;_params.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 _this141=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=_this141;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 _this142=_possibleConstructorReturn(this,Object.getPrototypeOf(ListenersHandler).call(this));_this142.mDialog=new WeakReference(dialog);return _this142;}_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 _this143=_possibleConstructorReturn(this,Object.getPrototypeOf(ArrayAdapter).call(this));_this143.mNotifyOnChange=true;_this143.init(context,resource,textViewResourceId,objects);return _this143;}_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 ColorDrawable=android.graphics.drawable.ColorDrawable;var Color=android.graphics.Color;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 _this144=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=_this144;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=new ColorDrawable(Color.WHITE);var topDark=new ColorDrawable(Color.WHITE);var centerDark=new ColorDrawable(Color.WHITE);var bottomDark=new ColorDrawable(Color.WHITE);var fullBright=new ColorDrawable(Color.WHITE);var topBright=new ColorDrawable(Color.WHITE);var centerBright=new ColorDrawable(Color.WHITE);var bottomBright=new ColorDrawable(Color.WHITE);var bottomMedium=new ColorDrawable(Color.WHITE);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 _this145=_possibleConstructorReturn(this,Object.getPrototypeOf(ButtonHandler).call(this));_this145.mDialog=new WeakReference(dialog);return _this145;}_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 _this146=_possibleConstructorReturn(this,Object.getPrototypeOf(RecycleListView).call(this,context,bindElement,defStyle));_this146.mRecycleOnMeasure=true;return _this146;}_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 _this147=this;var listView=this.mInflater.inflate(dialog.mListLayout,null);var adapter=undefined;if(this.mIsMultiChoice){adapter=function(){var _this=_this147;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(_this147.mContext,dialog.mMultiChoiceItemLayout,R.id.text1,_this147.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 _this149=_possibleConstructorReturn(this,Object.getPrototypeOf(AlertDialog).call(this,context));_this149.setCancelable(cancelable);_this149.setOnCancelListener(cancelListener);_this149.mAlert=new app.AlertController(context,_this149,_this149.getWindow());return _this149;}_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 _this150=_possibleConstructorReturn(this,Object.getPrototypeOf(AbsSpinner).call(this,context,bindElement,null));_this150.mHeightMeasureSpec=0;_this150.mWidthMeasureSpec=0;_this150.mSelectionLeftPadding=0;_this150.mSelectionTopPadding=0;_this150.mSelectionRightPadding=0;_this150.mSelectionBottomPadding=0;_this150.mSpinnerPadding=new Rect();_this150.mRecycler=new AbsSpinner.RecycleBin(_this150);_this150.initAbsSpinner();var a=_this150._attrBinder;a.addAttr('entries',function(value){var entries=a.parseTextArray(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);_this150.setAdapter(adapter);}});if(defStyle)_this150.applyDefaultAttributes(defStyle);return _this150;}_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 state=this.mPopupView.getKeyDispatcherState();if(state!=null&&state.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 state=anchorView.getKeyDispatcherState();if(state!=null){state.handleUpEvent(event);}if(event.isTracking()&&!event.isCanceled()){this.dismiss();return true;}}}return false;}},{key:'createDragToOpenListener',value:function createDragToOpenListener(src){var _this153=this;return function(){var _this=_this153;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 _this155=this;var dropDownView=undefined;var otherHeights=0;if(this.mDropDownList==null){var context=this.mContext;this.mShowDropDownRunnable=function(){var _this=_this155;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=_this155;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 _this156=_possibleConstructorReturn(this,Object.getPrototypeOf(DropDownListView).call(this,context,null,android.R.attr.dropDownListViewStyle));_this156.mHijackFocus=hijackFocus;_this156.setCacheColorHint(0);return _this156;}_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 _this157=_possibleConstructorReturn(this,Object.getPrototypeOf(PopupDataSetObserver).call(this));_this157._ListPopupWindow_this=arg;return _this157;}_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 _this160=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=_this160;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);_this160.setOnDismissListener(function(){var _this=_this160;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 android;(function(android){var webkit;(function(webkit){var WebViewClient=function(){function WebViewClient(){_classCallCheck(this,WebViewClient);}_createClass(WebViewClient,[{key:'onPageStarted',value:function onPageStarted(view,url){}},{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 FrameLayout=android.widget.FrameLayout;var WebView=function(_FrameLayout3){_inherits(WebView,_FrameLayout3);function WebView(context,bindElement,defStyle){_classCallCheck(this,WebView);var _this161=_possibleConstructorReturn(this,Object.getPrototypeOf(WebView).call(this,context,bindElement,defStyle));var density=_this161.getResources().getDisplayMetrics().density;_this161.setMinimumWidth(300*density);_this161.setMinimumHeight(150*density);_this161.initIFrameElement();return _this161;}_createClass(WebView,[{key:'initIFrameElement',value:function initIFrameElement(){var _this162=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(){if(_this162.mClient){_this162.mClient.onReceivedTitle(_this162,_this162.getTitle());_this162.mClient.onPageFinished(_this162,_this162.iFrameElement.src);}};this.bindElement.appendChild(this.iFrameElement);}},{key:'loadUrl',value:function loadUrl(url){if(this.mClient)this.mClient.onPageStarted(this,url);this.iFrameElement.src=url;}},{key:'loadData',value:function loadData(data){this.iFrameElement['srcdoc']=data;}},{key:'evaluateJavascript',value:function evaluateJavascript(script){try{eval.call(this.iFrameElement.contentWindow,script);}catch(e){console.warn(e);eval(script);}}},{key:'stopLoading',value:function stopLoading(){try{this.iFrameElement.contentWindow['stop']();}catch(e){console.error(e);}}},{key:'reload',value:function reload(){this.iFrameElement.src=this.iFrameElement.src;}},{key:'getUrl',value:function getUrl(){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:'getContentHeight',value:function getContentHeight(){try{return this.iFrameElement.contentWindow.document.documentElement.offsetHeight;}catch(e){console.warn(e);return 0;}}},{key:'getContentWidth',value:function getContentWidth(){try{return this.iFrameElement.contentWindow.document.documentElement.offsetWidth;}catch(e){console.warn(e);return 0;}}},{key:'setWebViewClient',value:function setWebViewClient(client){this.mClient=client;}}]);return WebView;}(FrameLayout);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 _this163=_possibleConstructorReturn(this,Object.getPrototypeOf(RotateAnimation).call(this));_this163.mFromDegrees=0;_this163.mToDegrees=0;_this163.mPivotXType=RotateAnimation.ABSOLUTE;_this163.mPivotYType=RotateAnimation.ABSOLUTE;_this163.mPivotXValue=0.0;_this163.mPivotYValue=0.0;_this163.mPivotX=0;_this163.mPivotY=0;_this163.mFromDegrees=fromDegrees;_this163.mToDegrees=toDegrees;_this163.mPivotXValue=pivotXValue;_this163.mPivotXType=pivotXType;_this163.mPivotYValue=pivotYValue;_this163.mPivotYType=pivotYType;_this163.initializePivotPoint();return _this163;}_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);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&&pos>endPos){if(ii==null){break;}if(pos==ii.position&&!ii.scrolling){this.mItems.remove(itemIndex);this.mAdapter.destroyItem(this,pos,ii.object);if(DEBUG){Log.i(TAG,"populate() - destroyItem() with pos: "+pos+" view: "+ii.object);}ii=itemIndex0?this.mPageMargin/width:0;if(oldCurInfo!=null){var oldCurPosition=oldCurInfo.position;if(oldCurPositionii.position&&itemIndexcurItem.position){var itemIndex=this.mItems.size()-1;var ii=null;var _offset2=oldCurInfo.offset;for(var _pos2=oldCurPosition-1;_pos2>=curItem.position&&itemIndex>=0;_pos2--){ii=this.mItems.get(itemIndex);while(_pos20){itemIndex--;ii=this.mItems.get(itemIndex);}while(_pos2>ii.position){_offset2-=this.mAdapter.getPageWidth(_pos2)+marginOffset;_pos2--;}_offset2-=ii.widthFactor+marginOffset;ii.offset=_offset2;}}}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 ii=this.mItems.get(i);while(pos>ii.position){offset-=this.mAdapter.getPageWidth(pos--)+marginOffset;}offset-=ii.widthFactor+marginOffset;ii.offset=offset;if(ii.position==0)this.mFirstOffset=offset;}offset=curItem.offset+curItem.widthFactor+marginOffset;pos=curItem.position+1;for(var i=curIndex+1;i0&&!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 x=ev.getX(activePointerIndex);needsInvalidate=needsInvalidate||this.performDrag(x);}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 x=ev.getX(activePointerIndex);var totalDelta=x-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 x=ev.getX(index);this.mLastMotionX=x;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(parent.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 _len40=arguments.length,args=Array(_len40),_key40=0;_key40<_len40;_key40++){args[_key40]=arguments[_key40];}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 _this169=_possibleConstructorReturn(this,Object.getPrototypeOf(DrawerLayout).call(this,context,bindElement,defStyle));_this169.mMinDrawerMargin=0;_this169.mScrimColor=DrawerLayout.DEFAULT_SCRIM_COLOR;_this169.mScrimOpacity=0;_this169.mScrimPaint=new Paint();_this169.mDrawerState=0;_this169.mFirstLayout=true;_this169.mLockModeLeft=0;_this169.mLockModeRight=0;_this169.mInitialMotionX=0;_this169.mInitialMotionY=0;var density=_this169.getResources().getDisplayMetrics().density;_this169.mMinDrawerMargin=Math.floor(DrawerLayout.MIN_DRAWER_MARGIN*density+0.5);var minVel=DrawerLayout.MIN_FLING_VELOCITY*density;_this169.mLeftCallback=new DrawerLayout.ViewDragCallback(_this169,Gravity.LEFT);_this169.mRightCallback=new DrawerLayout.ViewDragCallback(_this169,Gravity.RIGHT);_this169.mLeftDragger=ViewDragHelper.create(_this169,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this169.mLeftCallback);_this169.mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);_this169.mLeftDragger.setMinVelocity(minVel);_this169.mLeftCallback.setDragger(_this169.mLeftDragger);_this169.mRightDragger=ViewDragHelper.create(_this169,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this169.mRightCallback);_this169.mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);_this169.mRightDragger.setMinVelocity(minVel);_this169.mRightCallback.setDragger(_this169.mRightDragger);_this169.setFocusableInTouchMode(true);_this169.setMotionEventSplittingEnabled(false);return _this169;}_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;iheight-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 x=ev.getX();var y=ev.getY();var peekingOnly=true;var touchedView=this.mLeftDragger.findTopChildUnder(Math.floor(x),Math.floor(y));if(touchedView!=null&&this.isContentView(touchedView)){var dx=x-this.mInitialMotionX;var dy=y-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$getPrototypeO11;_classCallCheck(this,LayoutParams);for(var _len41=arguments.length,args=Array(_len41),_key41=0;_key41<_len41;_key41++){args[_key41]=arguments[_key41];}var _this171=_possibleConstructorReturn(this,(_Object$getPrototypeO11=Object.getPrototypeOf(LayoutParams)).call.apply(_Object$getPrototypeO11,[this].concat(_toConsumableArray(args.length==3?[args[0],args[1]]:args))));_this171.gravity=Gravity.NO_GRAVITY;_this171.onScreen=0;_this171._attrBinder.addAttr('gravity',function(value){_this171.gravity=_this171._attrBinder.parseGravity(value,_this171.gravity);});return _this171;}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 _this172=_possibleConstructorReturn(this,Object.getPrototypeOf(RecyclingPagerAdapter).call(this));_this172.recycleBin=new RecycleBin();_this172.recycleBin.setViewTypeCount(_this172.getViewTypeCount());return _this172;}_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 _this173=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=new Array(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=_this173;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 scale=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 _this186=_possibleConstructorReturn(this,Object.getPrototypeOf(ListViewOverScrollLocker).call(this,listView));_this186.listView=listView;_this186.configListView();return _this186;}_createClass(ListViewOverScrollLocker,[{key:'configListView',value:function configListView(){var _this187=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=-_this187.lockTop;else if(listView.mScrollY>0)maxY=_this187.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=_this187.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>_this187.lockBottom||listView.mScrollY<_this187.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=-_this187.lockTop;maxY=_this187.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+=_this187.lockBottom;else overY+=_this187.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 _this188=_possibleConstructorReturn(this,Object.getPrototypeOf(ScrollViewScrollLocker).call(this,scrollView));_this188.scrollView=scrollView;var scroller=scrollView.mScroller;var oldSpringBack=scroller.springBack;scroller.springBack=function(startX,startY,minX,maxX,minY,maxY){minY=-_this188.lockTop;maxY=_this188.scrollView.getScrollRange()+_this188.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+=_this188.lockBottom;else overY+=_this188.lockTop;minY-=_this188.lockTop;maxY+=_this188.lockBottom;oldFling.call(scroller,startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);};_this188.listenScrollContentHeightChange();return _this188;}_createClass(ScrollViewScrollLocker,[{key:'listenScrollContentHeightChange',value:function listenScrollContentHeightChange(){var _this189=this;var listenHeightChange=function listenHeightChange(v){var onSizeChangedFunc=v.onSizeChanged;v.onSizeChanged=function(w,h,oldw,oldh){onSizeChangedFunc.call(v,w,h,oldw,oldh);_this189.scrollView.overScrollBy(0,0,0,_this189.scrollView.mScrollY,0,_this189.scrollView.getScrollRange(),0,_this189.scrollView.mOverscrollDistance,false);};};if(this.scrollView.getChildCount()>0){listenHeightChange(this.scrollView.getChildAt(0));}else {(function(){var onViewAddedFunc=_this189.scrollView.onViewAdded;_this189.scrollView.onViewAdded=function(v){onViewAddedFunc.call(_this189.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 _this190=_possibleConstructorReturn(this,Object.getPrototypeOf(PullRefreshLoadLayout).call(this,context,bindElement,defStyle));_this190.autoLoadScrollAtBottom=true;_this190.footerViewReadyDistance=36*android.content.res.Resources.getDisplayMetrics().density;_this190.contentOverY=0;_this190.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(context));_this190.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(context));_this190._attrBinder.addAttr('refreshEnable',function(value){_this190.setRefreshEnable(_this190._attrBinder.parseBoolean(value,true));});_this190._attrBinder.addAttr('loadEnable',function(value){_this190.setLoadEnable(_this190._attrBinder.parseBoolean(value,true));});return _this190;}_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 _this191=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===_this191.contentView){_this191.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(_FrameLayout6){_inherits(HeaderView,_FrameLayout6);function HeaderView(){var _Object$getPrototypeO12;_classCallCheck(this,HeaderView);for(var _len42=arguments.length,args=Array(_len42),_key42=0;_key42<_len42;_key42++){args[_key42]=arguments[_key42];}var _this192=_possibleConstructorReturn(this,(_Object$getPrototypeO12=Object.getPrototypeOf(HeaderView)).call.apply(_Object$getPrototypeO12,[this].concat(args)));_this192.state=PullRefreshLoadLayout.State_Header_Normal;_this192.stateBeforeReady=PullRefreshLoadLayout.State_Header_Normal;return _this192;}_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(_FrameLayout7){_inherits(FooterView,_FrameLayout7);function FooterView(){var _Object$getPrototypeO13;_classCallCheck(this,FooterView);for(var _len43=arguments.length,args=Array(_len43),_key43=0;_key43<_len43;_key43++){args[_key43]=arguments[_key43];}var _this193=_possibleConstructorReturn(this,(_Object$getPrototypeO13=Object.getPrototypeOf(FooterView)).call.apply(_Object$getPrototypeO13,[this].concat(args)));_this193.state=PullRefreshLoadLayout.State_Footer_Normal;_this193.stateBeforeReady=PullRefreshLoadLayout.State_Footer_Normal;return _this193;}_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 _this194=_possibleConstructorReturn(this,Object.getPrototypeOf(DefaultHeaderView).call(this,context,bindElement,defStyle));_this194.progressBar=new ProgressBar();_this194.progressBar.setVisibility(View.GONE);_this194.textView=new TextView();var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this194.textView.setPadding(pad/2,pad,pad/2,pad);_this194.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout();linear.addView(_this194.progressBar,32*density,32*density);linear.addView(_this194.textView);linear.setGravity(Gravity.CENTER);_this194.addView(linear,-1,-2);_this194.onStateChange(PullRefreshLoadLayout.State_Header_Normal,PullRefreshLoadLayout.State_Disable);return _this194;}_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 _this195=_possibleConstructorReturn(this,Object.getPrototypeOf(DefaultFooterView).call(this,context,bindElement,defStyle));_this195.progressBar=new ProgressBar();_this195.progressBar.setVisibility(View.GONE);_this195.textView=new TextView();var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this195.textView.setPadding(pad/2,pad,pad/2,pad);_this195.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout();linear.addView(_this195.progressBar);linear.addView(_this195.textView);linear.setGravity(Gravity.CENTER);_this195.addView(linear,-1,-2);_this195.onStateChange(PullRefreshLoadLayout.State_Footer_Normal,PullRefreshLoadLayout.State_Disable);_this195.setOnClickListener({onClick:function onClick(v){var parent=v.getParent();if(parent instanceof PullRefreshLoadLayout){parent.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}});return _this195;}_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:'initImpl',value:function initImpl(){this.canvasId=++sNextID;this.createCanvasImpl();}},{key:'createCanvasImpl',value:function createCanvasImpl(){native.NativeApi.canvas.createCanvas(this.canvasId,this.mWidth,this.mHeight);}},{key:'recycleImpl',value:function recycleImpl(){native.NativeApi.canvas.recycleCanvas(this.canvasId);}},{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:'clearRectImpl',value:function clearRectImpl(left,top,width,height){native.NativeApi.canvas.clearRect(this.canvasId,left,top,width,height);}},{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:'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,dstRect){if(image instanceof native.NativeImage){native.NativeApi.canvas.drawImage(this.canvasId,image.imageId,dstRect.left,dstRect.top,dstRect.width(),dstRect.height());}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);}},{key:'drawOvalImpl',value:function drawOvalImpl(oval,style){}},{key:'drawCircleImpl',value:function drawCircleImpl(cx,cy,radius,style){}},{key:'drawArcImpl',value:function drawArcImpl(oval,startAngle,sweepAngle,useCenter,style){}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(rect,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);}},{key:'multiplyAlphaImpl',value:function multiplyAlphaImpl(alpha){native.NativeApi.canvas.multiplyAlpha(this.canvasId,alpha);}},{key:'setAlphaImpl',value:function setAlphaImpl(alpha){native.NativeApi.canvas.setAlpha(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:'applyTextMeasure',value:function applyTextMeasure(cacheMeasureTextSize,defaultWidth,widths){android.graphics.Canvas.measureTextImpl=function(text,textSize){var width=0;for(var i=0,length=text.length;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;this.top=t;this.right=right;this.bottom=bottom;}}},{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:'intersects',value:function intersects(){for(var _len5=arguments.length,args=Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}if(args.length===1){var rect=args[0];return this.intersects(rect.left,rect.top,rect.right,rect.bottom);}else {var _args$17=args[0];var left=_args$17===undefined?0:_args$17;var _args$18=args[1];var t=_args$18===undefined?0:_args$18;var _args$19=args[2];var right=_args$19===undefined?0:_args$19;var _args$20=args[3];var bottom=_args$20===undefined?0:_args$20;return this.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]));}}]);return Rect;}();graphics.Rect=Rect;})(graphics=android.graphics||(android.graphics={}));})(android||(android={}));var android;(function(android){var view;(function(view){var Gravity=function(){function Gravity(){_classCallCheck(this,Gravity);}_createClass(Gravity,null,[{key:'apply',value:function apply(gravity,w,h,container,outRect,layoutDirection){var xAdj=0,yAdj=0;if(layoutDirection!=null)gravity=Gravity.getAbsoluteGravity(gravity,layoutDirection);switch(gravity&(Gravity.AXIS_PULL_BEFORE|Gravity.AXIS_PULL_AFTER)<container.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 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 android;(function(android){var util;(function(util){var System=java.lang.System;var StateSet=function(){function StateSet(){_classCallCheck(this,StateSet);}_createClass(StateSet,null,[{key:'isWildCard',value:function isWildCard(stateSetOrSpec){return stateSetOrSpec.length==0||stateSetOrSpec[0]==0;}},{key:'stateSetMatches',value:function stateSetMatches(stateSpec,stateSetOrState){if(Number.isInteger(stateSetOrState)){return StateSet._stateSetMatches_single(stateSpec,stateSetOrState);}var stateSet=stateSetOrState;if(stateSet==null){return stateSpec==null||this.isWildCard(stateSpec);}var stateSpecSize=stateSpec.length;var stateSetSize=stateSet.length;for(var i=0;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=new Array(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)=='#'){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");}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");}},{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.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.mAlpha=paint.mAlpha;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(){if(this.mAlpha==null)return 255;return this.mAlpha;}},{key:'setAlpha',value:function setAlpha(alpha){this.mAlpha=alpha;}},{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=new Array(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.mAlpha==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.mAlpha!=null){canvas.multiplyAlpha(this.mAlpha/255);}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=new Array(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=new Array(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(new Array(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=new Array(9);var tmp2=new Array(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(new Array(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=new Array(9);var tmp2=new Array(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=new Array(9);var tmp2=new Array(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 _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=this.mOnLoads[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var load=_step.value;load();}}catch(err){_didIteratorError=true;_iteratorError=err;}finally {try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally {if(_didIteratorError){throw _iteratorError;}}}}},{key:'fireOnError',value:function fireOnError(){this.mImageLoaded=false;var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=this.mOnErrors[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var error=_step2.value;error();}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally {try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally {if(_didIteratorError2){throw _iteratorError2;}}}}},{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:'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:'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:'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;}}]);return Drawable;}();Drawable.ZERO_BOUNDS_RECT=new Rect();drawable.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,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(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:'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 _this9=_possibleConstructorReturn(this,(_Object$getPrototypeO=Object.getPrototypeOf(ScrollBarDrawable)).call.apply(_Object$getPrototypeO,[this].concat(args)));_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(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_1){var InsetDrawable=function(_drawable_1$Drawable){_inherits(InsetDrawable,_drawable_1$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 _this10=_possibleConstructorReturn(this,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:'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_1.Drawable);drawable_1.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_2){var ShadowDrawable=function(_drawable_2$Drawable){_inherits(ShadowDrawable,_drawable_2$Drawable);function ShadowDrawable(drawable,radius,dx,dy,color){_classCallCheck(this,ShadowDrawable);var _this11=_possibleConstructorReturn(this,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(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_2.Drawable);drawable_2.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 _this12=_possibleConstructorReturn(this,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(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++;this._class=new Class(this.constructor.name);}_createClass(JavaObject,[{key:'hashCode',value:function hashCode(){return this.hash;}},{key:'getClass',value:function getClass(){return this._class;}},{key:'equals',value:function equals(o){return this===o;}}],[{key:'class',get:function get(){return new Class(this.name);}}]);return JavaObject;}();lang.JavaObject=JavaObject;var Class=function(){function Class(name){_classCallCheck(this,Class);this.name=name;}_createClass(Class,[{key:'getName',value:function getName(){return this.name;}},{key:'getSimpleName',value:function getSimpleName(){return this.name;}}]);return Class;}();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 _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=listeners[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var listener=_step4.value;listener.onTouchModeChanged(inTouchMode);}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally {try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally {if(_didIteratorError4){throw _iteratorError4;}}}}}},{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","id":"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \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(layoutRef){if(!layoutRef)return null;layoutRef=layoutRef.replace('/','.').split('.').pop();if(!_layout_data[layoutRef])return null;_tempDiv.innerHTML=_layout_data[layoutRef];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.id='@android:layout/id';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 android;(function(android){var content;(function(content){var res;(function(res){var DisplayMetrics=android.util.DisplayMetrics;var Resources=function(){function Resources(context){_classCallCheck(this,Resources);this.context=context;}_createClass(Resources,[{key:'getDisplayMetrics',value:function getDisplayMetrics(){if(this.displayMetrics)return this.displayMetrics;this.displayMetrics=new DisplayMetrics();var displayMetrics=this.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;displayMetrics.widthPixels=window.innerWidth*density;displayMetrics.heightPixels=window.innerHeight*density;return displayMetrics;}},{key:'getObjectRef',value:function getObjectRef(refString){if(refString.startsWith('@'))refString=refString.substring(1);if(refString=='null')return null;try{return window.eval(refString);}catch(e){console.log(e);}}},{key:'getAttr',value:function getAttr(refString){if(refString.startsWith('@android:attr/')){refString=refString.substring('@android:attr/'.length);return android.R.attr[refString];}else if(Resources.buildAttrFinder&&refString.startsWith('@attr/')){return Resources.buildAttrFinder(refString);}else if(refString.startsWith('@')){return this.getObjectRef(refString);}return null;}},{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];}else if(Resources.buildDrawableFinder&&refString.startsWith('@drawable/')){return Resources.buildDrawableFinder(refString);}else if(refString.startsWith('@')){return this.getObjectRef(refString);}}},{key:'getColor',value:function getColor(refString){var s=this.getString(refString);return android.graphics.Color.parseColor(s);}},{key:'getColorStateList',value:function getColorStateList(refString){if(refString.startsWith('@android:color/')){refString=refString.substring('@android:color/'.length);return android.R.color[refString];}else if(refString.startsWith('@')){return this.getObjectRef(refString);}}},{key:'getString',value:function getString(refString){var notFindValue=arguments.length<=1||arguments[1]===undefined?refString:arguments[1];if(!refString||!refString.startsWith('@'))return notFindValue;if(refString.startsWith('@android:string/')){refString=refString.substring('@android:string/'.length);return android.R.string_[refString];}var referenceArray=[];var attrValue=refString;while(attrValue&&attrValue.startsWith('@')){var reference=this.getReference(attrValue,false);if(!reference)return notFindValue;if(referenceArray.indexOf(reference)>=0)throw Error('findReference Error: circle reference');referenceArray.push(reference);attrValue=reference.innerText;}return attrValue;}},{key:'getTextArray',value:function getTextArray(refString){if(!refString||!refString.startsWith('@'))return null;var reference=this.getReference(refString,false);if(reference instanceof HTMLElement){var array=[];var _iteratorNormalCompletion8=true;var _didIteratorError8=false;var _iteratorError8=undefined;try{for(var _iterator8=Array.from(reference.children)[Symbol.iterator](),_step8;!(_iteratorNormalCompletion8=(_step8=_iterator8.next()).done);_iteratorNormalCompletion8=true){var ele=_step8.value;if(ele instanceof HTMLElement)array.push(ele.innerText);}}catch(err){_didIteratorError8=true;_iteratorError8=err;}finally {try{if(!_iteratorNormalCompletion8&&_iterator8.return){_iterator8.return();}}finally {if(_didIteratorError8){throw _iteratorError8;}}}return array;}return null;}},{key:'getLayout',value:function getLayout(refString){if(!refString||!refString.trim().startsWith('@'))return null;var reference=this.getReference(refString,true);if(reference)return reference.firstElementChild;if(refString.startsWith('@android:layout/')){return android.R.layout.getLayoutData(refString);}else if(Resources.buildLayoutFinder&&refString.startsWith('@layout/')){return Resources.buildLayoutFinder(refString);}else if(refString.startsWith('@')){return this.getObjectRef(refString);}}},{key:'getReference',value:function getReference(refString){var cloneNode=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(refString)refString=refString.trim();if(refString&&refString.startsWith('@')){refString=refString.substring(1);var _refString$split=refString.split('/');var _refString$split2=_toArray(_refString$split);var tagName=_refString$split2[0];var refIds=_refString$split2.slice(1);if(!refIds||refIds.length===0)return null;var resourcesElement=Resources.buildResourcesElement;if(tagName.startsWith('android:')){tagName=tagName.substring('android:'.length);resourcesElement=Resources.SDKResourcesElement;}if(!tagName.startsWith('android-'))tagName='android-'+tagName;var q='resources '+tagName+'#'+refIds.join(' #');var rootElement=this.context?this.context.androidUI.rootResourceElement:Resources.emptySelectorNode;var el=rootElement.querySelector(q)||resourcesElement.querySelector(q);if(!el)return null;return cloneNode?el.cloneNode(true):el;}return null;}}],[{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.emptySelectorNode=document.createElement('resources');Resources.buildResourcesElement=document.createElement('resources');Resources.SDKResourcesElement=document.createElement('resources');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 MotionEvent=function(){function MotionEvent(){_classCallCheck(this,MotionEvent);this.mAction=0;this.mEdgeFlags=0;this.mDownTime=0;this.mEventTime=0;this.mActivePointerId=0;this.mXOffset=0;this.mYOffset=0;this._axisValues=new Map();}_createClass(MotionEvent,[{key:'initWithTouch',value:function initWithTouch(event,baseAction){var windowBound=arguments.length<=2||arguments[2]===undefined?new Rect():arguments[2];var e=event;var now=android.os.SystemClock.uptimeMillis();var action=baseAction;var actionIndex=-1;var activeTouch=e.changedTouches[0];this._activeTouch=activeTouch;var activePointerId=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?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].identifier;}},{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={identifier: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:'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 {m.target=args[0];}}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);};}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 _iteratorNormalCompletion9=true;var _didIteratorError9=false;var _iteratorError9=undefined;try{for(var _iterator9=MessageQueue.messages[Symbol.iterator](),_step9;!(_iteratorNormalCompletion9=(_step9=_iterator9.next()).done);_iteratorNormalCompletion9=true){var p=_step9.value;if(p.target==h&&p.what==what&&(object==null||p.obj==object)){msgs.push(p);}}}catch(err){_didIteratorError9=true;_iteratorError9=err;}finally {try{if(!_iteratorNormalCompletion9&&_iterator9.return){_iterator9.return();}}finally {if(_didIteratorError9){throw _iteratorError9;}}}}else {var r=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.callback==r&&(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;}}}}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 _iteratorNormalCompletion11=true;var _didIteratorError11=false;var _iteratorError11=undefined;try{for(var _iterator11=p[Symbol.iterator](),_step11;!(_iteratorNormalCompletion11=(_step11=_iterator11.next()).done);_iteratorNormalCompletion11=true){var item=_step11.value;MessageQueue.recycleMessage(h,item);}}catch(err){_didIteratorError11=true;_iteratorError11=err;}finally {try{if(!_iteratorNormalCompletion11&&_iterator11.return){_iterator11.return();}}finally {if(_didIteratorError11){throw _iteratorError11;}}}}}},{key:'removeCallbacksAndMessages',value:function removeCallbacksAndMessages(h,object){if(h==null){return;}var _iteratorNormalCompletion12=true;var _didIteratorError12=false;var _iteratorError12=undefined;try{for(var _iterator12=MessageQueue.messages[Symbol.iterator](),_step12;!(_iteratorNormalCompletion12=(_step12=_iterator12.next()).done);_iteratorNormalCompletion12=true){var p=_step12.value;if(p!=null&&p.target==h&&(object==null||p.obj==object)){MessageQueue.recycleMessage(h,p);}}}catch(err){_didIteratorError12=true;_iteratorError12=err;}finally {try{if(!_iteratorNormalCompletion12&&_iterator12.return){_iterator12.return();}}finally {if(_didIteratorError12){throw _iteratorError12;}}}}},{key:'checkLoop',value:function checkLoop(){if(!MessageQueue._loopActive){MessageQueue._loopActive=true;requestAnimationFrame(MessageQueue.loop);}}},{key:'loop',value:function loop(){var normalMessages=[];var traversalMessages=[];var now=os.SystemClock.uptimeMillis();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 msg=_step13.value;if(msg.when<=now){if(msg.mType===os.Message.Type_Traversal)traversalMessages.push(msg);else normalMessages.push(msg);}}}catch(err){_didIteratorError13=true;_iteratorError13=err;}finally {try{if(!_iteratorNormalCompletion13&&_iterator13.return){_iterator13.return();}}finally {if(_didIteratorError13){throw _iteratorError13;}}}for(var i=0,length=normalMessages.length;i0)requestAnimationFrame(MessageQueue.loop);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(mCallback){_classCallCheck(this,Handler);this.mCallback=mCallback;}_createClass(Handler,[{key:'handleMessage',value:function handleMessage(msg){}},{key:'dispatchMessage',value:function dispatchMessage(msg){if(msg.callback!=null){msg.callback.run.call(msg.callback);}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 ColorStateList=function(){function ColorStateList(states,colors){_classCallCheck(this,ColorStateList);this.mDefaultColor=0xffff0000;this.mStateSpecs=states;this.mColors=colors;if(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;ib?1:-1;});for(var i=fromIndex;itoIndex){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;i=0)return '@ref/'+index;this.objectRefs.push(obj);return '@ref/'+(this.objectRefs.length-1);}},{key:'parsePaddingMarginLTRB',value:function parsePaddingMarginLTRB(value){value=value+'';var parts=[];var _iteratorNormalCompletion26=true;var _didIteratorError26=false;var _iteratorError26=undefined;try{for(var _iterator26=value.split(' ')[Symbol.iterator](),_step26;!(_iteratorNormalCompletion26=(_step26=_iterator26.next()).done);_iteratorNormalCompletion26=true){var part=_step26.value;if(part)parts.push(part);}}catch(err){_didIteratorError26=true;_iteratorError26=err;}finally {try{if(!_iteratorNormalCompletion26&&_iterator26.return){_iterator26.return();}}finally {if(_didIteratorError26){throw _iteratorError26;}}}switch(parts.length){case 1:return [parts[0],parts[0],parts[0],parts[0]];case 2:return [parts[1],parts[0],parts[1],parts[0]];case 3:return [parts[1],parts[0],parts[1],parts[2]];case 4:return [parts[3],parts[0],parts[1],parts[2]];}throw Error('not a padding or margin value : '+value);}},{key:'parseBoolean',value:function parseBoolean(value){var defaultValue=arguments.length<=1||arguments[1]===undefined?true:arguments[1];if(value===false||value==='false'||value==='0')return false;else if(value===true||value==='true'||value==='1'||value==='')return true;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;gravity=Gravity.NO_GRAVITY;try{var parts=s.split("|");parts.forEach(function(part){var g=Gravity[part.toUpperCase()];if(Number.isInteger(g))gravity|=g;});}catch(e){console.error(e);}if(Number.isNaN(gravity)||gravity===Gravity.NO_GRAVITY)gravity=defaultValue;return gravity;}},{key:'parseDrawable',value:function parseDrawable(s){if(!s)return null;if(s instanceof Drawable)return s;s=(s+'').trim();if(s.startsWith('@')){var refObj=this.getRefObject(s);if(refObj)return refObj;return Resources.getSystem().getDrawable(s);}else if(s.startsWith('url(')){s=s.substring('url('.length);if(s.endsWith(')'))s=s.substring(0,s.length-1);return new androidui.image.NetDrawable(s);}else {try{var color=this.parseColor(s);return new ColorDrawable(color);}catch(e){}}return null;}},{key:'parseColor',value:function parseColor(value,defaultValue){var color=Number.parseInt(value);if(Number.isInteger(color))return color;try{if(value.startsWith('@')){return Resources.getSystem().getColor(value);}else {if(value.startsWith('#')&&value.length===4){value='#'+value[1]+value[1]+value[2]+value[2]+value[2]+value[2];}return Color.parseColor(value);}}catch(e){if(defaultValue==null)throw e;}return defaultValue;}},{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('@')){var refObj=this.getRefObject(value);if(refObj)return refObj;return Resources.getSystem().getColorStateList(value);}else {try{var color=this.parseColor(value);return ColorStateList.valueOf(color);}catch(e){console.log(e);}}return null;}},{key:'parseNumber',value:function parseNumber(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==='string'&&value.startsWith('@')){value=Resources.getSystem().getString(value);}try{return TypedValue.complexToDimensionPixelSize(value,baseValue);}catch(e){return defaultValue;}}},{key:'parseString',value:function parseString(value,defaultValue){if(typeof value==='string'){if(value.startsWith('@')){return Resources.getSystem().getString(value);}return value;}return defaultValue;}},{key:'parseTextArray',value:function parseTextArray(value){value+='';if(value.startsWith('@')){return Resources.getSystem().getTextArray(value);}else {try{var json=JSON.parse(value);if(json instanceof Array)return json;}catch(e){}}return null;}}]);return AttrBinder;}();attr.AttrBinder=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 _this16=_possibleConstructorReturn(this,Object.getPrototypeOf(NetDrawable).call(this));_this16.mImageWidth=0;_this16.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 _this16.onLoad();},function(){return _this16.onError();});_this16.mState=new State(image,paint);if(image.isImageLoaded())_this16.initBoundWithLoadedImage(image);return _this16;}_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:'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,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);}}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;}}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.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_3){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 _this17=_possibleConstructorReturn(this,Object.getPrototypeOf(LayerDrawable).call(this));_this17.mOpacityOverride=PixelFormat.UNKNOWN;_this17.mTmpRect=new Rect();var _as=_this17.createConstantState(state);_this17.mLayerState=_as;if(_as.mNum>0){_this17.ensurePadding();}if(layers!=null){var length=layers.length;var r=new Array(length);for(var i=0;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=new Array(N);this.mPaddingT=new Array(N);this.mPaddingR=new Array(N);this.mPaddingB=new Array(N);}},{key:'getConstantState',value:function getConstantState(){if(this.mLayerState.canConstantState()){return this.mLayerState;}return null;}},{key:'mutate',value:function mutate(){if(!this.mMutated&&_get2(Object.getPrototypeOf(LayerDrawable.prototype),'mutate',this).call(this)==this){this.mLayerState=this.createConstantState(this.mLayerState);var array=this.mLayerState.mChildren;var N=this.mLayerState.mNum;for(var i=0;i0?this.mChildren[0].mDrawable.getOpacity():PixelFormat.TRANSPARENT;for(var i=1;i0){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_4.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_4.ScaleDrawable||(drawable_4.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),_key17=0;_key17<_len17;_key17++){args[_key17]=arguments[_key17];}var _this20=_possibleConstructorReturn(this,(_Object$getPrototypeO2=Object.getPrototypeOf(DrawableContainer)).call.apply(_Object$getPrototypeO2,[this].concat(args)));_this20.mAlpha=0xFF;_this20.mCurIndex=-1;_this20.mMutated=false;_this20.mEnterAnimationEnd=0;_this20.mExitAnimationEnd=0;return _this20;}_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 _this21=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=_this21;_this21.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:'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 _this23=_possibleConstructorReturn(this,Object.getPrototypeOf(AnimationState).call(this,orig,owner));if(orig!=null){_this23.mDurations=orig.mDurations;_this23.mOneShot=orig.mOneShot;}else {_this23.mDurations=new Array(_this23.getCapacity());_this23.mOneShot=true;}return _this23;}_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_5){var DEBUG=android.util.Log.DBG_StateListDrawable;var TAG="StateListDrawable";var DEFAULT_DITHER=true;var StateListDrawable=function(_drawable_5$DrawableC){_inherits(StateListDrawable,_drawable_5$DrawableC);function StateListDrawable(){_classCallCheck(this,StateListDrawable);var _this24=_possibleConstructorReturn(this,Object.getPrototypeOf(StateListDrawable).call(this));_this24.initWithState(null);return _this24;}_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:'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 _this28=this;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?1:bound.width()/staticWidthSum;var staticHeightPartScale=extraHeight>=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=_this28.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 _this29=_possibleConstructorReturn(this,Object.getPrototypeOf(ChangeImageSizeDrawable).call(this));_this29.mTmpRect=new Rect();_this29.mMutated=false;_this29.mState=new State(null,_this29);_this29.mState.mDrawable=drawable;_this29.mState.mOverrideWidth=overrideWidth;_this29.mState.mOverrideHeight=overrideHeight;if(drawable!=null){drawable.setCallback(_this29);}return _this29;}_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,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABPlBMVEUAAAAzteUzteU9PT0zteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteU9Pj4zteUzteUzteUzteUzteUzteUzteUMLTkzteUzteUzteUzteUzteUvp9QzteU9P0AIHCQ9QUMAT2kLKTQAV3QKIy0zteUAUWwzteUzteUzteUdaIQOM0Ays+MytOQpkrkzteUnjLErdIwpb4YmX3IPOEcjfZ8AU28oaH4zteUql74updIscokKIy0upNAnjLEnjbMufJYveZI9fJApa4ImZXoysuEsn8kdcY4uptETRFYiepormcIkgKJEh500gZsAWXc2bYAAPlMAOEoOMkAAmcwAmMoAksMAjbwOn88/stkQoNAqqtUsq9VBs9k+stgoqdRavd43r9cAj79HttoyrdYAibcmqNRAenSqAAAAV3RSTlMAAwbNDAgOEgohFBkXGx0fL84lNCMQOCoReDInQiw9Sj/Ra9THdc1wO8gpSFY5fVFNSEVEz8vCgzTJyFxLP81jRj401NHPycViTtFbREA6L9XVzce3s134HTq+AAAE2UlEQVRo3u2ZaXfSUBCGS1EhQoCEBAIxCIlIxbYuWDfUarXu+1qlVFqty///A85MhiZw0ZsCnqPn5P3c8zzcmZu5ye1CnDhx/pckDvI32GLmTxczX/xiKHM0hOFHOWHHXPgMT6ePYNJpdsxDEOAJfgxDElCwYXY+4RFumhbGRAcpyDAzn/GmlUodp6RS4JiLgfmEB3o2m6FkwWHBKoaGmfmMz6hqjqKCghaRZsHsfMLn8nmFkvcVUCVYAgpm5Vs+XjEMXV9ZX38BCjRYwRJm48PPV3OKYuh2u7zibm66LwwypKBILJiRn1Hh1wPdKTxr3fvy5ZZ7lQxYpLS0Rsk/RYM0MJ7nOYVqFfiDr18Hl9CQU2EJ0AWZICrfqxaLnda93b1+f2cbDbgEi2okE4gzefj4HjliprKZnKK3nUKxWOo0L+3u9T586JFByUGNogmILeLTB/xyoVos1YZ8MOx9f+xCF7LYBLlgFMw56m//rOrzS0v1C8zHbG1tvXuKAjOygNkMRzxtfzXv82v1G5Vbuzs9xn/cv+Ya0QQJX8BgJENoLFu4PYlf9PnbAf/TNXeDBNQDucCnE5hnvmn5T5dhE//EjcraCL+1YUcTJFDg45mMI98fnDgbbAf4dZH/3LGVPO+ihEzAeBr4OPER7o8e2j5L9ROPBH6hrOM2NWVPcgIFwXnCbBXoiG870F7i3w/zzzRvFgtlQ4EKRRMgn3pKPxzZNNgQj+29eFLgl6pYIW6BXBAa+FAXnMk4NhGPPx/410f5t5eKBxWS9Bj3Z1KD+iCfy27bZYAD3cefHedXbtdgAbyHqEJyAZ8ogF9x168CnOg1xJ89v3p9+3M/zK/zAnjURRBggYivr7gvN1t3iiWiE/7c6oNR/kngUwcywwXIBJqGRwrzX8Fp0urUmX7+nMg/ERSIOiB7ChZBwDMN6nN3G06TteYNpi8vT+QX2ka4QHIBdACeWuTDtITTZK3yiOjAvzyBzw1IBSe+VEBDH/l8mqytPlle7na7Vy4PBH5R4EcSQAfcx99/Ap8M91efdLsPJ/E9T+RLBSYKnr6FQwRhZLh+5eEY/5T/+z1P4EcUGO7r/Y+kYMNEfsHzRH60EhlX3dOfhob+529vLn+bwC97nsCPKrA3WiHDzmAwia97DYEvF+Bzllds507I0Ov3exP4SqMh4YtPMj8Hiu5U7zTZwBH5uUZDzhdHBXZZMeDw7bBB4NeZn2k05Hxx2HETnGrpwohB5B9vaCJfLuAawRKWLlTYMJmf0jSBLzPgeRAsocaGgD86HzRNzhePzNASSnU2MH98vmmayJcLeAm+ocZ9ID6eXyPzU0syP2pQQK/pXKTAgPzmTShP1WkH8yeZFPlywaJfJDTQizrt1n3kw/FYgPMrmD8kWDhMSBB8ien0utJpnf7x41TrJuLLupE/4JNg4bCCsW89VMDUONUivB3+3FvEv144ZJLJsa9VeuvaWH8P9Dbic2rwRQyChWkEbLBSw7cv3YboOuLxe3jIn1Lw+xsDvjIwmT+tIHynYqGCLz1UoPv4YP5MJxgacBGwCnyLp+DF0Oi90LQCNtAi0GGlIHTrxHjmTytgQ+hTiiNczU0vEO8WxcvFqQWS21HAE39qwaHyLwoi37H/J/8liBMnTpw4ceLEkeQXuf5HL4dNIhQAAAAASUVORK5CYII="],"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,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"],"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=="],"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,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:'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:'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=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();}},{key:'white',get:function get(){return Color.WHITE;}},{key:'black',get:function get(){return Color.BLACK;}}]);return color;}();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 TypedValue=android.util.TypedValue;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 _this34=_possibleConstructorReturn(this,Object.getPrototypeOf(View).call(this));_this34.mPrivateFlags=0;_this34.mPrivateFlags2=0;_this34.mPrivateFlags3=0;_this34.mCurrentAnimation=null;_this34.mOldWidthMeasureSpec=Number.MIN_SAFE_INTEGER;_this34.mOldHeightMeasureSpec=Number.MIN_SAFE_INTEGER;_this34.mMeasuredWidth=0;_this34.mMeasuredHeight=0;_this34.mBackgroundSizeChanged=false;_this34.mBackgroundWidth=0;_this34.mBackgroundHeight=0;_this34.mHasPerformedLongPress=false;_this34.mMinWidth=0;_this34.mMinHeight=0;_this34.mDrawingCacheBackgroundColor=0;_this34.mTouchSlop=0;_this34.mVerticalScrollFactor=0;_this34.mOverScrollMode=0;_this34.mViewFlags=0;_this34.mLayerType=View.LAYER_TYPE_NONE;_this34.mCachingFailed=false;_this34.mWindowAttachCount=0;_this34.mTransientStateCount=0;_this34.mLastIsOpaque=false;_this34._mLeft=0;_this34._mRight=0;_this34._mTop=0;_this34._mBottom=0;_this34._mScrollX=0;_this34._mScrollY=0;_this34.mPaddingLeft=0;_this34.mPaddingRight=0;_this34.mPaddingTop=0;_this34.mPaddingBottom=0;_this34.mCornerRadiusTopLeft=0;_this34.mCornerRadiusTopRight=0;_this34.mCornerRadiusBottomRight=0;_this34.mCornerRadiusBottomLeft=0;_this34._attrBinder=new AttrBinder(_this34);_this34.mContext=context;_this34.mTouchSlop=view_2.ViewConfiguration.get().getScaledTouchSlop();_this34.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);_this34.initBindAttr(_this34._attrBinder);_this34.initBindElement(bindElement);if(defStyle)_this34.applyDefaultAttributes(defStyle);return _this34;}_createClass(View,[{key:'initBindAttr',value:function initBindAttr(a){var _this35=this;a.addAttr('background',function(value){_this35.setBackground(a.parseDrawable(value));},function(){return _this35.mBackground;});a.addAttr('padding',function(value){if(value==null)value=0;var _a$parsePaddingMargin=a.parsePaddingMarginLTRB(value);var _a$parsePaddingMargin2=_slicedToArray(_a$parsePaddingMargin,4);var left=_a$parsePaddingMargin2[0];var top=_a$parsePaddingMargin2[1];var right=_a$parsePaddingMargin2[2];var bottom=_a$parsePaddingMargin2[3];_this35._setPaddingWithUnit(left,top,right,bottom);},function(){return _this35.mPaddingTop+' '+_this35.mPaddingRight+' '+_this35.mPaddingBottom+' '+_this35.mPaddingLeft;}),a.addAttr('paddingLeft',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(value,_this35.mPaddingTop,_this35.mPaddingRight,_this35.mPaddingBottom);},function(){return _this35.mPaddingLeft;}),a.addAttr('paddingStart',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(value,_this35.mPaddingTop,_this35.mPaddingRight,_this35.mPaddingBottom);},function(){return _this35.mPaddingLeft;}),a.addAttr('paddingTop',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,value,_this35.mPaddingRight,_this35.mPaddingBottom);},function(){return _this35.mPaddingTop;}),a.addAttr('paddingRight',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,_this35.mPaddingTop,value,_this35.mPaddingBottom);},function(){return _this35.mPaddingRight;}),a.addAttr('paddingEnd',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,_this35.mPaddingTop,value,_this35.mPaddingBottom);},function(){return _this35.mPaddingRight;}),a.addAttr('paddingBottom',function(value){if(value==null)value=0;_this35._setPaddingWithUnit(_this35.mPaddingLeft,_this35.mPaddingTop,_this35.mPaddingRight,value);},function(){return _this35.mPaddingBottom;}),a.addAttr('scrollX',function(value){value=Number.parseInt(value);if(Number.isInteger(value))_this35.scrollTo(value,_this35.mScrollY);},function(){return _this35.getScrollX();}),a.addAttr('scrollY',function(value){value=Number.parseInt(value);if(Number.isInteger(value))_this35.scrollTo(_this35.mScrollX,value);},function(){return _this35.getScrollY();}),a.addAttr('alpha',function(value){_this35.setAlpha(a.parseNumber(value,_this35.getAlpha()));},function(){return _this35.getAlpha();}),a.addAttr('transformPivotX',function(value){_this35.setPivotX(a.parseNumber(value,_this35.getPivotX()));},function(){return _this35.getPivotX();}),a.addAttr('transformPivotY',function(value){_this35.setPivotY(a.parseNumber(value,_this35.getPivotY()));},function(){return _this35.getPivotY();}),a.addAttr('translationX',function(value){_this35.setTranslationX(a.parseNumber(value,_this35.getTranslationX()));},function(){return _this35.getTranslationX();}),a.addAttr('translationY',function(value){_this35.setTranslationY(a.parseNumber(value,_this35.getTranslationY()));},function(){return _this35.getTranslationY();}),a.addAttr('rotation',function(value){_this35.setRotation(a.parseNumber(value,_this35.getRotation()));},function(){return _this35.getRotation();}),a.addAttr('rotationX',function(value){}),a.addAttr('rotationY',function(value){}),a.addAttr('scaleX',function(value){_this35.setScaleX(a.parseNumber(value,_this35.getScaleX()));},function(){return _this35.getScaleX();}),a.addAttr('scaleY',function(value){_this35.setScaleY(a.parseNumber(value,_this35.getScaleY()));},function(){return _this35.getScaleY();}),a.addAttr('tag',function(value){_this35.setTag(value);}),a.addAttr('id',function(value){_this35.setId(value);}),a.addAttr('focusable',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.FOCUSABLE,View.FOCUSABLE_MASK);}},function(){return _this35.isFocusable();}),a.addAttr('focusableInTouchMode',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE,View.FOCUSABLE_IN_TOUCH_MODE|View.FOCUSABLE_MASK);}},function(){return _this35.isFocusableInTouchMode();}),a.addAttr('clickable',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.CLICKABLE,View.CLICKABLE);}},function(){return _this35.isClickable();}),a.addAttr('longClickable',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.LONG_CLICKABLE,View.LONG_CLICKABLE);}},function(){return _this35.isLongClickable();}),a.addAttr('saveEnabled',function(value){if(a.parseBoolean(value,false)){}}),a.addAttr('duplicateParentState',function(value){if(a.parseBoolean(value,false)){_this35.setFlags(View.DUPLICATE_PARENT_STATE,View.DUPLICATE_PARENT_STATE);}}),a.addAttr('visibility',function(value){if(value==='gone')_this35.setVisibility(View.GONE);else if(value==='invisible')_this35.setVisibility(View.INVISIBLE);else if(value==='visible')_this35.setVisibility(View.VISIBLE);},function(){return _this35.getVisibility();}),a.addAttr('scrollbars',function(value){if(value==='none'){_this35.setHorizontalScrollBarEnabled(false);_this35.setVerticalScrollBarEnabled(false);}}),a.addAttr('isScrollContainer',function(value){if(a.parseBoolean(value,false)){_this35.setScrollContainer(true);}}),a.addAttr('minWidth',function(value){_this35.setMinimumWidth(a.parseNumber(value,0));},function(){return _this35.mMinWidth;}),a.addAttr('minHeight',function(value){_this35.setMinimumHeight(a.parseNumber(value,0));},function(){return _this35.mMinHeight;}),a.addAttr('onClick',function(value){if(a.parseBoolean(value))_this35.setClickable(true);}),a.addAttr('overScrollMode',function(value){var scrollMode=View[('OVER_SCROLL_'+value).toUpperCase()];if(scrollMode===undefined)scrollMode=View.OVER_SCROLL_IF_CONTENT_SCROLLS;_this35.setOverScrollMode(scrollMode);}),a.addAttr('layerType',function(value){if((value+'').toLowerCase()=='software'){_this35.setLayerType(View.LAYER_TYPE_SOFTWARE);}else {_this35.setLayerType(View.LAYER_TYPE_NONE);}});a.addAttr('cornerRadius',function(value){var _a$parsePaddingMargin3=a.parsePaddingMarginLTRB(value);var _a$parsePaddingMargin4=_slicedToArray(_a$parsePaddingMargin3,4);var leftTop=_a$parsePaddingMargin4[0];var topRight=_a$parsePaddingMargin4[1];var rightBottom=_a$parsePaddingMargin4[2];var bottomLeft=_a$parsePaddingMargin4[3];_this35.setCornerRadius(a.parseNumber(leftTop,0),a.parseNumber(topRight,0),a.parseNumber(rightBottom,0),a.parseNumber(bottomLeft,0));},function(){return _this35.mCornerRadiusTopLeft+' '+_this35.mCornerRadiusTopRight+' '+_this35.mCornerRadiusBottomRight+' '+_this35.mCornerRadiusBottomLeft;});a.addAttr('cornerRadiusTopLeft',function(value){_this35.setCornerRadiusTopLeft(a.parseNumber(value,_this35.mCornerRadiusTopLeft));},function(){return _this35.mCornerRadiusTopLeft;});a.addAttr('cornerRadiusTopRight',function(value){_this35.setCornerRadiusTopRight(a.parseNumber(value,_this35.mCornerRadiusTopRight));},function(){return _this35.mCornerRadiusTopRight;});a.addAttr('cornerRadiusBottomLeft',function(value){_this35.setCornerRadiusBottomLeft(a.parseNumber(value,_this35.mCornerRadiusBottomLeft));},function(){return _this35.mCornerRadiusBottomLeft;});a.addAttr('cornerRadiusBottomRight',function(value){_this35.setCornerRadiusBottomRight(a.parseNumber(value,_this35.mCornerRadiusBottomRight));},function(){return _this35.mCornerRadiusBottomRight;});a.addAttr('viewShadowColor',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();_this35.setShadowView(_this35.mShadowPaint.shadowRadius,_this35.mShadowPaint.shadowDx,_this35.mShadowPaint.shadowDy,a.parseColor(value,_this35.mShadowPaint.shadowColor));},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowColor;});a.addAttr('viewShadowDx',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();var dx=_this35._attrBinder.parseNumber(value,_this35.mShadowPaint.shadowDx);_this35.setShadowView(_this35.mShadowPaint.shadowRadius,dx,_this35.mShadowPaint.shadowDy,_this35.mShadowPaint.shadowColor);},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowDx;});a.addAttr('viewShadowDy',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();var dy=a.parseNumber(value,_this35.mShadowPaint.shadowDy);_this35.setShadowView(_this35.mShadowPaint.shadowRadius,_this35.mShadowPaint.shadowDx,dy,_this35.mShadowPaint.shadowColor);},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowDy;});a.addAttr('viewShadowRadius',function(value){if(!_this35.mShadowPaint)_this35.mShadowPaint=new Paint();var radius=_this35._attrBinder.parseNumber(value,_this35.mShadowPaint.shadowRadius);_this35.setShadowView(radius,_this35.mShadowPaint.shadowDx,_this35.mShadowPaint.shadowDy,_this35.mShadowPaint.shadowColor);},function(){if(_this35.mShadowPaint)return _this35.mShadowPaint.shadowRadius;});}},{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 dm=Resources.getDisplayMetrics();var width=view.getWidth();var height=view.getHeight();var padLeft=TypedValue.complexToDimensionPixelSize(left,width,dm);var padTop=TypedValue.complexToDimensionPixelSize(top,height,dm);var padRight=TypedValue.complexToDimensionPixelSize(right,width,dm);var padBottom=TypedValue.complexToDimensionPixelSize(bottom,height,dm);view.setPadding(padLeft,padTop,padRight,padBottom);var unit=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=TypedValue.complexToDimensionPixelSize(left,width,dm);var padTopN=TypedValue.complexToDimensionPixelSize(top,height,dm);var padRightN=TypedValue.complexToDimensionPixelSize(right,width,dm);var padBottomN=TypedValue.complexToDimensionPixelSize(bottom,height,dm);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){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;}}},{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 _this36=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(!_this36.mID)return {v:null};var id=_this36.mID;return {v:root.findViewByPredicateInsideOut(_this36,{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){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){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(!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);}}},{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);}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);}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 handle=false;if(this.bindElementOnClickAttr){handle=eval(this.bindElementOnClickAttr);}var li=this.mListenerInfo;if(li!=null&&li.mOnClickListener!=null){handle=li.mOnClickListener.onClick(this)||handle;}return handle;}},{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){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;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;}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.multiplyAlpha(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.multiplyAlpha(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;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);this.syncDrawStateToElement();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=new Array(drawableState.length+extraSpace);System.arraycopy(drawableState,0,fullState,0,drawableState.length);}else {fullState=new Array(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 _iteratorNormalCompletion29=true;var _didIteratorError29=false;var _iteratorError29=undefined;try{for(var _iterator29=listeners[Symbol.iterator](),_step29;!(_iteratorNormalCompletion29=(_step29=_iterator29.next()).done);_iteratorNormalCompletion29=true){var listener=_step29.value;listener.onViewAttachedToWindow(this);}}catch(err){_didIteratorError29=true;_iteratorError29=err;}finally {try{if(!_iteratorNormalCompletion29&&_iterator29.return){_iterator29.return();}}finally {if(_didIteratorError29){throw _iteratorError29;}}}}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();var li=this.mListenerInfo;var listeners=li!=null?li.mOnAttachStateChangeListeners:null;if(listeners!=null&&listeners.size()>0){var _iteratorNormalCompletion30=true;var _didIteratorError30=false;var _iteratorError30=undefined;try{for(var _iterator30=listeners[Symbol.iterator](),_step30;!(_iteratorNormalCompletion30=(_step30=_iterator30.next()).done);_iteratorNormalCompletion30=true){var listener=_step30.value;listener.onViewDetachedFromWindow(this);}}catch(err){_didIteratorError30=true;_iteratorError30=err;}finally {try{if(!_iteratorNormalCompletion30&&_iterator30.return){_iterator30.return();}}finally {if(_didIteratorError30){throw _iteratorError30;}}}}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];var originProto=Object.getPrototypeOf(this);console.dir(Object.assign(Object.create(originProto),this));}},{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:'findViewByPredicateTraversal',value:function findViewByPredicateTraversal(predicate,childToSkip){if(predicate.apply(this)){return this;}return null;}},{key:'findViewById',value:function findViewById(id){if(!id)return null;if(id==this.bindElement.id){return this;}return this.findViewTraversal(id);}},{key:'findViewTraversal',value:function findViewTraversal(id){var bindEle=this.bindElement.querySelector('#'+id);return bindEle?bindEle[View.AndroidViewProperty]:null;}},{key:'findViewByPredicate',value:function findViewByPredicate(predicate){return this.findViewByPredicateTraversal(predicate,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){if(this.bindElement)this.bindElement.id=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.bindElementOnClickAttr=this.bindElement.getAttribute('onclick');this.bindElement.removeAttribute('onclick');if(this.bindElementOnClickAttr)this.setClickable(true);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._parseInitedAttribute();this._initAttrObserver();}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length<=0||arguments[0]===undefined?false: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(){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.left=(left-pScrollX)/density+'px';bind.style.top=(top-pScrollY)/density+'px';bind.style.width=width/density+'px';bind.style.height=height/density+'px';}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);var mCanvasContent=this.mCanvasElement.getContext('2d');mCanvasContent.clearRect(left,top,width,height);}else {canvas=new SurfaceLockCanvas(this.mCanvasBound.width(),this.mCanvasBound.height(),this.mCanvasElement);this.mLockSaveCount=canvas.save();canvas.clipRect(left,top,left+width,top+height);canvas.clearColor();}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);}}}]);return Surface;}();Surface.DrawToCacheFirstMode=false;view.Surface=Surface;var SurfaceLockCanvas=function(_Canvas){_inherits(SurfaceLockCanvas,_Canvas);function SurfaceLockCanvas(width,height,canvasElement){_classCallCheck(this,SurfaceLockCanvas);var _this37=_possibleConstructorReturn(this,Object.getPrototypeOf(SurfaceLockCanvas).call(this,width,height));_this37.mCanvasElement=canvasElement;_this37._mCanvasContent=_this37.mCanvasElement.getContext("2d");return _this37;}_createClass(SurfaceLockCanvas,[{key:'initImpl',value:function initImpl(){}}]);return SurfaceLockCanvas;}(Canvas);})(view=android.view||(android.view={}));})(android||(android={}));var PageStack;(function(PageStack){PageStack.DEBUG=false;var history_go=history.go;var historyLocking=false;var pendingFuncLock=[];function init(){removeLastHistoryIfFaked();ensureLockDo(_init);history.go=function(delta){PageStack.go(delta);};history.back=function(){PageStack.go(-1);};history.forward=function(){PageStack.go(1);};}PageStack.init=init;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}]};history.replaceState(PageStack.currentStack,null,'#');}ensureLastHistoryFaked();initOnpopstate();window.addEventListener('load',function(){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(firePageOpen(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;if(firePageClose(stackList[stackList.length-1].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];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)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);}function restorePageFromStackIfNeed(){if(PageStack.currentStack){var copy=PageStack.currentStack.stack.concat();copy.shift();var _iteratorNormalCompletion35=true;var _didIteratorError35=false;var _iteratorError35=undefined;try{for(var _iterator35=copy[Symbol.iterator](),_step35;!(_iteratorNormalCompletion35=(_step35=_iterator35.next()).done);_iteratorNormalCompletion35=true){var saveState=_step35.value;firePageOpen(saveState.pageId,saveState.extra,true);}}catch(err){_didIteratorError35=true;_iteratorError35=err;}finally {try{if(!_iteratorNormalCompletion35&&_iterator35.return){_iterator35.return();}}finally {if(_didIteratorError35){throw _iteratorError35;}}}}}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 firePageClose(pageId,pageExtra){if(PageStack.pageCloseHandler){try{return PageStack.pageCloseHandler(pageId,pageExtra);}catch(e){console.error(e);}}}function notifyPageClosed(pageId){if(PageStack.DEBUG)console.log('notifyPageClosed',pageId);if(historyLocking){ensureLockDo(function(){notifyPageClosed(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){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){activity.mCallActivity.dispatchActivityResult(null,activity.getIntent().mRequestCode,activity.mResultCode,activity.mResultData);}_this40.handleDestroyActivity(activity,finishing);if(!isCreateSuc)return;if(isRootActivity){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 _iteratorNormalCompletion41=true;var _didIteratorError41=false;var _iteratorError41=undefined;try{for(var _iterator41=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step41;!(_iteratorNormalCompletion41=(_step41=_iterator41.next()).done);_iteratorNormalCompletion41=true){var activity=_step41.value;if(activity.getIntent()&&activity.getIntent().activityName==intent.activityName){findActivity=true;break;}destroyList.push(activity);}}catch(err){_didIteratorError41=true;_iteratorError41=err;}finally {try{if(!_iteratorNormalCompletion41&&_iterator41.return){_iterator41.return();}}finally {if(_didIteratorError41){throw _iteratorError41;}}}if(findActivity){var _iteratorNormalCompletion42=true;var _didIteratorError42=false;var _iteratorError42=undefined;try{for(var _iterator42=destroyList[Symbol.iterator](),_step42;!(_iteratorNormalCompletion42=(_step42=_iterator42.next()).done);_iteratorNormalCompletion42=true){var activity=_step42.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError42=true;_iteratorError42=err;}finally {try{if(!_iteratorNormalCompletion42&&_iterator42.return){_iterator42.return();}}finally {if(_didIteratorError42){throw _iteratorError42;}}}return true;}return false;}},{key:'canBackTo',value:function canBackTo(intent){var _iteratorNormalCompletion43=true;var _didIteratorError43=false;var _iteratorError43=undefined;try{for(var _iterator43=this.mLaunchedActivities[Symbol.iterator](),_step43;!(_iteratorNormalCompletion43=(_step43=_iterator43.next()).done);_iteratorNormalCompletion43=true){var activity=_step43.value;if(activity.getIntent().activityName==intent.activityName){return true;}}}catch(err){_didIteratorError43=true;_iteratorError43=err;}finally {try{if(!_iteratorNormalCompletion43&&_iterator43.return){_iterator43.return();}}finally {if(_didIteratorError43){throw _iteratorError43;}}}return false;}},{key:'scheduleBackToRoot',value:function scheduleBackToRoot(){var destroyList=Array.from(this.mLaunchedActivities).reverse();destroyList.shift();var _iteratorNormalCompletion44=true;var _didIteratorError44=false;var _iteratorError44=undefined;try{for(var _iterator44=destroyList[Symbol.iterator](),_step44;!(_iteratorNormalCompletion44=(_step44=_iterator44.next()).done);_iteratorNormalCompletion44=true){var activity=_step44.value;this.scheduleDestroyActivity(activity);}}catch(err){_didIteratorError44=true;_iteratorError44=err;}finally {try{if(!_iteratorNormalCompletion44&&_iterator44.return){_iterator44.return();}}finally {if(_didIteratorError44){throw _iteratorError44;}}}}},{key:'handlePauseActivity',value:function handlePauseActivity(activity){this.performPauseActivity(activity);}},{key:'performPauseActivity',value:function performPauseActivity(activity){activity.mCalled=false;activity.performPause();if(!activity.mCalled){throw new Error("Activity "+ActivityThread.getActivityName(activity)+" did not call through to super.onPause()");}}},{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 _iteratorNormalCompletion45=true;var _didIteratorError45=false;var _iteratorError45=undefined;try{for(var _iterator45=visibleActivities[Symbol.iterator](),_step45;!(_iteratorNormalCompletion45=(_step45=_iterator45.next()).done);_iteratorNormalCompletion45=true){var visibleActivity=_step45.value;this.handleStopActivity(visibleActivity);}}catch(err){_didIteratorError45=true;_iteratorError45=err;}finally {try{if(!_iteratorNormalCompletion45&&_iterator45.return){_iterator45.return();}}finally {if(_didIteratorError45){throw _iteratorError45;}}}}}}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.mCalled=false;activity.performPause();if(!activity.mCalled){throw new Error("Activity "+ActivityThread.getActivityName(activity)+" did not call through to super.onPause()");}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 _iteratorNormalCompletion46=true;var _didIteratorError46=false;var _iteratorError46=undefined;try{for(var _iterator46=Array.from(this.mLaunchedActivities).reverse()[Symbol.iterator](),_step46;!(_iteratorNormalCompletion46=(_step46=_iterator46.next()).done);_iteratorNormalCompletion46=true){var activity=_step46.value;list.push(activity);if(!activity.getWindow().getAttributes().isFloating())break;}}catch(err){_didIteratorError46=true;_iteratorError46=err;}finally {try{if(!_iteratorNormalCompletion46&&_iterator46.return){_iterator46.return();}}finally {if(_didIteratorError46){throw _iteratorError46;}}}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){var MotionEvent=android.view.MotionEvent;var KeyEvent=android.view.KeyEvent;var Intent=android.content.Intent;var ActivityThread=android.app.ActivityThread;var AndroidUI=function(){function AndroidUI(androidUIElement){_classCallCheck(this,AndroidUI);this._canvas=document.createElement("canvas");this._windowBound=new android.graphics.Rect();this.tempRect=new android.graphics.Rect();this.touchEvent=new MotionEvent();this.touchAvailable=false;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._viewRootImpl.androidUIElement=this.androidUIElement;this.rootResourceElement=this.androidUIElement.querySelector('resources');if(this.rootResourceElement)this.androidUIElement.removeChild(this.rootResourceElement);else this.rootResourceElement=document.createElement('resources');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(){this.mApplication=new android.app.Application(this);this.mApplication.onCreate();}},{key:'initLaunchActivity',value:function initLaunchActivity(){this.mActivityThread=new ActivityThread(this);var _iteratorNormalCompletion47=true;var _didIteratorError47=false;var _iteratorError47=undefined;try{for(var _iterator47=Array.from(this.androidUIElement.children)[Symbol.iterator](),_step47;!(_iteratorNormalCompletion47=(_step47=_iterator47.next()).done);_iteratorNormalCompletion47=true){var ele=_step47.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 _iteratorNormalCompletion48=true;var _didIteratorError48=false;var _iteratorError48=undefined;try{for(var _iterator48=Array.from(ele.children)[Symbol.iterator](),_step48;!(_iteratorNormalCompletion48=(_step48=_iterator48.next()).done);_iteratorNormalCompletion48=true){var element=_step48.value;android.view.LayoutInflater.from(activity).inflate(element,activity.getWindow().mContentParent,true);}}catch(err){_didIteratorError48=true;_iteratorError48=err;}finally {try{if(!_iteratorNormalCompletion48&&_iterator48.return){_iterator48.return();}}finally {if(_didIteratorError48){throw _iteratorError48;}}}var onCreateFunc=ele.getAttribute('oncreate');if(onCreateFunc&&typeof window[onCreateFunc]==="function"){window[onCreateFunc].call(this,activity);}}}}catch(err){_didIteratorError47=true;_iteratorError47=err;}finally {try{if(!_iteratorNormalCompletion47&&_iterator47.return){_iterator47.return();}}finally {if(_didIteratorError47){throw _iteratorError47;}}}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(){if(this.androidUIElement.style.display==='none'){this.androidUIElement.style.display='';}this.androidUIElement.setAttribute('tabindex','0');this.androidUIElement.focus();}},{key:'initEvent',value:function initEvent(){this.initTouchEvent();this.initMouseEvent();this.initKeyEvent();this.initGenericEvent();}},{key:'initTouchEvent',value:function initTouchEvent(){var _this41=this;this.androidUIElement.addEventListener('touchstart',function(e){_this41.touchAvailable=true;_this41.refreshWindowBound();if(e.target!=document.activeElement||!_this41.androidUIElement.contains(document.activeElement)){_this41.androidUIElement.focus();}_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_DOWN,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchmove',function(e){_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_MOVE,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchend',function(e){_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_UP,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('touchcancel',function(e){_this41.touchEvent.initWithTouch(e,MotionEvent.ACTION_CANCEL,_this41._windowBound);if(_this41._viewRootImpl.dispatchInputEvent(_this41.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initMouseEvent',value:function initMouseEvent(){var _this42=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){if(_this42.touchAvailable)return;isMouseDown=true;_this42.refreshWindowBound();_this42.androidUIElement.focus();_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_DOWN,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mousemove',function(e){if(_this42.touchAvailable)return;if(!isMouseDown)return;_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_MOVE,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseup',function(e){if(_this42.touchAvailable)return;isMouseDown=false;_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_UP,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('mouseleave',function(e){if(_this42.touchAvailable)return;if(e.fromElement===_this42.androidUIElement){isMouseDown=false;_this42.touchEvent.initWithTouch(mouseToTouchEvent(e),MotionEvent.ACTION_CANCEL,_this42._windowBound);if(_this42._viewRootImpl.dispatchInputEvent(_this42.touchEvent)){e.stopPropagation();e.preventDefault();return true;}}},true);var scrollEvent=new MotionEvent();this.androidUIElement.addEventListener('mousewheel',function(e){scrollEvent.initWithMouseWheel(e);if(_this42._viewRootImpl.dispatchInputEvent(scrollEvent)){e.stopPropagation();e.preventDefault();return true;}},true);}},{key:'initKeyEvent',value:function initKeyEvent(){var _this43=this;this.androidUIElement.addEventListener('keydown',function(e){_this43.ketEvent.initKeyEvent(e,KeyEvent.ACTION_DOWN);if(_this43._viewRootImpl.dispatchInputEvent(_this43.ketEvent)){e.stopPropagation();e.preventDefault();return true;}},true);this.androidUIElement.addEventListener('keyup',function(e){_this43.ketEvent.initKeyEvent(e,KeyEvent.ACTION_UP);if(_this43._viewRootImpl.dispatchInputEvent(_this43.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 _this44=this;var eventName='visibilitychange';if(document['webkitHidden']!=undefined){eventName='webkitvisibilitychange';}document.addEventListener(eventName,function(){if(document['hidden']||document['webkitHidden']){_this44.mActivityThread.scheduleApplicationHide();}else {_this44.mActivityThread.scheduleApplicationShow();_this44._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:'showDebugLayout',value:function showDebugLayout(){if(this.windowManager.getWindowsLayout().bindElement.parentNode===null){this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);}}},{key:'windowManager',get:function get(){return this.mApplication.getWindowManager();}},{key:'windowBound',get:function get(){return this._windowBound;}}]);return AndroidUI;}();AndroidUI.BindToElementName='AndroidUI';androidui.AndroidUI=AndroidUI;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){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 _this46=this;$domReady(function(){return initElement(_this46);});}},{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.showDebugLayout();}}}]);return AndroidUIElement;}(HTMLDivElement);androidui.AndroidUIElement=AndroidUIElement;function initElement(ele){ele.AndroidUI=new androidui.AndroidUI(ele);var debugAttr=ele.getAttribute('debug');if(debugAttr!=null&&debugAttr!='0'&&debugAttr!='false')ele.AndroidUI.showDebugLayout();}if(typeof document['registerElement']==="function"){document.registerElement("android-ui",AndroidUIElement);}else {$domReady(function(){var eles=document.getElementsByTagName('android-ui');var _iteratorNormalCompletion49=true;var _didIteratorError49=false;var _iteratorError49=undefined;try{for(var _iterator49=Array.from(eles)[Symbol.iterator](),_step49;!(_iteratorNormalCompletion49=(_step49=_iterator49.next()).done);_iteratorNormalCompletion49=true){var ele=_step49.value;initElement(ele);}}catch(err){_didIteratorError49=true;_iteratorError49=err;}finally {try{if(!_iteratorNormalCompletion49&&_iterator49.return){_iterator49.return();}}finally {if(_didIteratorError49){throw _iteratorError49;}}}});}function $domReady(func){if(/^loaded|^complete|^interactive/.test(document.readyState)){setTimeout(func,0);}else {document.addEventListener('DOMContentLoaded',func);}}})(androidui||(androidui={}));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 _this47=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);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.androidUIElement.appendChild(this._showFPSNode);}this._showFPSNode.innerText='FPS:'+fps.toFixed(1);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 _this53=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;}_this53.getRect(first,_this53.mFirstRect);_this53.getRect(second,_this53.mSecondRect);if(_this53.mFirstRect.top<_this53.mSecondRect.top){return -1;}else if(_this53.mFirstRect.top>_this53.mSecondRect.top){return 1;}else if(_this53.mFirstRect.left<_this53.mSecondRect.left){return _this53.mIsLayoutRtl?1:-1;}else if(_this53.mFirstRect.left>_this53.mSecondRect.left){return _this53.mIsLayoutRtl?-1:1;}else if(_this53.mFirstRect.bottom<_this53.mSecondRect.bottom){return -1;}else if(_this53.mFirstRect.bottom>_this53.mSecondRect.bottom){return 1;}else if(_this53.mFirstRect.right<_this53.mSecondRect.right){return _this53.mIsLayoutRtl?1:-1;}else if(_this53.mFirstRect.right>_this53.mSecondRect.right){return _this53.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=Number.MIN_SAFE_INTEGER;Integer.MAX_VALUE=Number.MAX_SAFE_INTEGER;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 TypedValue=android.util.TypedValue;var System=java.lang.System;var ArrayList=java.util.ArrayList;var Integer=java.lang.Integer;var Transformation=view_5.animation.Transformation;var ViewGroup=function(_view_5$View){_inherits(ViewGroup,_view_5$View);function ViewGroup(context,bindElement,defStyle){_classCallCheck(this,ViewGroup);var _this54=_possibleConstructorReturn(this,Object.getPrototypeOf(ViewGroup).call(this,context,bindElement,defStyle));_this54.mLastTouchDownTime=0;_this54.mLastTouchDownIndex=-1;_this54.mLastTouchDownX=0;_this54.mLastTouchDownY=0;_this54.mGroupFlags=0;_this54.mLayoutMode=ViewGroup.LAYOUT_MODE_UNDEFINED;_this54.mChildren=[];_this54.mSuppressLayout=false;_this54.mLayoutCalledWhileSuppressed=false;_this54.mChildCountWithTransientState=0;_this54.initViewGroup();var a=_this54._attrBinder;a.addAttr('clipChildren',function(value){_this54.setClipChildren(a.parseBoolean(value));},function(){return _this54.getClipChildren();});a.addAttr('clipToPadding',function(value){_this54.setClipToPadding(a.parseBoolean(value));},function(){return _this54.isClipToPadding();});a.addAttr('animationCache',function(value){_this54.setAnimationCacheEnabled(a.parseBoolean(value,true));});a.addAttr('persistentDrawingCache',function(value){if(value=='none')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_NO_CACHE);else if(value=='animation')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);else if(value=='scrolling')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);else if(value=='all')_this54.setPersistentDrawingCache(ViewGroup.PERSISTENT_ALL_CACHES);});a.addAttr('addStatesFromChildren',function(value){_this54.setAddStatesFromChildren(a.parseBoolean(value,false));});a.addAttr('alwaysDrawnWithCache',function(value){_this54.setAlwaysDrawnWithCacheEnabled(a.parseBoolean(value,true));});a.addAttr('descendantFocusability',function(value){if(value=='beforeDescendants')_this54.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);else if(value=='afterDescendants')_this54.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);else if(value=='blocksDescendants')_this54.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);});a.addAttr('splitMotionEvents',function(value){_this54.setMotionEventSplittingEnabled(a.parseBoolean(value,false));});return _this54;}_createClass(ViewGroup,[{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_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:'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),_key19=0;_key19<_len19;_key19++){args[_key19]=arguments[_key19];}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;i--){var child=disappearingChildren.get(i);more=this.drawChild(canvas,child,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 LayoutParams=function(){function LayoutParams(){var _this55=this;_classCallCheck(this,LayoutParams);this._width=0;this._height=0;this._measuringParentWidthMeasureSpec=0;this._measuringParentHeightMeasureSpec=0;for(var _len20=arguments.length,args=Array(_len20),_key20=0;_key20<_len20;_key20++){args[_key20]=arguments[_key20];}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);this._attrBinder.addAttr('width',function(value){if(value==null)value=-2;_this55.width=value;},function(){return _this55._widthOrig;});this._attrBinder.addAttr('height',function(value){if(value==null)value=-2;_this55.height=value;},function(){return _this55._heightOrig;});}}_createClass(LayoutParams,[{key:'parseAttributeFrom',value:function parseAttributeFrom(node,context){var _this56=this;Array.from(node.attributes).forEach(function(attr){var layoutParamFiled=attr.name.split("layout_")[1];_this56._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{this._width=TypedValue.complexToDimensionPixelSize(this._width,parentWidth,this._measuringMeasureSpec);}catch(e){console.error(e);this._width=-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{this._height=TypedValue.complexToDimensionPixelSize(this._height,parentHeight,this._measuringMeasureSpec);}catch(e){console.error(e);this._height=-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(){_classCallCheck(this,MarginLayoutParams);var _this57=_possibleConstructorReturn(this,Object.getPrototypeOf(MarginLayoutParams).call(this));_this57._leftMargin=0;_this57._topMargin=0;_this57._rightMargin=0;_this57._bottomMargin=0;_this57._leftMarginOrig=0;_this57._topMarginOrig=0;_this57._rightMarginOrig=0;_this57._bottomMarginOrig=0;if(arguments.length===1){var src=arguments.length<=0?undefined:arguments[0];var _this57=_possibleConstructorReturn(this,Object.getPrototypeOf(MarginLayoutParams).call(this,src));if(src instanceof MarginLayoutParams){_this57.leftMargin=src._leftMargin;_this57.topMargin=src._topMargin;_this57.rightMargin=src._rightMargin;_this57.bottomMargin=src._bottomMargin;}}else if(arguments.length==2){var _this57=_possibleConstructorReturn(this,Object.getPrototypeOf(MarginLayoutParams).call(this,arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]));}_this57._attrBinder.addAttr('marginLeft',function(value){if(value==null)value=0;_this57.leftMargin=value;},function(){return _this57._leftMarginOrig;});_this57._attrBinder.addAttr('marginStart',function(value){if(value==null)value=0;_this57.leftMargin=value;},function(){return _this57._leftMarginOrig;});_this57._attrBinder.addAttr('marginTop',function(value){if(value==null)value=0;_this57.topMargin=value;},function(){return _this57._topMarginOrig;});_this57._attrBinder.addAttr('marginRight',function(value){if(value==null)value=0;_this57.rightMargin=value;},function(){return _this57._rightMarginOrig;});_this57._attrBinder.addAttr('marginEnd',function(value){if(value==null)value=0;_this57.rightMargin=value;},function(){return _this57._rightMarginOrig;});_this57._attrBinder.addAttr('marginBottom',function(value){if(value==null)value=0;_this57.bottomMargin=value;},function(){return _this57._bottomMargin;});_this57._attrBinder.addAttr('margin',function(value){if(value==null)value=0;var _this57$_attrBinder$p=_this57._attrBinder.parsePaddingMarginLTRB(value);var _this57$_attrBinder$p2=_slicedToArray(_this57$_attrBinder$p,4);var left=_this57$_attrBinder$p2[0];var top=_this57$_attrBinder$p2[1];var right=_this57$_attrBinder$p2[2];var bottom=_this57$_attrBinder$p2[3];_this57.leftMargin=left;_this57.topMargin=top;_this57.rightMargin=right;_this57.bottomMargin=bottom;});return _possibleConstructorReturn(_this57);}_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{this._leftMargin=TypedValue.complexToDimensionPixelSize(this._leftMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._leftMargin=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{this._topMargin=TypedValue.complexToDimensionPixelSize(this._topMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._topMargin=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{this._rightMargin=TypedValue.complexToDimensionPixelSize(this._rightMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._rightMargin=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{this._bottomMargin=TypedValue.complexToDimensionPixelSize(this._bottomMargin,parentWidth,this._measuringMeasureSpec);}catch(e){console.warn(e);this._bottomMargin=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 i=0;i0&&(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(wp);}}if(replacement!=null){x+=this.handleReplacement(replacement,wp,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(wp);}x+=this.handleText(wp,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 i=0;ilineEnd){limit=lineEnd;}if(offset>=start&&offset>>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 _this68=_possibleConstructorReturn(this,Object.getPrototypeOf(Ellipsizer).call(this,s));_this68.mWidth=0;_this68.mText=s;return _this68;}_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 _this69=_possibleConstructorReturn(this,Object.getPrototypeOf(SpannedEllipsizer).call(this,display));_this69.mSpanned=display;return _this69;}_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 i=limit-1;while(i>=0){width-=w[i];if(width<0.0)break;i--;}while(i=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()&&child.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 _this71=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT));_this71.x=0;_this71.y=0;_this71.type=0;_this71.flags=0;_this71.exitAnimation=android.R.anim.activity_close_exit;_this71.enterAnimation=android.R.anim.activity_open_enter;_this71.resumeAnimation=android.R.anim.activity_close_enter;_this71.hideAnimation=android.R.anim.activity_open_exit;_this71.dimAmount=0;_this71.mTitle="";_this71.type=_type;return _this71;}_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 _this72=_possibleConstructorReturn(this,Object.getPrototypeOf(TranslateAnimation).call(this));_this72.mFromXType=TranslateAnimation.ABSOLUTE;_this72.mToXType=TranslateAnimation.ABSOLUTE;_this72.mFromYType=TranslateAnimation.ABSOLUTE;_this72.mToYType=TranslateAnimation.ABSOLUTE;_this72.mFromXValue=0.0;_this72.mToXValue=0.0;_this72.mFromYValue=0.0;_this72.mToYValue=0.0;_this72.mFromXDelta=0;_this72.mToXDelta=0;_this72.mFromYDelta=0;_this72.mToYDelta=0;if(arguments.length===4){_this72.mFromXValue=arguments.length<=0?undefined:arguments[0];_this72.mToXValue=arguments.length<=1?undefined:arguments[1];_this72.mFromYValue=arguments.length<=2?undefined:arguments[2];_this72.mToYValue=arguments.length<=3?undefined:arguments[3];_this72.mFromXType=TranslateAnimation.ABSOLUTE;_this72.mToXType=TranslateAnimation.ABSOLUTE;_this72.mFromYType=TranslateAnimation.ABSOLUTE;_this72.mToYType=TranslateAnimation.ABSOLUTE;}else {_this72.mFromXType=arguments.length<=0?undefined:arguments[0];_this72.mFromXValue=arguments.length<=1?undefined:arguments[1];_this72.mToXType=arguments.length<=2?undefined:arguments[2];_this72.mToXValue=arguments.length<=3?undefined:arguments[3];_this72.mFromYType=arguments.length<=4?undefined:arguments[4];_this72.mFromYValue=arguments.length<=5?undefined:arguments[5];_this72.mToYType=arguments.length<=6?undefined:arguments[6];_this72.mToYValue=arguments.length<=7?undefined:arguments[7];}return _this72;}_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 _this73=_possibleConstructorReturn(this,Object.getPrototypeOf(AlphaAnimation).call(this));_this73.mFromAlpha=0;_this73.mToAlpha=0;_this73.mFromAlpha=fromAlpha;_this73.mToAlpha=toAlpha;return _this73;}_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 _this74=_possibleConstructorReturn(this,Object.getPrototypeOf(ScaleAnimation).call(this));_this74.mFromX=0;_this74.mToX=0;_this74.mFromY=0;_this74.mToY=0;_this74.mFromXData=0;_this74.mToXData=0;_this74.mFromYData=0;_this74.mToYData=0;_this74.mPivotXType=ScaleAnimation.ABSOLUTE;_this74.mPivotYType=ScaleAnimation.ABSOLUTE;_this74.mPivotXValue=0.0;_this74.mPivotYValue=0.0;_this74.mPivotX=0;_this74.mPivotY=0;_this74.mResources=null;_this74.mFromX=fromX;_this74.mToX=toX;_this74.mFromY=fromY;_this74.mToY=toY;_this74.mPivotXValue=pivotXValue;_this74.mPivotXType=pivotXType;_this74.mPivotYValue=pivotYValue;_this74.mPivotYType=pivotYType;_this74.initializePivotPoint();return _this74;}_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 _this75=_possibleConstructorReturn(this,Object.getPrototypeOf(AnimationSet).call(this));_this75.mFlags=0;_this75.mAnimations=new ArrayList();_this75.mTempTransformation=new Transformation();_this75.mLastEnd=0;_this75.setFlag(AnimationSet.PROPERTY_SHARE_INTERPOLATOR_MASK,shareInterpolator);_this75.init();return _this75;}_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 _this76=_possibleConstructorReturn(this,Object.getPrototypeOf(DecorView).call(this,window.mContext));_this76.Window_this=window;_this76.bindElement.classList.add(window.mContext.constructor.name);_this76.setBackgroundColor(android.graphics.Color.WHITE);return _this76;}_createClass(DecorView,[{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 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 _this77=_possibleConstructorReturn(this,Object.getPrototypeOf(Activity).call(this,androidUI));_this77.mWindowAdded=false;_this77.mVisibleFromClient=true;_this77.mResultCode=Activity.RESULT_CANCELED;_this77.mResultData=null;_this77.mWindow=new Window(_this77);_this77.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);_this77.mWindow.setDimAmount(0.7);_this77.mWindow.getAttributes().flags|=WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;_this77.mWindow.setCallback(_this77);return _this77;}_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:'startActivityForResult',value:function startActivityForResult(intent,requestCode,options){if(typeof intent==='string')intent=new Intent(intent);if(requestCode>=0)intent.mRequestCode=requestCode;this.androidUI.mActivityThread.scheduleLaunchActivity(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 _iteratorNormalCompletion55=true;var _didIteratorError55=false;var _iteratorError55=undefined;try{for(var _iterator55=intents[Symbol.iterator](),_step55;!(_iteratorNormalCompletion55=(_step55=_iterator55.next()).done);_iteratorNormalCompletion55=true){var intent=_step55.value;this.startActivity(intent,options);}}catch(err){_didIteratorError55=true;_iteratorError55=err;}finally {try{if(!_iteratorNormalCompletion55&&_iterator55.return){_iterator55.return();}}finally {if(_didIteratorError55){throw _iteratorError55;}}}}},{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);}},{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(){this.mCalled=false;this.onPause();this.mResumed=false;if(!this.mCalled){throw Error('new SuperNotCalledException("Activity " + this.mComponent.toShortString() + " 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$getPrototypeO7;_classCallCheck(this,Application);for(var _len25=arguments.length,args=Array(_len25),_key25=0;_key25<_len25;_key25++){args[_key25]=arguments[_key25];}var _this78=_possibleConstructorReturn(this,(_Object$getPrototypeO7=Object.getPrototypeOf(Application)).call.apply(_Object$getPrototypeO7,[this].concat(args)));_this78.mActivityLifecycleCallbacks=new ArrayList();return _this78;}_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=new Array(VelocityTracker.NUM_PAST);this.pastY=new Array(VelocityTracker.NUM_PAST);this.pastTime=new Array(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 _this79=this;this.mQuickScaleEnabled=scales;if(this.mQuickScaleEnabled&&this.mGestureDetector==null){var gestureListener=function(){var _this=_this79;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=new Array(SplineOverScroller.NB_SAMPLES+1);SplineOverScroller.SPLINE_TIME=new Array(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 _this82=_possibleConstructorReturn(this,Object.getPrototypeOf(ScrollView).call(this,context,bindElement,defStyle));_this82.mLastScroll=0;_this82.mTempRect=new Rect();_this82.mLastMotionY=0;_this82.mIsLayoutDirty=true;_this82.mIsBeingDragged=false;_this82.mFillViewport=false;_this82.mSmoothScrollingEnabled=true;_this82.mMinimumVelocity=0;_this82.mMaximumVelocity=0;_this82.mOverscrollDistance=0;_this82._mOverflingDistance=0;_this82.mActivePointerId=ScrollView.INVALID_POINTER;_this82.initScrollView();_this82._attrBinder.addAttr('fillViewport',function(value){_this82.setFillViewport(_this82._attrBinder.parseBoolean(value));});return _this82;}_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 _get3;if(this.getChildCount()>0){throw new Error("ScrollView can host only one direct child");}for(var _len28=arguments.length,args=Array(_len28),_key28=0;_key28<_len28;_key28++){args[_key28]=arguments[_key28];}return (_get3=_get2(Object.getPrototypeOf(ScrollView.prototype),'addView',this)).call.apply(_get3,[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()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 _this83=_possibleConstructorReturn(this,Object.getPrototypeOf(LinearLayout).call(this,context,bindElement,defStyle));_this83.mBaselineAligned=true;_this83.mBaselineAlignedChildIndex=-1;_this83.mBaselineChildTop=0;_this83.mOrientation=0;_this83.mGravity=Gravity.LEFT|Gravity.TOP;_this83.mTotalLength=0;_this83.mWeightSum=-1;_this83.mUseLargestChild=false;_this83.mDividerWidth=0;_this83.mDividerHeight=0;_this83.mShowDividers=LinearLayout.SHOW_DIVIDER_NONE;_this83.mDividerPadding=0;_this83._attrBinder.addAttr('orientation',function(value){if((value+"").toUpperCase()==='VERTICAL'||LinearLayout.VERTICAL==value){_this83.setOrientation(LinearLayout.VERTICAL);}else if((value+"").toUpperCase()==='HORIZONTAL'||LinearLayout.HORIZONTAL==value){_this83.setOrientation(LinearLayout.HORIZONTAL);}},function(){return _this83.mOrientation;});_this83._attrBinder.addAttr('gravity',function(value){_this83.setGravity(_this83._attrBinder.parseGravity(value,_this83.mGravity));},function(){return _this83.mGravity;});_this83._attrBinder.addAttr('baselineAligned',function(value){if(!_this83._attrBinder.parseBoolean(value))_this83.setBaselineAligned(false);});_this83._attrBinder.addAttr('weightSum',function(value){var weightSum=Number.parseFloat(value);if(!Number.isNaN(weightSum)&&weightSum!=null){_this83.setWeightSum(weightSum);}},function(){return _this83.mWeightSum;});_this83._attrBinder.addAttr('baselineAlignedChildIndex',function(value){value=Number.parseInt(value);if(Number.isSafeInteger(value)){_this83.mBaselineAlignedChildIndex=value;}});_this83._attrBinder.addAttr('measureWithLargestChild',function(value){value=Number.parseInt(value);if(Number.isSafeInteger(value)){_this83.mUseLargestChild=_this83._attrBinder.parseBoolean(value,_this83.mUseLargestChild);}});_this83._attrBinder.addAttr('divider',function(value){_this83.setDividerDrawable(_this83._attrBinder.parseDrawable(value));});_this83._attrBinder.addAttr('showDividers',function(value){var fieldName=('SHOW_DIVIDER_'+value).toUpperCase();if(Number.isInteger(LinearLayout[fieldName])){_this83.setShowDividers(LinearLayout[fieldName]);}});_this83._attrBinder.addAttr('dividerPadding',function(value){value=Number.parseInt(value);if(Number.isInteger(value)){_this83.setDividerPadding(value);}});return _this83;}_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 i=0;i0){var weightSum=this.mWeightSum>0?this.mWeightSum:totalWeight;this.mTotalLength=0;for(var i=0;i0){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childWidthMeasureSpec=LinearLayout.getChildMeasureSpec(widthMeasureSpec,this.mPaddingLeft+this.mPaddingRight+lp.leftMargin+lp.rightMargin,lp.width);if(lp.height!=0||heightMode!=MeasureSpec.EXACTLY){var 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));}childState=LinearLayout.combineMeasuredStates(childState,child.getMeasuredState()&View.MEASURED_STATE_MASK>>View.MEASURED_HEIGHT_STATE_SHIFT);}var margin=lp.leftMargin+lp.rightMargin;var measuredWidth=child.getMeasuredWidth()+margin;maxWidth=Math.max(maxWidth,measuredWidth);var 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;var 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(var i=0;i0){child.measure(MeasureSpec.makeMeasureSpec(child.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 totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+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 i=0;i0){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 i=0;i0){var share=childExtra*delta/weightSum;weightSum-=childExtra;delta-=share;var childHeightMeasureSpec=LinearLayout.getChildMeasureSpec(heightMeasureSpec,this.mPaddingTop+this.mPaddingBottom+lp.topMargin+lp.bottomMargin,lp.height);if(lp.width!=0||widthMode!=MeasureSpec.EXACTLY){var 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 {var totalLength=this.mTotalLength;this.mTotalLength=Math.max(totalLength,totalLength+child.getMeasuredWidth()+lp.leftMargin+lp.rightMargin+this.getNextLocationOffset(child));}var matchHeightLocally=heightMode!=MeasureSpec.EXACTLY&&lp.height==LinearLayout.LayoutParams.MATCH_PARENT;var margin=lp.topMargin+lp.bottomMargin;var 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){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);}}}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 i=0;i0){child.measure(MeasureSpec.makeMeasureSpec(largestChildWidth,MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(child.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;(function(InputType){InputType[InputType["TYPE_NULL"]=0]="TYPE_NULL";InputType[InputType["TYPE_CLASS_TEXT"]=1]="TYPE_CLASS_TEXT";InputType[InputType["TYPE_CLASS_URI"]=2]="TYPE_CLASS_URI";InputType[InputType["TYPE_CLASS_EMAIL_ADDRESS"]=3]="TYPE_CLASS_EMAIL_ADDRESS";InputType[InputType["TYPE_CLASS_NUMBER"]=4]="TYPE_CLASS_NUMBER";InputType[InputType["TYPE_CLASS_PHONE"]=5]="TYPE_CLASS_PHONE";InputType[InputType["TYPE_PASSWORD"]=6]="TYPE_PASSWORD";InputType[InputType["TYPE_TEXT_PASSWORD"]=7]="TYPE_TEXT_PASSWORD";InputType[InputType["TYPE_TEXT_VISIBLE_PASSWORD"]=8]="TYPE_TEXT_VISIBLE_PASSWORD";InputType[InputType["TYPE_NUMBER_PASSWORD"]=9]="TYPE_NUMBER_PASSWORD";InputType[InputType["TYPE_NUMBER_SIGNED"]=10]="TYPE_NUMBER_SIGNED";InputType[InputType["TYPE_NUMBER_DECIMAL"]=11]="TYPE_NUMBER_DECIMAL";})(text.InputType||(text.InputType={}));var InputType=text.InputType;var 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];LimitCode.TYPE_NUMBER_PASSWORD=[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_NUMBER_SIGNED=[KeyEvent.KEYCODE_Minus,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_NUMBER_DECIMAL=[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$getPrototypeO8;_classCallCheck(this,AdapterView);for(var _len31=arguments.length,args=Array(_len31),_key31=0;_key31<_len31;_key31++){args[_key31]=arguments[_key31];}var _this88=_possibleConstructorReturn(this,(_Object$getPrototypeO8=Object.getPrototypeOf(AdapterView)).call.apply(_Object$getPrototypeO8,[this].concat(args)));_this88.mFirstPosition=0;_this88.mSpecificTop=0;_this88.mSyncPosition=0;_this88.mSyncRowId=AdapterView.INVALID_ROW_ID;_this88.mSyncHeight=0;_this88.mNeedSync=false;_this88.mSyncMode=0;_this88.mLayoutHeight=0;_this88.mInLayout=false;_this88.mNextSelectedPosition=AdapterView.INVALID_POSITION;_this88.mNextSelectedRowId=AdapterView.INVALID_ROW_ID;_this88.mSelectedPosition=AdapterView.INVALID_POSITION;_this88.mSelectedRowId=AdapterView.INVALID_ROW_ID;_this88.mItemCount=0;_this88.mOldItemCount=0;_this88.mOldSelectedPosition=AdapterView.INVALID_POSITION;_this88.mOldSelectedRowId=AdapterView.INVALID_ROW_ID;_this88.mBlockLayoutRequests=false;return _this88;}_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 v=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$getPrototypeO9;_classCallCheck(this,Metrics);for(var _len32=arguments.length,args=Array(_len32),_key32=0;_key32<_len32;_key32++){args[_key32]=arguments[_key32];}var _this91=_possibleConstructorReturn(this,(_Object$getPrototypeO9=Object.getPrototypeOf(Metrics)).call.apply(_Object$getPrototypeO9,[this].concat(args)));_this91.width=0;return _this91;}_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=new Array(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 i=this.mColumns-1;i>=0;i--){this.setValueInternal(row,i,values[i]);}}}},{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=new Array(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 i=where+moving-1;i>=where;i--){var destrow=i-where+gapend-moving;for(var j=0;j=valuegap[j]){val+=valuegap[j+columns];}if(destrow>=valuegap[j]){val-=valuegap[j+columns];}values[destrow*columns+j]=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;i--){var destrow=i-where+this.mRowGapStart+this.mRowGapLength-moving;for(var j=0;j=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 _this92=_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));_this92.mLineCount=0;_this92.mTopPadding=0;_this92.mBottomPadding=0;_this92.mColumns=0;_this92.mEllipsizedWidth=0;_this92.mMaximumVisibleLineCount=Integer.MAX_VALUE;_this92.mFontMetricsInt=new Paint.FontMetricsInt();if(source==null){_this92.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;_this92.mLines=new Array(2*_this92.mColumns);_this92.mLineDirections=new Array(2*_this92.mColumns);_this92.mMeasured=MeasuredText.obtain();return _possibleConstructorReturn(_this92);}if(ellipsize!=null){var e=_this92.getText();e.mLayout=_this92;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this92.mEllipsizedWidth=ellipsizedWidth;_this92.mColumns=StaticLayout.COLUMNS_ELLIPSIZE;}else {_this92.mColumns=StaticLayout.COLUMNS_NORMAL;_this92.mEllipsizedWidth=outerwidth;}_this92.mLines=new Array(2*_this92.mColumns);_this92.mLineDirections=new Array(2*_this92.mColumns);_this92.mMaximumVisibleLineCount=maxLines;_this92.mMeasured=MeasuredText.obtain();_this92.generate(source,bufstart,bufend,paint,outerwidth,textDir,spacingmult,spacingadd,includepad,includepad,ellipsizedWidth,ellipsize);_this92.mMeasured=MeasuredText.recycle(_this92.mMeasured);_this92.mFontMetricsInt=null;return _this92;}_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=new Array(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 i=undefined;for(i=0;iavail){break;}sum+=w;}ellipsisStart=i;ellipsisCount=len-i;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 w=widths[right-1+lineStart-widthStart];if(w+rsum>ravail){break;}rsum+=w;}var lavail=avail-ellipsisWidth-rsum;for(left=0;leftlavail){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;}},{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 _this93=_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));_this93.mEllipsizedWidth=0;_this93.mNumberOfBlocks=0;_this93.mIndexFirstChangedBlock=0;_this93.mTopPadding=0;_this93.mBottomPadding=0;_this93.mBase=base;_this93.mDisplay=display;if(ellipsize!=null){_this93.mInts=new PackedIntVector(DynamicLayout.COLUMNS_ELLIPSIZE);_this93.mEllipsizedWidth=ellipsizedWidth;_this93.mEllipsizeAt=ellipsize;}else {_this93.mInts=new PackedIntVector(DynamicLayout.COLUMNS_NORMAL);_this93.mEllipsizedWidth=width;_this93.mEllipsizeAt=null;}_this93.mObjects=new PackedObjectVector(1);_this93.mIncludePad=includepad;if(ellipsize!=null){var e=_this93.getText();e.mLayout=_this93;e.mWidth=ellipsizedWidth;e.mMethod=ellipsize;_this93.mEllipsize=true;}var start=undefined;if(ellipsize!=null){start=new Array(DynamicLayout.COLUMNS_ELLIPSIZE);start[DynamicLayout.ELLIPSIS_START]=DynamicLayout.ELLIPSIS_UNDEFINED;}else {start=new Array(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=new Array(this.mBlockEndLines.length);for(var i=0;ipreviousBlockEndLine){if(this.mNumberOfBlocks==this.mBlockEndLines.length){var blockEndLines=new Array(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 i=firstBlock;i=endLine){lastBlock=i;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=new Array(newSize);var blockIndices=new Array(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 i=newFirstChangedBlock;i>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 _this94=_possibleConstructorReturn(this,Object.getPrototypeOf(ReplacementCharSequence).call(this,source));_this94.mSource=source;_this94.mOriginal=original;_this94.mReplacement=replacement;return _this94;}_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)_this96.setHeight(value);},function(){if(_this96.getMaxHeight()===_this96.getMinimumHeight())return _this96.getMaxHeight();return null;});a.addAttr('minLines',function(value){_this96.setMinLines(a.parseNumber(value,_this96.getMinLines()));},function(){return _this96.getMinLines();});a.addAttr('minHeight',function(value){_this96.setMinHeight(a.parseNumber(value,_this96.getMinHeight()));},function(){return _this96.getMinHeight();});a.addAttr('maxEms',function(value){_this96.setMaxEms(a.parseNumber(value,_this96.getMaxEms()));},function(){return _this96.getMaxEms();});a.addAttr('maxWidth',function(value){_this96.setMaxWidth(a.parseNumber(value,_this96.getMaxWidth()));},function(){return _this96.getMaxWidth();});a.addAttr('ems',function(value){var ems=a.parseNumber(value,null);if(ems!=null)_this96.setEms(ems);},function(){if(_this96.getMinEms()===_this96.getMaxEms())return _this96.getMaxEms();return null;});a.addAttr('width',function(value){value=a.parseNumber(value,-1);if(value>=0)_this96.setWidth(value);},function(){if(_this96.getMinWidth()===_this96.getMaxWidth())return _this96.getMinWidth();return null;});a.addAttr('minEms',function(value){_this96.setMinEms(a.parseNumber(value,_this96.getMinEms()));},function(){return _this96.getMinEms();});a.addAttr('minWidth',function(value){_this96.setMinWidth(a.parseNumber(value,_this96.getMinWidth()));},function(){return _this96.getMinWidth();});a.addAttr('gravity',function(value){_this96.setGravity(a.parseGravity(value,_this96.mGravity));},function(){return _this96.mGravity;});a.addAttr('hint',function(value){_this96.setHint(a.parseString(value));},function(){return _this96.getHint();});a.addAttr('text',function(value){_this96.setText(a.parseString(value));},function(){return _this96.getText();});a.addAttr('scrollHorizontally',function(value){_this96.setHorizontallyScrolling(a.parseBoolean(value,false));});a.addAttr('singleLine',function(value){_this96.setSingleLine(a.parseBoolean(value,false));});a.addAttr('ellipsize',function(value){var ellipsize=TextUtils.TruncateAt[(value+'').toUpperCase()];if(ellipsize)_this96.setEllipsize(ellipsize);});a.addAttr('marqueeRepeatLimit',function(value){var marqueeRepeatLimit=a.parseNumber(value,-1);if(marqueeRepeatLimit>=0)_this96.setMarqueeRepeatLimit(marqueeRepeatLimit);});a.addAttr('includeFontPadding',function(value){_this96.setIncludeFontPadding(a.parseBoolean(value,false));});a.addAttr('enabled',function(value){_this96.setEnabled(a.parseBoolean(value,_this96.isEnabled()));},function(){return _this96.isEnabled();});a.addAttr('lineSpacingExtra',function(value){_this96.setLineSpacing(a.parseNumber(value,_this96.mSpacingAdd),_this96.mSpacingMult);},function(){return _this96.mSpacingAdd;});a.addAttr('lineSpacingMultiplier',function(value){_this96.setLineSpacing(_this96.mSpacingAdd,a.parseNumber(value,_this96.mSpacingMult));},function(){return _this96.mSpacingMult;});_this96.setTextSize(14);if(defStyle)_this96.applyDefaultAttributes(defStyle);_this96.bindElement.innerHTML=_this96.bindElement.innerHTML.trim();var text=_this96.mText||_this96.bindElement.innerText;_this96.bindElement.innerHTML='';_this96.setText(text,_this96.mBufferType);return _this96;}_createClass(TextView,[{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 _len33=arguments.length,args=Array(_len33),_key33=0;_key33<_len33;_key33++){args[_key33]=arguments[_key33];}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 _vspace=bottom-top-compoundPaddingBottom-compoundPaddingTop;var 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();}}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();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 dx=Math.floor(this.mMarquee.getGhostOffset());canvas.translate(isLayoutRtl?-dx:dx,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 _this97=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=_this97;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];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 _this100=_possibleConstructorReturn(this,Object.getPrototypeOf(AbsListView).call(this,context,bindElement,defStyle));_this100.mChoiceMode=AbsListView.CHOICE_MODE_NONE;_this100.mCheckedItemCount=0;_this100.mDeferNotifyDataSetChanged=false;_this100.mDrawSelectorOnTop=false;_this100.mSelectorPosition=AbsListView.INVALID_POSITION;_this100.mSelectorRect=new Rect();_this100.mRecycler=new AbsListView.RecycleBin(_this100);_this100.mSelectionLeftPadding=0;_this100.mSelectionTopPadding=0;_this100.mSelectionRightPadding=0;_this100.mSelectionBottomPadding=0;_this100.mListPadding=new Rect();_this100.mWidthMeasureSpec=0;_this100.mMotionPosition=0;_this100.mMotionViewOriginalTop=0;_this100.mMotionViewNewTop=0;_this100.mMotionX=0;_this100.mMotionY=0;_this100.mTouchMode=AbsListView.TOUCH_MODE_REST;_this100.mLastY=0;_this100.mMotionCorrection=0;_this100.mSelectedTop=0;_this100.mSmoothScrollbarEnabled=true;_this100.mResurrectToPosition=AbsListView.INVALID_POSITION;_this100.mOverscrollMax=0;_this100.mLastTouchMode=AbsListView.TOUCH_MODE_UNKNOWN;_this100.mScrollProfilingStarted=false;_this100.mFlingProfilingStarted=false;_this100.mTranscriptMode=0;_this100.mCacheColorHint=0;_this100.mLastScrollState=AbsListView.OnScrollListener.SCROLL_STATE_IDLE;_this100.mDensityScale=0;_this100.mMinimumVelocity=0;_this100.mMaximumVelocity=0;_this100.mVelocityScale=1.0;_this100.mIsScrap=new Array(1);_this100.mActivePointerId=AbsListView.INVALID_POINTER;_this100.mOverscrollDistance=0;_this100._mOverflingDistance=0;_this100.mFirstPositionDistanceGuess=0;_this100.mLastPositionDistanceGuess=0;_this100.mDirection=0;_this100.mGlowPaddingLeft=0;_this100.mGlowPaddingRight=0;_this100.mLastHandledItemCount=0;_this100.initAbsListView();_this100.setVerticalScrollBarEnabled(true);_this100.initializeScrollbars();_this100._attrBinder.addAttr('listSelector',function(value){var d=_this100._attrBinder.parseDrawable(value);if(d)_this100.setSelector(d);});_this100._attrBinder.addAttr('drawSelectorOnTop',function(value){_this100.mDrawSelectorOnTop=_this100._attrBinder.parseBoolean(value,false);});_this100._attrBinder.addAttr('stackFromBottom',function(value){_this100.setStackFromBottom(_this100._attrBinder.parseBoolean(value,false));});_this100._attrBinder.addAttr('scrollingCache',function(value){_this100.setScrollingCacheEnabled(_this100._attrBinder.parseBoolean(value,true));});_this100._attrBinder.addAttr('transcriptMode',function(value){var transcriptMode=_this100._attrBinder.parseNumber(value,AbsListView.TRANSCRIPT_MODE_DISABLED);_this100.setTranscriptMode(transcriptMode);});_this100._attrBinder.addAttr('cacheColorHint',function(value){var color=_this100._attrBinder.parseColor(value,0);_this100.setCacheColorHint(color);});_this100._attrBinder.addAttr('fastScrollEnabled',function(value){var enableFastScroll=_this100._attrBinder.parseBoolean(value,false);_this100.setFastScrollEnabled(enableFastScroll);});_this100._attrBinder.addAttr('fastScrollAlwaysVisible',function(value){var fastScrollAlwaysVisible=_this100._attrBinder.parseBoolean(value,false);_this100.setFastScrollAlwaysVisible(fastScrollAlwaysVisible);});_this100._attrBinder.addAttr('smoothScrollbar',function(value){var smoothScrollbar=_this100._attrBinder.parseBoolean(value,true);_this100.setSmoothScrollbarEnabled(smoothScrollbar);});_this100._attrBinder.addAttr('choiceMode',function(value){_this100.setChoiceMode(_this100._attrBinder.parseNumber(value,AbsListView.CHOICE_MODE_NONE));});return _this100;}_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 child=this.getChildAt(count-1);canScrollDown=child.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 _len34=arguments.length,args=Array(_len34),_key34=0;_key34<_len34;_key34++){args[_key34]=arguments[_key34];}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 x=Math.floor(ev.getX(index));var y=Math.floor(ev.getY(index));this.mMotionCorrection=0;this.mActivePointerId=id;this.mMotionX=x;this.mMotionY=y;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;}}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 _this101=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;i--){var child=this.getChildAt(i);if(child.getTop()<=bottom){break;}else {start=i;count++;var position=firstPosition+i;if(position>=headerViewsCount&&position0){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 i=childCount-1;i>=0;i--){var v=this.getChildAt(i);var top=v.getTop();var bottom=v.getBottom();if(i==childCount-1){selectedTop=top;if(firstPosition+childCountchildrenBottom){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();}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 _this106=this;_classCallCheck(this,FlingRunnable);this.mLastFlingY=0;this.mCheckFlywheel=function(){var _this=_this106;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 _this107=this;this.stop();if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this107;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 _this108=this;this.stop();if(boundPosition==AbsListView.INVALID_POSITION){this.start(position);return;}if(this._AbsListView_this.mDataChanged){this._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this108;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(boundTravel0){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 _this109=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;_this109._AbsListView_this.mPositionScrollAfterLayout=function(){var _this=_this109;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(nextPosextraScroll){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 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:{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 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 {var bottom=listHeight-extraScroll;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 lastPos=firstPos+childCount-1;var viewTravelCount=0;if(positionlastPos){viewTravelCount=position-lastPos;}var screenTravelCount=viewTravelCount/childCount;var modifier=Math.min(Math.abs(screenTravelCount),1.);if(positionlastPos){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 distance=targetTop-this.mOffsetFromTop;var duration=Math.floor(this.mScrollDuration*(Math.abs(distance)/this._AbsListView_this.getHeight()));this._AbsListView_this.smoothScrollBy(distance,duration,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 _this110=_possibleConstructorReturn(this,Object.getPrototypeOf(AdapterDataSetObserver).call(this,arg));_this110._AbsListView_this=arg;return _this110;}_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(){_classCallCheck(this,LayoutParams);var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this));_this111.viewType=0;_this111.scrappedFromPosition=0;_this111.itemId=-1;if(arguments.length===1){var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,arguments.length<=0?undefined:arguments[0]));}else if(arguments.length===2){var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]));}else if(arguments.length===3){var _this111=_possibleConstructorReturn(this,Object.getPrototypeOf(LayoutParams).call(this,arguments.length<=0?undefined:arguments[0],arguments.length<=1?undefined:arguments[1]));_this111.viewType=arguments.length<=2?undefined:arguments[2];}return _possibleConstructorReturn(_this111);}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 _this113=_possibleConstructorReturn(this,Object.getPrototypeOf(ListView).call(this,context,bindElement,null));_this113.mHeaderViewInfos=new ArrayList();_this113.mFooterViewInfos=new ArrayList();_this113.mDividerHeight=0;_this113.mIsCacheColorOpaque=false;_this113.mDividerIsOpaque=false;_this113.mHeaderDividersEnabled=true;_this113.mFooterDividersEnabled=true;_this113.mAreAllItemsSelectable=true;_this113.mItemsCanFocus=false;_this113.mTempRect=new Rect();_this113.mArrowScrollFocusResult=new ListView.ArrowScrollFocusResult();_this113._attrBinder.addAttr('divider',function(value){var divider=_this113._attrBinder.parseDrawable(value);if(divider)_this113.setDivider(divider);});_this113._attrBinder.addAttr('overScrollHeader',function(value){var header=_this113._attrBinder.parseDrawable(value);if(header)_this113.setOverscrollHeader(header);});_this113._attrBinder.addAttr('overScrollFooter',function(value){var footer=_this113._attrBinder.parseDrawable(value);if(footer)_this113.setOverscrollFooter(footer);});_this113._attrBinder.addAttr('dividerHeight',function(value){var dividerHeight=_this113._attrBinder.parseNumber(value,-1);if(dividerHeight>=0){_this113.setDividerHeight(dividerHeight);}});_this113._attrBinder.addAttr('headerDividersEnabled',function(value){_this113.setHeaderDividersEnabled(_this113._attrBinder.parseBoolean(value,true));});_this113._attrBinder.addAttr('footerDividersEnabled',function(value){_this113.setFooterDividersEnabled(_this113._attrBinder.parseBoolean(value,true));});if(defStyle)_this113.applyDefaultAttributes(defStyle);return _this113;}_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;i--){var v=this.getChildAt(i);if(y>=v.getTop()){return this.mFirstPosition+i;}}}}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 childCount=this.getChildCount();if(childCount>0){this.correctTooLow(childCount);}}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(position);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 i=start;i=footerLimit;if((headerDividers||!isHeader)&&(footerDividers||!isFooter)){var child=this.getChildAt(i);top=child.getTop();if(drawDividers&&top>effectivePaddingTop){var isFirstItem=i==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,i-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 _len35=arguments.length,args=Array(_len35),_key35=0;_key35<_len35;_key35++){args[_key35]=arguments[_key35];}return (_get4=_get2(Object.getPrototypeOf(HorizontalScrollView.prototype),'addView',this)).call.apply(_get4,[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 x=Math.floor(ev.getX());if(!this.inChild(Math.floor(x),Math.floor(ev.getY()))){this.mIsBeingDragged=false;this.recycleVelocityTracker();break;}this.mLastMotionX=x;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 parent=this.getParent();if(parent!=null){parent.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_HSCROLL);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 scrollDelta=maxJump;if(direction==View.FOCUS_LEFT&&this.getScrollX()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 _this115=_possibleConstructorReturn(this,Object.getPrototypeOf(RelativeLayout).call(this,context,bindElement,defStyle));_this115.mBaselineView=null;_this115.mGravity=Gravity.START|Gravity.TOP;_this115.mContentBounds=new Rect();_this115.mSelfBounds=new Rect();_this115.mIgnoreGravity=View.NO_ID;_this115.mGraph=new RelativeLayout.DependencyGraph();_this115.mAllowBrokenMeasureSpecs=false;_this115.mMeasureVerticalWithPaddingMargin=false;_this115._attrBinder.addAttr('ignoreGravity',function(value){_this115.setIgnoreGravity(value);});_this115._attrBinder.addAttr('gravity',function(value){_this115.setGravity(_this115._attrBinder.parseGravity(value,_this115.mGravity));});_this115.queryCompatibilityModes();return _this115;}_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 i=0;i=0){height=Math.max(height,this.mLayoutParams.height);}height=Math.max(height,this.getSuggestedMinimumHeight());height=RelativeLayout.resolveSize(height,heightMeasureSpec);if(offsetVerticalAxis){for(var i=0;i=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){_this119.setForceDisableDrawText(true);}};this.mSingleLineInputElement.oninput=function(){return _this119.onInputValueChange();};}if(this.inputElement===this.mSingleLineInputElement)return;if(this.inputElement&&this.inputElement.parentElement){this.bindElement.removeChild(this.inputElement);this.bindElement.appendChild(this.mSingleLineInputElement);}this.inputElement=this.mSingleLineInputElement;}},{key:'switchToMultilineInputElement',value:function switchToMultilineInputElement(){var _this120=this;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.mMultilineInputElement.onblur=function(){_this120.mMultilineInputElement.style.opacity='0';_this120.setForceDisableDrawText(false);};this.mMultilineInputElement.onfocus=function(){_this120.mMultilineInputElement.style.opacity='1';if(_this120.getText().length>0){_this120.setForceDisableDrawText(true);}};this.mMultilineInputElement.oninput=function(){return _this120.onInputValueChange();};}if(this.inputElement===this.mMultilineInputElement)return;if(this.inputElement&&this.inputElement.parentElement){this.bindElement.removeChild(this.inputElement);this.bindElement.appendChild(this.mMultilineInputElement);}this.inputElement=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:'performClick',value:function performClick(event){this.tryShowInputElement();return _get2(Object.getPrototypeOf(EditText.prototype),'performClick',this).call(this,event);}},{key:'tryDismissInputElement',value:function tryDismissInputElement(){try{if(this.inputElement.parentNode)this.bindElement.removeChild(this.inputElement);}catch(e){}this.setForceDisableDrawText(false);}},{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:'isInputElementShowed',value:function isInputElementShowed(){return this.inputElement.parentElement!=null;}},{key:'setForceDisableDrawText',value:function setForceDisableDrawText(disable){if(this.mForceDisableDraw==disable)return;this.mForceDisableDraw=disable;if(disable){this.mTextPaint.setAlpha(0);}else {this.mTextPaint.setAlpha(255);}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){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 _get2(Object.getPrototypeOf(EditText.prototype),'onTouchEvent',this).call(this,event)||this.isInputElementShowed();}},{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.filterKeyCode(keyCode);}return false;}},{key:'filterKeyCode',value:function filterKeyCode(keyCode){switch(this.mInputType){case InputType.TYPE_NUMBER_SIGNED:if(keyCode===android.view.KeyEvent.KEYCODE_Minus&&this.getText().length>0)return true;return InputType.LimitCode.TYPE_NUMBER_SIGNED.indexOf(keyCode)===-1;case InputType.TYPE_NUMBER_DECIMAL:return InputType.LimitCode.TYPE_NUMBER_DECIMAL.indexOf(keyCode)===-1;case InputType.TYPE_CLASS_NUMBER:return InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode)===-1;case InputType.TYPE_NUMBER_PASSWORD:return InputType.LimitCode.TYPE_NUMBER_PASSWORD.indexOf(keyCode)===-1;case InputType.TYPE_CLASS_PHONE:return InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode)===-1;}return false;}},{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;}}}},{key:'onKeyDown',value:function onKeyDown(keyCode,event){this.checkFilterKeyEventToDom(event);return _get2(Object.getPrototypeOf(EditText.prototype),'onKeyDown',this).call(this,keyCode,event)||true;}},{key:'onKeyUp',value:function onKeyUp(keyCode,event){this.checkFilterKeyEventToDom(event);return _get2(Object.getPrototypeOf(EditText.prototype),'onKeyUp',this).call(this,keyCode,event)||true;}},{key:'requestSyncBoundToElement',value:function requestSyncBoundToElement(){var immediately=arguments.length<=0||arguments[0]===undefined?false:arguments[0];if(this.inputElement.parentNode&&this.inputElement.style.opacity!='0'){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:'setInputType',value:function setInputType(type){this.mInputType=type;this.inputElement.style['webkitTextSecurity']='';this.setTransformationMethod(null);switch(type){case InputType.TYPE_NULL:this.switchToMultilineInputElement();this.setSingleLine(false);break;case InputType.TYPE_CLASS_TEXT:this.switchToMultilineInputElement();this.setSingleLine(false);break;case InputType.TYPE_CLASS_URI:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','url');this.setSingleLine(true);break;case InputType.TYPE_CLASS_EMAIL_ADDRESS:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','email');this.setSingleLine(true);break;case InputType.TYPE_NUMBER_SIGNED:case InputType.TYPE_NUMBER_DECIMAL:case InputType.TYPE_CLASS_NUMBER:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','number');this.setSingleLine(true);break;case InputType.TYPE_NUMBER_PASSWORD:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','number');this.inputElement.style['webkitTextSecurity']='disc';this.setSingleLine(true);this.setTransformationMethod(PasswordTransformationMethod.getInstance());break;case InputType.TYPE_CLASS_PHONE:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','tel');this.setSingleLine(true);break;case InputType.TYPE_TEXT_PASSWORD:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','password');this.setSingleLine(true);this.setTransformationMethod(PasswordTransformationMethod.getInstance());break;case InputType.TYPE_TEXT_VISIBLE_PASSWORD:this.switchToSingleLineInputElement();this.inputElement.setAttribute('type','email');this.setSingleLine(true);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:'onAttachedToWindow',value:function onAttachedToWindow(){this.getContext().androidUI.showDebugLayout();return _get2(Object.getPrototypeOf(EditText.prototype),'onAttachedToWindow',this).call(this);}},{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 ImageView=function(_View2){_inherits(ImageView,_View2);function ImageView(context,bindElement,defStyle){_classCallCheck(this,ImageView);var _this121=_possibleConstructorReturn(this,Object.getPrototypeOf(ImageView).call(this,context,bindElement,defStyle));_this121.mHaveFrame=false;_this121.mAdjustViewBounds=false;_this121.mMaxWidth=Integer.MAX_VALUE;_this121.mMaxHeight=Integer.MAX_VALUE;_this121.mAlpha=255;_this121.mViewAlphaScale=256;_this121.mColorMod=false;_this121.mDrawable=null;_this121.mState=null;_this121.mMergeState=false;_this121.mLevel=0;_this121.mDrawableWidth=0;_this121.mDrawableHeight=0;_this121.mDrawMatrix=null;_this121.mTempSrc=new RectF();_this121.mTempDst=new RectF();_this121.mBaseline=-1;_this121.mBaselineAlignBottom=false;_this121.mAdjustViewBoundsCompat=false;_this121.initImageView();var a=_this121._attrBinder;a.addAttr('src',function(value){var d=a.parseDrawable(value);if(d)_this121.setImageDrawable(d);else _this121.setImageURI(value);},function(){return _this121.mDrawable;});a.addAttr('baselineAlignBottom',function(value){_this121.setBaselineAlignBottom(a.parseBoolean(value,_this121.mBaselineAlignBottom));});a.addAttr('baseline',function(value){_this121.setBaseline(a.parseNumber(value,_this121.mBaseline));},function(){return _this121.mBaseline;});a.addAttr('adjustViewBounds',function(value){_this121.setAdjustViewBounds(a.parseBoolean(value,false));});a.addAttr('maxWidth',function(value){var baseValue=_this121.getParent() instanceof View?_this121.getParent().getWidth():0;_this121.setMaxWidth(a.parseNumber(value,_this121.mMaxWidth,baseValue));},function(){return _this121.mMaxWidth;});a.addAttr('maxHeight',function(value){var baseValue=_this121.getParent() instanceof View?_this121.getParent().getHeight():0;_this121.setMaxHeight(a.parseNumber(value,_this121.mMaxHeight,baseValue));},function(){return _this121.mMaxHeight;});a.addAttr('scaleType',function(value){_this121.setScaleType(ImageView.parseScaleType(value,_this121.mScaleType));},function(){return _this121.mScaleType.toString();});a.addAttr('drawableAlpha',function(value){_this121.setAlpha(a.parseNumber(value,_this121.mAlpha));},function(){return _this121.mAlpha;});a.addAttr('cropToPadding',function(value){_this121.setCropToPadding(a.parseBoolean(value,false));});return _this121;}_createClass(ImageView,[{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){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;this.requestLayout();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 scale=undefined;var dx=undefined;var dy=undefined;if(dwidth<=vwidth&&dheight<=vheight){scale=1.0;}else {scale=Math.min(vwidth/dwidth,vheight/dheight);}dx=Math.floor((vwidth-dwidth*scale)*0.5+0.5);dy=Math.floor((vheight-dheight*scale)*0.5+0.5);this.mDrawMatrix.setScale(scale,scale);this.mDrawMatrix.postTranslate(dx,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){this.setAlpha(alpha);}},{key:'setAlpha',value:function setAlpha(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 _this123=_possibleConstructorReturn(this,Object.getPrototypeOf(GridView).call(this,context,bindElement,null));_this123.mNumColumns=GridView.AUTO_FIT;_this123.mHorizontalSpacing=0;_this123.mRequestedHorizontalSpacing=0;_this123.mVerticalSpacing=0;_this123.mStretchMode=GridView.STRETCH_COLUMN_WIDTH;_this123.mColumnWidth=0;_this123.mRequestedColumnWidth=0;_this123.mRequestedNumColumns=0;_this123.mReferenceView=null;_this123.mReferenceViewInSelectedRow=null;_this123.mGravity=Gravity.LEFT;_this123.mTempRect=new Rect();_this123._attrBinder.addAttr('horizontalSpacing',function(value){_this123.setHorizontalSpacing(_this123._attrBinder.parseNumber(value,0));});_this123._attrBinder.addAttr('verticalSpacing',function(value){_this123.setVerticalSpacing(_this123._attrBinder.parseNumber(value,0));});_this123._attrBinder.addAttr('stretchMode',function(value){var strechMode=_this123._attrBinder.parseNumber(value,-1);if(strechMode>=0){_this123.setStretchMode(strechMode);}});_this123._attrBinder.addAttr('columnWidth',function(value){var columnWidth=_this123._attrBinder.parseNumber(value,-1);if(columnWidth>0){_this123.setColumnWidth(columnWidth);}});_this123._attrBinder.addAttr('numColumns',function(value){_this123.setNumColumns(_this123._attrBinder.parseNumber(value,1));});_this123._attrBinder.addAttr('gravity',function(value){_this123.setNumColumns(_this123._attrBinder.parseNumber(value,1));});if(defStyle)_this123.applyDefaultAttributes(defStyle);return _this123;}_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 startOffset=count>0?this.getChildAt(0).getTop()-verticalSpacing:this.getHeight()-paddingBottom;var position=this.mFirstPosition;if(!this.mStackFromBottom){position-=numColumns;}else {position--;}this.fillUp(position,startOffset);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;i-=numColumns){if(y>=this.getChildAt(i).getTop()){return this.mFirstPosition+i;}}}}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 childCount=this.getChildCount();if(childCount>0){this.correctTooLow(numColumns,verticalSpacing,childCount);}}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 _this124=_possibleConstructorReturn(this,Object.getPrototypeOf(NumberPicker).call(this,context,bindElement,defStyle));_this124.SELECTOR_WHEEL_ITEM_COUNT=3;_this124.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this124.SELECTOR_WHEEL_ITEM_COUNT/2);_this124.mSelectionDividersDistance=0;_this124.mMinHeight_=NumberPicker.SIZE_UNSPECIFIED;_this124.mMaxHeight=NumberPicker.SIZE_UNSPECIFIED;_this124.mMinWidth_=NumberPicker.SIZE_UNSPECIFIED;_this124.mMaxWidth=NumberPicker.SIZE_UNSPECIFIED;_this124.mTextSize=0;_this124.mSelectorTextGapHeight=0;_this124.mMinValue=0;_this124.mMaxValue=0;_this124.mValue=0;_this124.mLongPressUpdateInterval=NumberPicker.DEFAULT_LONG_PRESS_UPDATE_INTERVAL;_this124.mSelectorIndexToStringCache=new SparseArray();_this124.mSelectorElementHeight=0;_this124.mInitialScrollOffset=Integer.MIN_VALUE;_this124.mCurrentScrollOffset=0;_this124.mPreviousScrollerY=0;_this124.mLastDownEventY=0;_this124.mLastDownEventTime=0;_this124.mLastDownOrMoveEventY=0;_this124.mMinimumFlingVelocity=0;_this124.mMaximumFlingVelocity=0;_this124.mSolidColor=0;_this124.mSelectionDividerHeight=0;_this124.mScrollState=NumberPicker.OnScrollListener.SCROLL_STATE_IDLE;_this124.mTopSelectionDividerTop=0;_this124.mBottomSelectionDividerBottom=0;_this124.mLastHoveredChildVirtualViewId=0;_this124.mLastHandledDownDpadKeyCode=-1;_this124.mHasSelectorWheel=true;_this124._attrBinder.addAttr('solidColor',function(value){_this124.mSolidColor=_this124._attrBinder.parseColor(value)||0;});_this124._attrBinder.addAttr('selectionDivider',function(value){_this124.mSelectionDivider=_this124._attrBinder.parseDrawable(value);});_this124._attrBinder.addAttr('selectionDividerHeight',function(value){var defSelectionDividerHeight=NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDER_HEIGHT*_this124.getResources().getDisplayMetrics().density;_this124.mSelectionDividerHeight=_this124._attrBinder.parseNumber(value,defSelectionDividerHeight);});_this124._attrBinder.addAttr('selectionDividersDistance',function(value){var defSelectionDividerDistance=NumberPicker.UNSCALED_DEFAULT_SELECTION_DIVIDERS_DISTANCE*_this124.getResources().getDisplayMetrics().density;_this124.mSelectionDividersDistance=_this124._attrBinder.parseNumber(value,defSelectionDividerDistance);});_this124._attrBinder.addAttr('internalMinHeight',function(value){_this124.mMinHeight_=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMaxHeight',function(value){_this124.mMaxHeight=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMinWidth',function(value){_this124.mMinWidth_=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMaxWidth',function(value){_this124.mMaxWidth=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('internalMaxWidth',function(value){_this124.mMaxWidth=_this124._attrBinder.parseNumber(value,NumberPicker.SIZE_UNSPECIFIED);});_this124._attrBinder.addAttr('virtualButtonPressedDrawable',function(value){_this124.mVirtualButtonPressedDrawable=_this124._attrBinder.parseDrawable(value);});_this124._attrBinder.addAttr('textSize',function(value){_this124.mTextSize=_this124._attrBinder.parseNumber(value,_this124.mTextSize);_this124.mSelectorWheelPaint.setTextSize(_this124.mTextSize);});_this124._attrBinder.addAttr('textColor',function(value){_this124.mSelectorWheelPaint.setColor(_this124._attrBinder.parseColor(value,_this124.mSelectorWheelPaint.getColor()));});_this124._attrBinder.addAttr('minValue',function(value){_this124.setMinValue(_this124._attrBinder.parseNumber(value,_this124.mMinValue));});_this124._attrBinder.addAttr('maxValue',function(value){_this124.setMaxValue(_this124._attrBinder.parseNumber(value,_this124.mMaxValue));});_this124._attrBinder.addAttr('itemCount',function(value){_this124.SELECTOR_WHEEL_ITEM_COUNT=_this124._attrBinder.parseNumber(value,_this124.SELECTOR_WHEEL_ITEM_COUNT);_this124.SELECTOR_MIDDLE_ITEM_INDEX=Math.floor(_this124.SELECTOR_WHEEL_ITEM_COUNT/2);_this124.mSelectorIndices=new Array(_this124.SELECTOR_WHEEL_ITEM_COUNT);});_this124.mTextSize=Math.floor(16*_this124.getResources().getDisplayMetrics().density);var paint=new Paint();paint.setAntiAlias(true);paint.setTextAlign(Align.CENTER);paint.setTextSize(_this124.mTextSize);paint.setColor(Color.DKGRAY);_this124.mSelectorWheelPaint=paint;_this124.mSelectorIndices=new Array(_this124.SELECTOR_WHEEL_ITEM_COUNT);_this124.applyDefaultAttributes(R.attr.numberPickerStyle);if(_this124.mMinHeight_!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMaxHeight!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMinHeight_>_this124.mMaxHeight){throw Error('new IllegalArgumentException("minHeight > maxHeight")');}if(_this124.mMinWidth_!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMaxWidth!=NumberPicker.SIZE_UNSPECIFIED&&_this124.mMinWidth_>_this124.mMaxWidth){throw Error('new IllegalArgumentException("minWidth > maxWidth")');}_this124.mComputeMaxWidth=_this124.mMaxWidth==NumberPicker.SIZE_UNSPECIFIED;_this124.mPressedStateHelper=new NumberPicker.PressedStateHelper(_this124);_this124.setWillNotDraw(!_this124.mHasSelectorWheel);var configuration=ViewConfiguration.get();_this124.mMinimumFlingVelocity=configuration.getScaledMinimumFlingVelocity();_this124.mMaximumFlingVelocity=configuration.getScaledMaximumFlingVelocity()/NumberPicker.SELECTOR_MAX_FLING_VELOCITY_ADJUSTMENT;_this124.mFlingScroller=new OverScroller(null,true);_this124.mAdjustScroller=new OverScroller(new DecelerateInterpolator(2.5));_this124.updateInputTextView();return _this124;}_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 i=0;imaxTextWidth){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_6){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 _this125=_possibleConstructorReturn(this,Object.getPrototypeOf(ClipDrawable).call(this));_this125.mTmpRect=new Rect();if(arguments.length<=1){_this125.mClipState=new ClipDrawable.ClipState(arguments.length<=0?undefined:arguments[0],_this125);}else {_this125.mClipState=new ClipDrawable.ClipState(null,_this125);var _drawable=arguments.length<=0?undefined:arguments[0];var gravity=arguments.length<=1?undefined:arguments[1];var orientation=arguments.length<=2?undefined:arguments[2];_this125.mClipState.mDrawable=_drawable;_this125.mClipState.mGravity=gravity;_this125.mClipState.mOrientation=orientation;if(_drawable!=null){_drawable.setCallback(_this125);}}return _this125;}_createClass(ClipDrawable,[{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_6.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_6.ClipDrawable||(drawable_6.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 _this126=_possibleConstructorReturn(this,Object.getPrototypeOf(ProgressBar).call(this,context,bindElement,null));_this126.mMinWidth=0;_this126.mMaxWidth=0;_this126.mMinHeight=0;_this126.mMaxHeight=0;_this126.mProgress=0;_this126.mSecondaryProgress=0;_this126.mMax=0;_this126.mBehavior=0;_this126.mDuration=0;_this126.mMirrorForRtl=false;_this126.mRefreshData=new ArrayList();_this126.initProgressBar();var a=_this126._attrBinder;a.addAttr('progressDrawable',function(value){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=_this126.tileify(drawable,false);_this126.setProgressDrawable(drawable);}},function(){return _this126.mProgressDrawable;});a.addAttr('indeterminateDuration',function(value){_this126.mDuration=Math.floor(a.parseNumber(value,_this126.mDuration));},function(){return _this126.mDuration;});a.addAttr('minWidth',function(value){_this126.mMinWidth=Math.floor(a.parseNumber(value,_this126.mMinWidth));},function(){return _this126.mMinWidth;});a.addAttr('maxWidth',function(value){_this126.mMaxWidth=Math.floor(a.parseNumber(value,_this126.mMaxWidth));},function(){return _this126.mMaxWidth;});a.addAttr('minHeight',function(value){_this126.mMinHeight=Math.floor(a.parseNumber(value,_this126.mMinHeight));},function(){return _this126.mMinHeight;});a.addAttr('maxHeight',function(value){_this126.mMaxHeight=Math.floor(a.parseNumber(value,_this126.mMaxHeight));},function(){return _this126.mMaxHeight;});a.addAttr('indeterminateBehavior',function(value){if(value+''.toLowerCase()=='cycle'){_this126.mBehavior=Animation.REVERSE;}else {_this126.mBehavior=Animation.RESTART;}});a.addAttr('interpolator',function(value){});a.addAttr('max',function(value){_this126.setMax(a.parseNumber(value,_this126.mMax));},function(){return _this126.mMax;});a.addAttr('progress',function(value){_this126.setProgress(a.parseNumber(value,_this126.mProgress));},function(){return _this126.mProgress;});a.addAttr('secondaryProgress',function(value){_this126.setSecondaryProgress(a.parseNumber(value,_this126.mSecondaryProgress));},function(){return _this126.mSecondaryProgress;});a.addAttr('indeterminateDrawable',function(value){var drawable=a.parseDrawable(value);if(drawable!=null){drawable=_this126.tileifyIndeterminate(drawable);_this126.setIndeterminateDrawable(drawable);}},function(){return _this126.mIndeterminateDrawable;});a.addAttr('indeterminateOnly',function(value){_this126.mOnlyIndeterminate=a.parseBoolean(value,_this126.mOnlyIndeterminate);_this126.setIndeterminate(_this126.mOnlyIndeterminate||_this126.mIndeterminate);});a.addAttr('indeterminate',function(value){_this126.setIndeterminate(_this126.mOnlyIndeterminate||a.parseBoolean(value,_this126.mIndeterminate));});_this126.mNoInvalidate=true;if(defStyle)_this126.applyDefaultAttributes(defStyle);_this126.mNoInvalidate=false;_this126.setIndeterminate(_this126.mOnlyIndeterminate||_this126.mIndeterminate);return _this126;}_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 _this135=_possibleConstructorReturn(this,Object.getPrototypeOf(RatingBar).call(this,context,bindElement,null));_this135.mNumStars=5;_this135.mProgressOnStartTracking=0;var a=_this135._attrBinder;a.addAttr('numStars',function(value){_this135.setNumStars(a.parseNumber(value,_this135.mNumStars));},function(){return _this135.mNumStars;});a.addAttr('isIndicator',function(value){_this135.setIsIndicator(a.parseBoolean(value,!_this135.mIsUserSeekable));},function(){return !_this135.mIsUserSeekable;});a.addAttr('stepSize',function(value){_this135.setStepSize(a.parseNumber(value,0.5));},function(){return _this135.getStepSize();});a.addAttr('rating',function(value){_this135.setRating(a.parseNumber(value,_this135.getRating()));},function(){return _this135.getRating();});if(defStyle)_this135.applyDefaultAttributes(defStyle);_this135.mTouchProgressOffset=1.1;return _this135;}_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 _this136=_possibleConstructorReturn(this,Object.getPrototypeOf(ExpandableListConnector).call(this));_this136.mTotalExpChildrenCount=0;_this136.mMaxExpGroupCount=Integer.MAX_VALUE;_this136.mDataSetObserver=new ExpandableListConnector.MyDataSetObserver(_this136);_this136.mExpGroupMetadataList=new ArrayList();_this136.setExpandableListAdapter(expandableListAdapter);return _this136;}_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 i=0;i=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 _this137=_possibleConstructorReturn(this,Object.getPrototypeOf(MyDataSetObserver).call(this));_this137._ExpandableListConnector_this=arg;return _this137;}_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 _this138=_possibleConstructorReturn(this,Object.getPrototypeOf(ExpandableListView).call(this,context,bindElement,null));_this138.mIndicatorLeft=0;_this138.mIndicatorRight=0;_this138.mIndicatorStart=0;_this138.mIndicatorEnd=0;_this138.mChildIndicatorLeft=0;_this138.mChildIndicatorRight=0;_this138.mChildIndicatorStart=0;_this138.mChildIndicatorEnd=0;_this138.mIndicatorRect=new Rect();_this138._attrBinder.addAttr('groupIndicator',function(value){_this138.setGroupIndicator(_this138._attrBinder.parseDrawable(value));},function(){return _this138.mGroupIndicator;});_this138._attrBinder.addAttr('childIndicator',function(value){_this138.setChildIndicator(_this138._attrBinder.parseDrawable(value));},function(){return _this138.mChildIndicator;});_this138._attrBinder.addAttr('indicatorLeft',function(value){_this138.setIndicatorBounds(_this138._attrBinder.parseNumber(value,0),_this138.mIndicatorRight);},function(){return _this138.mIndicatorLeft;});_this138._attrBinder.addAttr('indicatorRight',function(value){var num=_this138._attrBinder.parseNumber(value,0);if(num==0&&_this138.mGroupIndicator!=null){num=_this138.mIndicatorLeft+_this138.mGroupIndicator.getIntrinsicWidth();}_this138.setIndicatorBounds(_this138.mIndicatorLeft,num);},function(){return _this138.mIndicatorRight;});_this138._attrBinder.addAttr('childIndicatorLeft',function(value){_this138.setChildIndicatorBounds(_this138._attrBinder.parseNumber(value,ExpandableListView.CHILD_INDICATOR_INHERIT),_this138.mChildIndicatorRight);},function(){return _this138.mChildIndicatorLeft;});_this138._attrBinder.addAttr('childIndicatorRight',function(value){var num=_this138._attrBinder.parseNumber(value,ExpandableListView.CHILD_INDICATOR_INHERIT);if(num==0&&_this138.mChildIndicator!=null){num=_this138.mChildIndicatorLeft+_this138.mChildIndicator.getIntrinsicWidth();}_this138.setIndicatorBounds(_this138.mChildIndicatorLeft,num);},function(){return _this138.mChildIndicatorRight;});_this138._attrBinder.addAttr('childDivider',function(value){_this138.setChildDivider(_this138._attrBinder.parseDrawable(value));});if(defStyle)_this138.applyDefaultAttributes(defStyle);return _this138;}_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 _this139=this;_classCallCheck(this,Toast);this.mDuration=0;this.mHandler=new Handler();this.mDelayHide=function(){var _this=_this139;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 _this140=this;_classCallCheck(this,TN);this.mShow=function(){var _this=_this140;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=_this140;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 _params=this.mWindow.getAttributes();_params.height=WindowManager.LayoutParams.WRAP_CONTENT;_params.width=WindowManager.LayoutParams.WRAP_CONTENT;_params.dimAmount=0;_params.type=WindowManager.LayoutParams.TYPE_TOAST;_params.setTitle("Toast");_params.leftMargin=_params.rightMargin=36*this.mView.getContext().getResources().getDisplayMetrics().density;_params.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 _this141=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=_this141;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 _this142=_possibleConstructorReturn(this,Object.getPrototypeOf(ListenersHandler).call(this));_this142.mDialog=new WeakReference(dialog);return _this142;}_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 _this143=_possibleConstructorReturn(this,Object.getPrototypeOf(ArrayAdapter).call(this));_this143.mNotifyOnChange=true;_this143.init(context,resource,textViewResourceId,objects);return _this143;}_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 ColorDrawable=android.graphics.drawable.ColorDrawable;var Color=android.graphics.Color;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 _this144=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=_this144;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=new ColorDrawable(Color.WHITE);var topDark=new ColorDrawable(Color.WHITE);var centerDark=new ColorDrawable(Color.WHITE);var bottomDark=new ColorDrawable(Color.WHITE);var fullBright=new ColorDrawable(Color.WHITE);var topBright=new ColorDrawable(Color.WHITE);var centerBright=new ColorDrawable(Color.WHITE);var bottomBright=new ColorDrawable(Color.WHITE);var bottomMedium=new ColorDrawable(Color.WHITE);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 _this145=_possibleConstructorReturn(this,Object.getPrototypeOf(ButtonHandler).call(this));_this145.mDialog=new WeakReference(dialog);return _this145;}_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 _this146=_possibleConstructorReturn(this,Object.getPrototypeOf(RecycleListView).call(this,context,bindElement,defStyle));_this146.mRecycleOnMeasure=true;return _this146;}_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 _this147=this;var listView=this.mInflater.inflate(dialog.mListLayout,null);var adapter=undefined;if(this.mIsMultiChoice){adapter=function(){var _this=_this147;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(_this147.mContext,dialog.mMultiChoiceItemLayout,R.id.text1,_this147.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 _this149=_possibleConstructorReturn(this,Object.getPrototypeOf(AlertDialog).call(this,context));_this149.setCancelable(cancelable);_this149.setOnCancelListener(cancelListener);_this149.mAlert=new app.AlertController(context,_this149,_this149.getWindow());return _this149;}_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 _this150=_possibleConstructorReturn(this,Object.getPrototypeOf(AbsSpinner).call(this,context,bindElement,null));_this150.mHeightMeasureSpec=0;_this150.mWidthMeasureSpec=0;_this150.mSelectionLeftPadding=0;_this150.mSelectionTopPadding=0;_this150.mSelectionRightPadding=0;_this150.mSelectionBottomPadding=0;_this150.mSpinnerPadding=new Rect();_this150.mRecycler=new AbsSpinner.RecycleBin(_this150);_this150.initAbsSpinner();var a=_this150._attrBinder;a.addAttr('entries',function(value){var entries=a.parseTextArray(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);_this150.setAdapter(adapter);}});if(defStyle)_this150.applyDefaultAttributes(defStyle);return _this150;}_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 state=this.mPopupView.getKeyDispatcherState();if(state!=null&&state.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 state=anchorView.getKeyDispatcherState();if(state!=null){state.handleUpEvent(event);}if(event.isTracking()&&!event.isCanceled()){this.dismiss();return true;}}}return false;}},{key:'createDragToOpenListener',value:function createDragToOpenListener(src){var _this153=this;return function(){var _this=_this153;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 _this155=this;var dropDownView=undefined;var otherHeights=0;if(this.mDropDownList==null){var context=this.mContext;this.mShowDropDownRunnable=function(){var _this=_this155;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=_this155;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 _this156=_possibleConstructorReturn(this,Object.getPrototypeOf(DropDownListView).call(this,context,null,android.R.attr.dropDownListViewStyle));_this156.mHijackFocus=hijackFocus;_this156.setCacheColorHint(0);return _this156;}_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 _this157=_possibleConstructorReturn(this,Object.getPrototypeOf(PopupDataSetObserver).call(this));_this157._ListPopupWindow_this=arg;return _this157;}_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 _this160=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=_this160;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);_this160.setOnDismissListener(function(){var _this=_this160;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 android;(function(android){var webkit;(function(webkit){var WebViewClient=function(){function WebViewClient(){_classCallCheck(this,WebViewClient);}_createClass(WebViewClient,[{key:'onPageStarted',value:function onPageStarted(view,url){}},{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 FrameLayout=android.widget.FrameLayout;var WebView=function(_FrameLayout3){_inherits(WebView,_FrameLayout3);function WebView(context,bindElement,defStyle){_classCallCheck(this,WebView);var _this161=_possibleConstructorReturn(this,Object.getPrototypeOf(WebView).call(this,context,bindElement,defStyle));var density=_this161.getResources().getDisplayMetrics().density;_this161.setMinimumWidth(300*density);_this161.setMinimumHeight(150*density);_this161.initIFrameElement();return _this161;}_createClass(WebView,[{key:'initIFrameElement',value:function initIFrameElement(){var _this162=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(){if(_this162.mClient){_this162.mClient.onReceivedTitle(_this162,_this162.getTitle());_this162.mClient.onPageFinished(_this162,_this162.iFrameElement.src);}};this.bindElement.appendChild(this.iFrameElement);}},{key:'loadUrl',value:function loadUrl(url){if(this.mClient)this.mClient.onPageStarted(this,url);this.iFrameElement.src=url;}},{key:'loadData',value:function loadData(data){this.iFrameElement['srcdoc']=data;}},{key:'evaluateJavascript',value:function evaluateJavascript(script){try{eval.call(this.iFrameElement.contentWindow,script);}catch(e){console.warn(e);eval(script);}}},{key:'stopLoading',value:function stopLoading(){try{this.iFrameElement.contentWindow['stop']();}catch(e){console.error(e);}}},{key:'reload',value:function reload(){this.iFrameElement.src=this.iFrameElement.src;}},{key:'getUrl',value:function getUrl(){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:'getContentHeight',value:function getContentHeight(){try{return this.iFrameElement.contentWindow.document.documentElement.offsetHeight;}catch(e){console.warn(e);return 0;}}},{key:'getContentWidth',value:function getContentWidth(){try{return this.iFrameElement.contentWindow.document.documentElement.offsetWidth;}catch(e){console.warn(e);return 0;}}},{key:'setWebViewClient',value:function setWebViewClient(client){this.mClient=client;}}]);return WebView;}(FrameLayout);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 _this163=_possibleConstructorReturn(this,Object.getPrototypeOf(RotateAnimation).call(this));_this163.mFromDegrees=0;_this163.mToDegrees=0;_this163.mPivotXType=RotateAnimation.ABSOLUTE;_this163.mPivotYType=RotateAnimation.ABSOLUTE;_this163.mPivotXValue=0.0;_this163.mPivotYValue=0.0;_this163.mPivotX=0;_this163.mPivotY=0;_this163.mFromDegrees=fromDegrees;_this163.mToDegrees=toDegrees;_this163.mPivotXValue=pivotXValue;_this163.mPivotXType=pivotXType;_this163.mPivotYValue=pivotYValue;_this163.mPivotYType=pivotYType;_this163.initializePivotPoint();return _this163;}_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);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&&pos>endPos){if(ii==null){break;}if(pos==ii.position&&!ii.scrolling){this.mItems.remove(itemIndex);this.mAdapter.destroyItem(this,pos,ii.object);if(DEBUG){Log.i(TAG,"populate() - destroyItem() with pos: "+pos+" view: "+ii.object);}ii=itemIndex0?this.mPageMargin/width:0;if(oldCurInfo!=null){var oldCurPosition=oldCurInfo.position;if(oldCurPositionii.position&&itemIndexcurItem.position){var itemIndex=this.mItems.size()-1;var ii=null;var _offset2=oldCurInfo.offset;for(var _pos2=oldCurPosition-1;_pos2>=curItem.position&&itemIndex>=0;_pos2--){ii=this.mItems.get(itemIndex);while(_pos20){itemIndex--;ii=this.mItems.get(itemIndex);}while(_pos2>ii.position){_offset2-=this.mAdapter.getPageWidth(_pos2)+marginOffset;_pos2--;}_offset2-=ii.widthFactor+marginOffset;ii.offset=_offset2;}}}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 ii=this.mItems.get(i);while(pos>ii.position){offset-=this.mAdapter.getPageWidth(pos--)+marginOffset;}offset-=ii.widthFactor+marginOffset;ii.offset=offset;if(ii.position==0)this.mFirstOffset=offset;}offset=curItem.offset+curItem.widthFactor+marginOffset;pos=curItem.position+1;for(var i=curIndex+1;i0&&!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 x=ev.getX(activePointerIndex);needsInvalidate=needsInvalidate||this.performDrag(x);}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 x=ev.getX(activePointerIndex);var totalDelta=x-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 x=ev.getX(index);this.mLastMotionX=x;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(parent.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 _len40=arguments.length,args=Array(_len40),_key40=0;_key40<_len40;_key40++){args[_key40]=arguments[_key40];}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 _this169=_possibleConstructorReturn(this,Object.getPrototypeOf(DrawerLayout).call(this,context,bindElement,defStyle));_this169.mMinDrawerMargin=0;_this169.mScrimColor=DrawerLayout.DEFAULT_SCRIM_COLOR;_this169.mScrimOpacity=0;_this169.mScrimPaint=new Paint();_this169.mDrawerState=0;_this169.mFirstLayout=true;_this169.mLockModeLeft=0;_this169.mLockModeRight=0;_this169.mInitialMotionX=0;_this169.mInitialMotionY=0;var density=_this169.getResources().getDisplayMetrics().density;_this169.mMinDrawerMargin=Math.floor(DrawerLayout.MIN_DRAWER_MARGIN*density+0.5);var minVel=DrawerLayout.MIN_FLING_VELOCITY*density;_this169.mLeftCallback=new DrawerLayout.ViewDragCallback(_this169,Gravity.LEFT);_this169.mRightCallback=new DrawerLayout.ViewDragCallback(_this169,Gravity.RIGHT);_this169.mLeftDragger=ViewDragHelper.create(_this169,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this169.mLeftCallback);_this169.mLeftDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);_this169.mLeftDragger.setMinVelocity(minVel);_this169.mLeftCallback.setDragger(_this169.mLeftDragger);_this169.mRightDragger=ViewDragHelper.create(_this169,DrawerLayout.TOUCH_SLOP_SENSITIVITY,_this169.mRightCallback);_this169.mRightDragger.setEdgeTrackingEnabled(ViewDragHelper.EDGE_RIGHT);_this169.mRightDragger.setMinVelocity(minVel);_this169.mRightCallback.setDragger(_this169.mRightDragger);_this169.setFocusableInTouchMode(true);_this169.setMotionEventSplittingEnabled(false);return _this169;}_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;iheight-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 x=ev.getX();var y=ev.getY();var peekingOnly=true;var touchedView=this.mLeftDragger.findTopChildUnder(Math.floor(x),Math.floor(y));if(touchedView!=null&&this.isContentView(touchedView)){var dx=x-this.mInitialMotionX;var dy=y-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$getPrototypeO11;_classCallCheck(this,LayoutParams);for(var _len41=arguments.length,args=Array(_len41),_key41=0;_key41<_len41;_key41++){args[_key41]=arguments[_key41];}var _this171=_possibleConstructorReturn(this,(_Object$getPrototypeO11=Object.getPrototypeOf(LayoutParams)).call.apply(_Object$getPrototypeO11,[this].concat(_toConsumableArray(args.length==3?[args[0],args[1]]:args))));_this171.gravity=Gravity.NO_GRAVITY;_this171.onScreen=0;_this171._attrBinder.addAttr('gravity',function(value){_this171.gravity=_this171._attrBinder.parseGravity(value,_this171.gravity);});return _this171;}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 _this172=_possibleConstructorReturn(this,Object.getPrototypeOf(RecyclingPagerAdapter).call(this));_this172.recycleBin=new RecycleBin();_this172.recycleBin.setViewTypeCount(_this172.getViewTypeCount());return _this172;}_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 _this173=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=new Array(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=_this173;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 scale=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 _this186=_possibleConstructorReturn(this,Object.getPrototypeOf(ListViewOverScrollLocker).call(this,listView));_this186.listView=listView;_this186.configListView();return _this186;}_createClass(ListViewOverScrollLocker,[{key:'configListView',value:function configListView(){var _this187=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=-_this187.lockTop;else if(listView.mScrollY>0)maxY=_this187.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=_this187.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>_this187.lockBottom||listView.mScrollY<_this187.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=-_this187.lockTop;maxY=_this187.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+=_this187.lockBottom;else overY+=_this187.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 _this188=_possibleConstructorReturn(this,Object.getPrototypeOf(ScrollViewScrollLocker).call(this,scrollView));_this188.scrollView=scrollView;var scroller=scrollView.mScroller;var oldSpringBack=scroller.springBack;scroller.springBack=function(startX,startY,minX,maxX,minY,maxY){minY=-_this188.lockTop;maxY=_this188.scrollView.getScrollRange()+_this188.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+=_this188.lockBottom;else overY+=_this188.lockTop;minY-=_this188.lockTop;maxY+=_this188.lockBottom;oldFling.call(scroller,startX,startY,velocityX,velocityY,minX,maxX,minY,maxY,overX,overY);};_this188.listenScrollContentHeightChange();return _this188;}_createClass(ScrollViewScrollLocker,[{key:'listenScrollContentHeightChange',value:function listenScrollContentHeightChange(){var _this189=this;var listenHeightChange=function listenHeightChange(v){var onSizeChangedFunc=v.onSizeChanged;v.onSizeChanged=function(w,h,oldw,oldh){onSizeChangedFunc.call(v,w,h,oldw,oldh);_this189.scrollView.overScrollBy(0,0,0,_this189.scrollView.mScrollY,0,_this189.scrollView.getScrollRange(),0,_this189.scrollView.mOverscrollDistance,false);};};if(this.scrollView.getChildCount()>0){listenHeightChange(this.scrollView.getChildAt(0));}else {(function(){var onViewAddedFunc=_this189.scrollView.onViewAdded;_this189.scrollView.onViewAdded=function(v){onViewAddedFunc.call(_this189.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 _this190=_possibleConstructorReturn(this,Object.getPrototypeOf(PullRefreshLoadLayout).call(this,context,bindElement,defStyle));_this190.autoLoadScrollAtBottom=true;_this190.footerViewReadyDistance=36*android.content.res.Resources.getDisplayMetrics().density;_this190.contentOverY=0;_this190.setHeaderView(new PullRefreshLoadLayout.DefaultHeaderView(context));_this190.setFooterView(new PullRefreshLoadLayout.DefaultFooterView(context));_this190._attrBinder.addAttr('refreshEnable',function(value){_this190.setRefreshEnable(_this190._attrBinder.parseBoolean(value,true));});_this190._attrBinder.addAttr('loadEnable',function(value){_this190.setLoadEnable(_this190._attrBinder.parseBoolean(value,true));});return _this190;}_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 _this191=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===_this191.contentView){_this191.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(_FrameLayout6){_inherits(HeaderView,_FrameLayout6);function HeaderView(){var _Object$getPrototypeO12;_classCallCheck(this,HeaderView);for(var _len42=arguments.length,args=Array(_len42),_key42=0;_key42<_len42;_key42++){args[_key42]=arguments[_key42];}var _this192=_possibleConstructorReturn(this,(_Object$getPrototypeO12=Object.getPrototypeOf(HeaderView)).call.apply(_Object$getPrototypeO12,[this].concat(args)));_this192.state=PullRefreshLoadLayout.State_Header_Normal;_this192.stateBeforeReady=PullRefreshLoadLayout.State_Header_Normal;return _this192;}_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(_FrameLayout7){_inherits(FooterView,_FrameLayout7);function FooterView(){var _Object$getPrototypeO13;_classCallCheck(this,FooterView);for(var _len43=arguments.length,args=Array(_len43),_key43=0;_key43<_len43;_key43++){args[_key43]=arguments[_key43];}var _this193=_possibleConstructorReturn(this,(_Object$getPrototypeO13=Object.getPrototypeOf(FooterView)).call.apply(_Object$getPrototypeO13,[this].concat(args)));_this193.state=PullRefreshLoadLayout.State_Footer_Normal;_this193.stateBeforeReady=PullRefreshLoadLayout.State_Footer_Normal;return _this193;}_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 _this194=_possibleConstructorReturn(this,Object.getPrototypeOf(DefaultHeaderView).call(this,context,bindElement,defStyle));_this194.progressBar=new ProgressBar();_this194.progressBar.setVisibility(View.GONE);_this194.textView=new TextView();var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this194.textView.setPadding(pad/2,pad,pad/2,pad);_this194.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout();linear.addView(_this194.progressBar,32*density,32*density);linear.addView(_this194.textView);linear.setGravity(Gravity.CENTER);_this194.addView(linear,-1,-2);_this194.onStateChange(PullRefreshLoadLayout.State_Header_Normal,PullRefreshLoadLayout.State_Disable);return _this194;}_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 _this195=_possibleConstructorReturn(this,Object.getPrototypeOf(DefaultFooterView).call(this,context,bindElement,defStyle));_this195.progressBar=new ProgressBar();_this195.progressBar.setVisibility(View.GONE);_this195.textView=new TextView();var density=android.content.res.Resources.getDisplayMetrics().density;var pad=16*density;_this195.textView.setPadding(pad/2,pad,pad/2,pad);_this195.textView.setGravity(Gravity.CENTER);var linear=new LinearLayout();linear.addView(_this195.progressBar);linear.addView(_this195.textView);linear.setGravity(Gravity.CENTER);_this195.addView(linear,-1,-2);_this195.onStateChange(PullRefreshLoadLayout.State_Footer_Normal,PullRefreshLoadLayout.State_Disable);_this195.setOnClickListener({onClick:function onClick(v){var parent=v.getParent();if(parent instanceof PullRefreshLoadLayout){parent.setFooterState(PullRefreshLoadLayout.State_Footer_Loading);}}});return _this195;}_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:'initImpl',value:function initImpl(){this.canvasId=++sNextID;this.createCanvasImpl();}},{key:'createCanvasImpl',value:function createCanvasImpl(){native.NativeApi.canvas.createCanvas(this.canvasId,this.mWidth,this.mHeight);}},{key:'recycleImpl',value:function recycleImpl(){native.NativeApi.canvas.recycleCanvas(this.canvasId);}},{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:'clearRectImpl',value:function clearRectImpl(left,top,width,height){native.NativeApi.canvas.clearRect(this.canvasId,left,top,width,height);}},{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:'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,dstRect){if(image instanceof native.NativeImage){native.NativeApi.canvas.drawImage(this.canvasId,image.imageId,dstRect.left,dstRect.top,dstRect.width(),dstRect.height());}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);}},{key:'drawOvalImpl',value:function drawOvalImpl(oval,style){}},{key:'drawCircleImpl',value:function drawCircleImpl(cx,cy,radius,style){}},{key:'drawArcImpl',value:function drawArcImpl(oval,startAngle,sweepAngle,useCenter,style){}},{key:'drawRoundRectImpl',value:function drawRoundRectImpl(rect,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);}},{key:'multiplyAlphaImpl',value:function multiplyAlphaImpl(alpha){native.NativeApi.canvas.multiplyAlpha(this.canvasId,alpha);}},{key:'setAlphaImpl',value:function setAlphaImpl(alpha){native.NativeApi.canvas.setAlpha(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:'applyTextMeasure',value:function applyTextMeasure(cacheMeasureTextSize,defaultWidth,widths){android.graphics.Canvas.measureTextImpl=function(text,textSize){var width=0;for(var i=0,length=text.length;i= 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;\n this.top = t;\n this.right = right;\n this.bottom = bottom;\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;\n this.top = t;\n this.right = right;\n this.bottom = bottom;\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 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 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 }\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 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 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 = new Array(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 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\");\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\");\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.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.mAlpha = paint.mAlpha;\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 if (this.mAlpha == null)\n return 255;\n return this.mAlpha;\n }\n setAlpha(alpha) {\n this.mAlpha = alpha;\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 = new Array(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.mAlpha == 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.mAlpha != null) {\n canvas.multiplyAlpha(this.mAlpha / 255);\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 = new Array(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 = new Array(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 = new Array(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 = new Array(9);\n Matrix.multiply(tmp, this.mValues, matrix);\n this.mValues = tmp;\n }\n preTransform(matrix) {\n let tmp = new Array(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(new Array(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 = new Array(9);\n let tmp2 = new Array(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(new Array(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 = new Array(9);\n let tmp2 = new Array(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 = new Array(9);\n let tmp2 = new Array(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 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.initImpl();\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 initImpl() {\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._saveCount = 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 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.clearRectImpl(this.mCurrentClip.left, this.mCurrentClip.top, this.mCurrentClip.width(), this.mCurrentClip.height());\n }\n clearRectImpl(left, top, width, height) {\n this._mCanvasContent.clearRect(left, top, width, 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, image.browserImage.width, image.browserImage.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 multiplyAlpha(alpha) {\n if (typeof alpha === 'number') {\n this.multiplyAlphaImpl(alpha);\n }\n }\n multiplyAlphaImpl(alpha) {\n this._mCanvasContent.globalAlpha *= alpha;\n }\n setAlpha(alpha) {\n if (typeof alpha === 'number') {\n this.setAlphaImpl(alpha);\n }\n }\n setAlphaImpl(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 }\n Canvas.TempMatrixValue = new Array(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) {\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 }\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 notifySizeChangeSelf() {\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 }\n Drawable.ZERO_BOUNDS_RECT = new Rect();\n drawable.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 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_1) {\n class InsetDrawable extends drawable_1.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 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_1.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_2) {\n class ShadowDrawable extends drawable_2.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_2.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 this._class = new Class(this.constructor.name);\n }\n static get class() {\n return new Class(this.name);\n }\n hashCode() {\n return this.hash;\n }\n getClass() {\n return this._class;\n }\n equals(o) {\n return this === o;\n }\n }\n lang.JavaObject = JavaObject;\n class Class {\n constructor(name) {\n this.name = name;\n }\n getName() {\n return this.name;\n }\n getSimpleName() {\n return this.name;\n }\n }\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(activityClassOrName) {\n this.mRequestCode = -1;\n this.activityName = activityClassOrName;\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 }\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 }\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.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 let children = Array.from(domtree.children);\n let defStyle;\n let styleAttrValue = domtree.getAttribute('style');\n if (styleAttrValue) {\n defStyle = this.mContext.getResources().getAttr(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 \"id\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\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(layoutRef) {\n if (!layoutRef)\n return null;\n layoutRef = layoutRef.replace('/', '.').split('.').pop();\n if (!_layout_data[layoutRef])\n return null;\n _tempDiv.innerHTML = _layout_data[layoutRef];\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.id = '@android:layout/id';\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 android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res) {\n var DisplayMetrics = android.util.DisplayMetrics;\n class Resources {\n constructor(context) {\n this.context = context;\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 let displayMetrics = this.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 displayMetrics.widthPixels = window.innerWidth * density;\n displayMetrics.heightPixels = window.innerHeight * density;\n return displayMetrics;\n }\n getObjectRef(refString) {\n if (refString.startsWith('@'))\n refString = refString.substring(1);\n if (refString == 'null')\n return null;\n try {\n return window.eval(refString);\n }\n catch (e) {\n console.log(e);\n }\n }\n getAttr(refString) {\n if (refString.startsWith('@android:attr/')) {\n refString = refString.substring('@android:attr/'.length);\n return android.R.attr[refString];\n }\n else if (Resources.buildAttrFinder && refString.startsWith('@attr/')) {\n return Resources.buildAttrFinder(refString);\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n return null;\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 else if (Resources.buildDrawableFinder && refString.startsWith('@drawable/')) {\n return Resources.buildDrawableFinder(refString);\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n }\n getColor(refString) {\n let s = this.getString(refString);\n return android.graphics.Color.parseColor(s);\n }\n getColorStateList(refString) {\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n return android.R.color[refString];\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n }\n getString(refString, notFindValue = refString) {\n if (!refString || !refString.startsWith('@'))\n return notFindValue;\n if (refString.startsWith('@android:string/')) {\n refString = refString.substring('@android:string/'.length);\n return android.R.string_[refString];\n }\n let referenceArray = [];\n let attrValue = refString;\n while (attrValue && attrValue.startsWith('@')) {\n let reference = this.getReference(attrValue, false);\n if (!reference)\n return notFindValue;\n if (referenceArray.indexOf(reference) >= 0)\n throw Error('findReference Error: circle reference');\n referenceArray.push(reference);\n attrValue = reference.innerText;\n }\n return attrValue;\n }\n getTextArray(refString) {\n if (!refString || !refString.startsWith('@'))\n return null;\n let reference = this.getReference(refString, false);\n if (reference instanceof HTMLElement) {\n let array = [];\n for (let ele of Array.from(reference.children)) {\n if (ele instanceof HTMLElement)\n array.push(ele.innerText);\n }\n return array;\n }\n return null;\n }\n getLayout(refString) {\n if (!refString || !refString.trim().startsWith('@'))\n return null;\n let reference = this.getReference(refString, true);\n if (reference)\n return reference.firstElementChild;\n if (refString.startsWith('@android:layout/')) {\n return android.R.layout.getLayoutData(refString);\n }\n else if (Resources.buildLayoutFinder && refString.startsWith('@layout/')) {\n return Resources.buildLayoutFinder(refString);\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n }\n getReference(refString, cloneNode = true) {\n if (refString)\n refString = refString.trim();\n if (refString && refString.startsWith('@')) {\n refString = refString.substring(1);\n let [tagName, ...refIds] = refString.split('/');\n if (!refIds || refIds.length === 0)\n return null;\n let resourcesElement = Resources.buildResourcesElement;\n if (tagName.startsWith('android:')) {\n tagName = tagName.substring('android:'.length);\n resourcesElement = Resources.SDKResourcesElement;\n }\n if (!tagName.startsWith('android-'))\n tagName = 'android-' + tagName;\n let q = 'resources ' + tagName + '#' + refIds.join(' #');\n let rootElement = this.context ? this.context.androidUI.rootResourceElement : Resources.emptySelectorNode;\n let el = rootElement.querySelector(q) || resourcesElement.querySelector(q);\n if (!el)\n return null;\n return cloneNode ? el.cloneNode(true) : el;\n }\n return null;\n }\n }\n Resources.instance = new Resources();\n Resources.emptySelectorNode = document.createElement('resources');\n Resources.buildResourcesElement = document.createElement('resources');\n Resources.SDKResourcesElement = document.createElement('resources');\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 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 identifier: 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 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.identifier;\n for (let i = 0, length = e.touches.length; i < length; i++) {\n if (e.touches[i].identifier === 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 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 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].identifier;\n }\n findPointerIndex(pointerId) {\n for (let i = 0, length = this.mTouchingPointers.length; i < length; i++) {\n if (this.mTouchingPointers[i].identifier === 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].identifier);\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].identifier);\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.identifier) >= 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 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 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 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 {\n m.target = args[0];\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 }\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 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 requestAnimationFrame(MessageQueue.loop);\n }\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 requestAnimationFrame(MessageQueue.loop);\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(mCallback) {\n this.mCallback = mCallback;\n }\n handleMessage(msg) {\n }\n dispatchMessage(msg) {\n if (msg.callback != null) {\n msg.callback.run.call(msg.callback);\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 class ColorStateList {\n constructor(states, colors) {\n this.mDefaultColor = 0xffff0000;\n this.mStateSpecs = states;\n this.mColors = colors;\n if (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 withAlpha(alpha) {\n let colors = new Array(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 complexToDimensionPixelSize(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 }\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 = new Array(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 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.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 static parseStateAttrName(stateDesc) {\n if (stateDesc.startsWith('android:'))\n stateDesc = stateDesc.substring('android:'.length);\n if (stateDesc.startsWith('state_'))\n stateDesc = stateDesc.substring('state_'.length);\n let stateSet = new Set();\n let stateParts = stateDesc.split('&');\n for (let part of stateParts) {\n let sign = 1;\n while (part.startsWith('!')) {\n sign *= -1;\n part = part.substring(1);\n }\n let stateValue = android.view.View['VIEW_STATE_' + part.toUpperCase()];\n if (stateValue !== undefined) {\n stateSet.add(stateValue * sign);\n }\n }\n return stateSet;\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 this.optStateAttr([]);\n this._initStyleAttributes(view.bindElement, []);\n }\n _initStyleAttributes(ele, inParseState) {\n let attributes = Array.from(ele.attributes);\n attributes.forEach((attr) => {\n if (attr.name === 'style' || attr.name === 'android:style') {\n this._initStyleAttr(attr, ele, inParseState);\n }\n });\n attributes.forEach((attr) => {\n if (attr.name === 'style' || attr.name === 'android:style') {\n return;\n }\n if (attr.name.startsWith('android:state_') || attr.name.startsWith('state_')) {\n return;\n }\n this._initStyleAttr(attr, ele, inParseState);\n });\n attributes.forEach((attr) => {\n if (attr.name.startsWith('android:state_') || attr.name.startsWith('state_')) {\n this._initStyleAttr(attr, ele, inParseState);\n }\n });\n }\n _initStyleAttr(attr, ele, inParseState) {\n let attrName = attr.name;\n if (!attrName.startsWith('android:'))\n return;\n attrName = attrName.substring('android:'.length);\n if (attrName === 'id')\n return;\n let attrValue = attr.value;\n if (attrName.startsWith('state_')) {\n let newStateSet = attr_1.StateAttr.parseStateAttrName(attrName);\n for (let state of inParseState) {\n newStateSet.add(state);\n }\n inParseState = Array.from(newStateSet).sort();\n }\n let _stateAttr = this.optStateAttr(inParseState);\n if (attrName.startsWith('state_') || attrName === 'style') {\n if (attrValue.startsWith('@')) {\n let reference = this.mView.getResources().getReference(attrValue, false);\n if (reference)\n this._initStyleAttributes(reference, inParseState);\n }\n else {\n for (let part of attrValue.split(';')) {\n let [name, value] = part.split(':');\n value = value ? this.mView.getResources().getString(value) : '';\n if (name)\n _stateAttr.setAttr(name.trim().toLowerCase(), value);\n }\n }\n }\n else {\n attrValue = this.mView.getResources().getString(attrValue);\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 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 ColorDrawable = android.graphics.drawable.ColorDrawable;\n var Color = android.graphics.Color;\n var ColorStateList = android.content.res.ColorStateList;\n var Resources = android.content.res.Resources;\n var TypedValue = android.util.TypedValue;\n class AttrBinder {\n constructor(host) {\n this.attrChangeMap = new Map();\n this.attrStashMap = new Map();\n this.objectRefs = [];\n this.host = host;\n }\n addAttr(attrName, onAttrChange, stashAttrValueWhenStateChange) {\n if (!attrName)\n return;\n attrName = attrName.toLowerCase();\n if (onAttrChange)\n this.attrChangeMap.set(attrName, onAttrChange);\n if (stashAttrValueWhenStateChange)\n this.attrStashMap.set(attrName, stashAttrValueWhenStateChange);\n }\n onAttrChange(attrName, attrValue, context) {\n this.mContext = context;\n if (!attrName)\n return;\n attrName = attrName.toLowerCase();\n let onAttrChangeCall = this.attrChangeMap.get(attrName);\n if (onAttrChangeCall)\n onAttrChangeCall.call(this.host, attrValue);\n }\n getAttrValue(attrName) {\n if (!attrName)\n return undefined;\n attrName = attrName.toLowerCase();\n let getAttrCall = this.attrStashMap.get(attrName);\n if (getAttrCall) {\n let value = getAttrCall.call(this.host);\n if (value == null)\n return null;\n if (typeof value === \"number\")\n return value + '';\n if (typeof value === \"boolean\")\n return value + '';\n if (typeof value === \"string\")\n return value;\n return this.setRefObject(value);\n }\n return undefined;\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 switch (parts.length) {\n case 1: return [parts[0], parts[0], parts[0], parts[0]];\n case 2: return [parts[1], parts[0], parts[1], parts[0]];\n case 3: return [parts[1], parts[0], parts[1], parts[2]];\n case 4: return [parts[3], parts[0], parts[1], parts[2]];\n }\n throw Error('not a padding or margin value : ' + value);\n }\n parseBoolean(value, defaultValue = true) {\n if (value === false || value === 'false' || value === '0')\n return false;\n else if (value === true || value === 'true' || value === '1' || value === '')\n return true;\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 gravity = Gravity.NO_GRAVITY;\n try {\n let parts = s.split(\"|\");\n parts.forEach((part) => {\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) || gravity === Gravity.NO_GRAVITY)\n gravity = defaultValue;\n return gravity;\n }\n parseDrawable(s) {\n if (!s)\n return null;\n if (s instanceof Drawable)\n return s;\n s = (s + '').trim();\n if (s.startsWith('@')) {\n let refObj = this.getRefObject(s);\n if (refObj)\n return refObj;\n return Resources.getSystem().getDrawable(s);\n }\n else if (s.startsWith('url(')) {\n s = s.substring('url('.length);\n if (s.endsWith(')'))\n s = s.substring(0, s.length - 1);\n return new androidui.image.NetDrawable(s);\n }\n else {\n try {\n let color = this.parseColor(s);\n return new ColorDrawable(color);\n }\n catch (e) {\n }\n }\n return null;\n }\n parseColor(value, defaultValue) {\n let color = Number.parseInt(value);\n if (Number.isInteger(color))\n return color;\n try {\n if (value.startsWith('@')) {\n return Resources.getSystem().getColor(value);\n }\n else {\n if (value.startsWith('#') && value.length === 4) {\n value = '#' + value[1] + value[1] + value[2] + value[2] + value[2] + value[2];\n }\n return Color.parseColor(value);\n }\n }\n catch (e) {\n if (defaultValue == null)\n throw e;\n }\n return defaultValue;\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('@')) {\n let refObj = this.getRefObject(value);\n if (refObj)\n return refObj;\n return Resources.getSystem().getColorStateList(value);\n }\n else {\n try {\n let color = this.parseColor(value);\n return ColorStateList.valueOf(color);\n }\n catch (e) {\n console.log(e);\n }\n }\n return null;\n }\n parseNumber(value, defaultValue = 0, baseValue = 0) {\n if (typeof value === 'string' && value.startsWith('@')) {\n value = Resources.getSystem().getString(value);\n }\n try {\n return TypedValue.complexToDimensionPixelSize(value, baseValue);\n }\n catch (e) {\n return defaultValue;\n }\n }\n parseString(value, defaultValue) {\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return Resources.getSystem().getString(value);\n }\n return value;\n }\n return defaultValue;\n }\n parseTextArray(value) {\n value += '';\n if (value.startsWith('@')) {\n return Resources.getSystem().getTextArray(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.AttrBinder = 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 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, 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);\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 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.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_3) {\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 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 = new Array(N);\n this.mPaddingT = new Array(N);\n this.mPaddingR = new Array(N);\n this.mPaddingB = new Array(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_3.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_3.LayerDrawable || (drawable_3.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) {\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 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.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.RotateDrawable || (drawable.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_4) {\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 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_4.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_4.ScaleDrawable || (drawable_4.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 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 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 = new Array(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_5) {\n const DEBUG = android.util.Log.DBG_StateListDrawable;\n const TAG = \"StateListDrawable\";\n const DEFAULT_DITHER = true;\n class StateListDrawable extends drawable_5.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 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_5.StateListDrawable = StateListDrawable;\n class StateListState extends drawable_5.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 \"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 \"topPanel\": \"topPanel\",\n \"titleDividerTop\": \"titleDividerTop\",\n \"title_template\": \"title_template\",\n \"icon\": \"icon\",\n \"alertTitle\": \"alertTitle\",\n \"titleDivider\": \"titleDivider\",\n \"contentPanel\": \"contentPanel\",\n \"scrollView\": \"scrollView\",\n \"message\": \"message\",\n \"customPanel\": \"customPanel\",\n \"custom\": \"custom\",\n \"buttonPanel\": \"buttonPanel\",\n \"button2\": \"button2\",\n \"button3\": \"button3\",\n \"button1\": \"button1\",\n \"progress\": \"progress\",\n \"progress_percent\": \"progress_percent\",\n \"progress_number\": \"progress_number\",\n \"content\": \"content\",\n \"background\": \"background\",\n \"secondaryProgress\": \"secondaryProgress\",\n \"leftSpacer\": \"leftSpacer\",\n \"rightSpacer\": \"rightSpacer\",\n \"text1\": \"text1\",\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.mNinePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(this.mState.mImage.src);\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 this.mTmpRect.set(0, 1, 1, image.height - 1);\n image.getPixels(this.mTmpRect, (leftBorder) => {\n this.mTmpRect.set(1, 0, image.width - 1, 1);\n image.getPixels(this.mTmpRect, (topBorder) => {\n this.mTmpRect.set(image.width - 1, 1, image.width, image.height - 1);\n image.getPixels(this.mTmpRect, (rightBorder) => {\n this.mTmpRect.set(1, image.height - 1, image.width - 1, image.height);\n image.getPixels(this.mTmpRect, (bottomBorder) => {\n ninePatchBorderInfo = new NinePatchBorderInfo(leftBorder, topBorder, rightBorder, bottomBorder);\n NinePatchDrawable.GlobalBorderInfoCache.set(image.src, ninePatchBorderInfo);\n super.onLoad();\n });\n });\n });\n });\n }\n draw(canvas) {\n if (!this.mNinePatchBorderInfo)\n return;\n if (!this.isImageSizeEmpty()) {\n let cache = NinePatchDrawable.DrawNinePatchWithCache ? this.getNinePatchCache() : null;\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 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 ? 1 : bound.width() / staticWidthSum;\n let staticHeightPartScale = extraHeight >= 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 let dstHeight;\n if (isScalePart) {\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 }\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 NinePatchDrawable.DrawNinePatchWithCache = true;\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 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 tmpLength = 0;\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,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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 \"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,iVBORw0KGgoAAAANSUhEUgAAAOQAAADkCAMAAAC/iXi/AAACYVBMVEUAAABFRUVISEhVVVW9vb1NTU3BwcFSUlKysrK/v79ZWVleXl5KSkqkpKRmZmZjY2O6urqEhISbm5tpaWmSkpJubm53d3fDw8NPT0+2tra4uLi0tLStra2vr6+rq6upqamnp6dbW1tgYGChoaGfn5+dnZ1ra2t0dHSWlpaUlJSPj495eXmNjY2JiYmBgYF9fX17e3uLi4t/f39ycnJwcHCYmJiHh4eoqKiGhoaMjIxdXV2FhYW/v7+enp5WVlaGhoaxsbFdXV1HR0dISEiMjIyEhIS5ubmnp6fBwcG2trZvb29NTU1UVFRISEi0tLSoqKhSUlJwcHC8vLyZmZlwcHBbW1tNTU1OTk65ublSUlJpaWmqqqpUVFRQUFC/v79kZGRTU1NoaGitra1JSUlra2uioqKVlZWXl5dISEheXl67u7tLS0upqamurq7AwMB9fX10dHRdXV24uLigoKBVVVVJSUmQkJCqqqq3t7dwcHCurq6Li4uysrK/v7+KioplZWWEhIS9vb1nZ2dzc3N+fn5WVlaXl5eWlpZ8fHy9vb2Xl5dUVFRISEigoKCXl5ednZ21tbVra2uUlJReXl6+vr5JSUmioqJ7e3tHR0ednZ2RkZGmpqZkZGSZmZm5ubmQkJC+vr6qqqqTk5O0tLS+vr6fn59nZ2d0dHRgYGCMjIxLS0uenp5vb29MTEx1dXV4eHikpKRXV1eysrJ9fX1cXFyEhIRwcHC7u7uqqqpdXV2NjY21tbW9vb2kpKSQkJCMjIxqamrBwcF6enp0dHRTU1N0dHR7e3unp6ednZ1ISEhQUFB885iiAAAAy3RSTlMAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIADChkbBQUOCUMyGggyfEQzIhx5XlctFBMSDX17V1I6Mi4mGhkOeXNwXktCLi0dEnt5b29uV1ZUUEsmJSQde3h3c3FxXFtUUkJAQD03NTMrJxZ6enRzc25tbWxsaGhfXl5cW1hYUlFQR0A9Ozo6NzEsJiYhISAYend1dHNwZ2ZjY2NhX1NQRzd6dG5sZ1tHNWVKSrmNY9gAAAqQSURBVHja7NpNSxtBHMfxX22sD/XgrabGlr6MDZsQE0gTYmIImAcaRZqLTWqgwVARpXjwIHoQquBJLHooggdLwZb2UhBK+6o6jrWT/7r2YTK7O5b9vIMv/5l/ZkX4fD6fz+fz+Xw+n8/n8/l8Pp/P5/PWummaKSbOJBKJKv4nhllebW7f++XWLzvZWjwRxQ1npFdPv9zhSCSxuVs7NnBDmasrM7zPNpKa2621cdMUUiyQopFWPT09c9l4GDdGLLUywPxjJLd7QzrTn2cGLkhEsnkWj6G5yGGd1UlFCo2Szhu3sM+GKBXZQ2Vq09BTYS8QGJCPpIaKOmYW9gPMACERKcx90y0zsjoT4NRFDg3N1bS6m616gPur83p9I41kGkfQRaEZEGilfOTQhaweZ9Y4nAk4FclkShq8a83tAGUfud3cT6VMxgAM9qHVjsdr2R0SSRuFnQQ8djgc+EPkl+Zhax3XyB+Vspv2gxTmSvBSbIUGWitnmuVJ/FE+nt282ij09mbD8IxZH/5N5Jd9E3+t/W3zN5G9jTY8cjjMXFMZaLYM/BPjKDtn38iV4IXYyvC1kaepGCSE47sikjZ6c2QL26zQvnLFhLT2rv0gmZ1puGyyzvpsK5smupLI0kEKjTxcZS6yOrvKz+voWrVIGoXNBFyUTg7bRm6bUCKxIyI7ZY7hmlzy/rBN5UwKysQzl43ESAUuKd9nrlbuFaBQuHjZSLlUmWOJVyvrJhRrN3ptjBzBBa2kXeTnCJSLFm0aRzIJOC7NGy2VyTIcEc9YG5lMFQ5bX+SBtLK+DofkG7SRa0zDUYUtnkcr1R9VemRpIzMbhoMip8H7VypX4agabeTOonDOXjB4pTIFh8VHSCNXhGPKQYZWJnNwXGWENxJrcIiZDFork2m44Dhjbezra8MRsS0WSCsXTbgikaGJjFg+yi8kzUxKNCqo7OOKcEAu2Ik3tuCaI9LIVaBcYTForSzDRRXayGxMQ7W90aCl8gCuKpFERw5senTUUrkPl32njcwClDK2WCTJ/GTAZcYEayRmDah0wApJZT0G14Vn+yxKUGhykSeKzOQ6PFC1Rm7koc4yqyOVB/BEyVo5AWVaowS7kPDIhOhTvXtOR6nFAjwyvUESb98+gyLp/lGqDM+skURG1Sg/9feTzE/w0IRI5CZUDZITkZPwUP62aOSOocIybxSZq/BUTSSqG+UTHigy30XgqegsTxSqSgZJK8vw2JroUzXKyX5qy/N/qzFmLZV5dOtpP5WD5yqWyBfokvFOt0ECxhmNPImiOzn9Bnl1lBUVa0d4p8EgAeNE6eqJjdHIA2ihRCMHw+hGuZ+KQQvhDVq5hm4sj5FRzkMTUwrPa2zsnOhMQxMLCs9rbowRnUtarB2bB8FgBfLmxxjR+RTaGO8oZKa6eQmMEU+gjaoIPHdiQNYT2rgEjcyeFwpVyDqgkRqdVuDFILGm5EoyLWhkgUZOQdZSqLMxFIFGohsk8gSSJkPcZekytDIxSOQhJxdiROgbaGWcRr6FnDchQpvnju2lHIeceRqpyeP8UljN5lkijVr9Sp57TyLfQ0okRGjzBXJpapCISi5XQrO907F5HnF5yEjTSC3+utPp7XmdsAAZXx/8FOI0ep1fqD4i1iDj8QNCs+UKhGnkOGQ8JY0voZ1nJPIVZMyTyOfQzmsSOQUZH0jkB2jnI4n8CBnPSaR2P5PAFIl8DRlLJFKrL+YLLx7d7fAeMl5qH3m30zO5yIedHkM74woiH96syLt+5I/27falqTCM4/jvH2hSpq/DbFZaafbgNrYlbAh7U2PrzSKGMDeCYIYgiKCiokNQ0UDxCUFQE0UFU0pQQ8n6s7p3juvedTYdO4+3dT4vfP/luu5zdo7bfx35X5xJGvmPXl0/Xq/Ir1oiX8oWIJy3JPIz1Pj2Mp+In11J5HeosUAiRXwKqcnJRr6FGkckUsTnyZp8/VCjLdt25y/x3gzUEK1Q49cdQrx3PDRyDWp00cgOCOYLjYxBjdc0Urj3roM08g3U8NJI4W6UixUk0gdVPpJI4e4hnytkcmMc6izkN964IdQ/mgFfRb6aRajTluuTdUEosQqiFep0ZPs4wa48gzTyC9RJ3SBmIJR2GhmGSrskcleoQ+n7QBrjUGvhIk/EQ6k4kotQa5VGHkEgn2jkGtR6RyPHIZA4jQxBLdcurRToM3rI4XDkH0kXVDuikQK9sWt1MLyzH+p15CfevSvQvsYdOfwuqdIrXijZhCC2HPkqHG5oMMMLs4S5vvY7iHZo8Usq5AR5B+J2UGvQ4tVdahVCGHRQbmgyQyPHhfjRhCuudVupjvzE2tpaId70JBxUAtp4d3li1qQAo3RNVVbmN8Z90KgtP1GMUSYqs3hkK7R6zRMFGWV2kCQzDM3mLgqFGaU8SJ65CO3e1VLjXljKF5f6eGYIOpjJT7x3714bLDVYSbVDD5skkUnBQmFnJbUFXczwRMkcLNSu2yCpLpLIjMAyCeUgY9DJb6mRG/fDIu4fTifJPIBeurKJ3K1bli1su1NCBqmXOdLIrMISayyQVC5CPymSyETewQLbbFlJpjMMHa2SRmYyANO5p6qctHIQenJNkkRmzgWTudqrqlglVznlgq66aCNzDJMNskZaGYPOlkiiBRefIVZIM/uhN39EGfl8FCZKsDxa+eM9dNehbHwe6YJpYtEqZWUCBliiicxYEiYJSY0cX1adBSZpIzPhgSm2e55VUc4eNwyRjNBGZmwTJtiKPnumrAzBICPKxvv3I6MwXIw1KivXYJglZSMzAoOtN0uNpLITxvH+Jo2yFRhqSGqklQc+GMg/8Zw0Spa8MIyvs7m5oHLKDUO9HitofPBgOgWDhM9Yo7KyJwyDbUaUjczYCAyxHpUaaWV0G4YbjdBGmREr6+usq2suqIyGYBhaSRuZ29NJ6Cx0VscUVMZgipEijcxyADoKsDHySF65DpOMRgojme4R6GZ9p7quSGU0AdNsjikbZYce6GL7oLpajqQLG92CiZITpJFbTkGzcCdLLFbZE4KpUhO5Rhr58OGyR+MU09U5isieMEzmny7eyMwnoVpotl4OLBzlgR+mC8zzRhLJHAYDUCGwPltfzyNp5U83rLDCI2ljQ0NDd98GypRJ79RLaKRcWTcEiyQneCOJlPQel3E6Ped7jY2NPFJRafYlh65s0UZZU1NTb9+oHyX5M+lsoRRZvJKtqpVWLo1skj3q7TvZSOES4cxweu8Jc2XkECyWnL5skHKj5MWL/b6BYNDDgPEwweBAev8p80TSeHnlWQiWc610l47MamlpuXnhsYQVypFXjXJnyPIvDkn888UbaWQLj6SVV0b+9EMUG9OssXTkzVKRysrTDATiXekuGvlIU+SQD2LxL3eTxjIjCyvrO8XZVC61fOm2lhvJdIYhJv9xdwPd1pKRxfd151zEKeYETnp5YxmRpPJ0OADBJfu0Raa3cB0ETg7VRs6KP0TOfzKvbKSR9Mojmx0W+SQW5d047i0dmas8Pc8I9UPbMgQ2Bg57S0XuzQ5krtGSFufyBAf69otF7qcHgp7rOsBC/AErODzM/ngY2Gw2m81ms9lsNpvNZrPZbDabzSauP6UMJdVYd1vZAAAAAElFTkSuQmCC\"\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 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 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 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 = 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 static get white() {\n return Color.WHITE;\n }\n static get black() {\n return Color.BLACK;\n }\n }\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 TypedValue = android.util.TypedValue;\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(this._attrBinder);\n this.initBindElement(bindElement);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n get mID() {\n if (this.bindElement) {\n let id = this.bindElement.id;\n return id ? id : null;\n }\n return null;\n }\n get mLeft() { return this._mLeft; }\n set mLeft(value) {\n this._mLeft = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mRight() { return this._mRight; }\n set mRight(value) {\n this._mRight = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mTop() { return this._mTop; }\n set mTop(value) {\n this._mTop = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mBottom() { return this._mBottom; }\n set mBottom(value) {\n this._mBottom = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mScrollX() { return this._mScrollX; }\n set mScrollX(value) { this._mScrollX = Math.floor(value); }\n get mScrollY() { return this._mScrollY; }\n set mScrollY(value) {\n if (Number.isNaN(value) || value == null) {\n console.error('set mScrollY value is ' + value);\n value = 0;\n }\n this._mScrollY = Math.floor(value);\n }\n initBindAttr(a) {\n a.addAttr('background', (value) => {\n this.setBackground(a.parseDrawable(value));\n }, () => {\n return this.mBackground;\n });\n a.addAttr('padding', (value) => {\n if (value == null)\n value = 0;\n let [left, top, right, bottom] = a.parsePaddingMarginLTRB(value);\n this._setPaddingWithUnit(left, top, right, bottom);\n }, () => {\n return this.mPaddingTop + ' ' + this.mPaddingRight + ' ' + this.mPaddingBottom + ' ' + this.mPaddingLeft;\n }),\n a.addAttr('paddingLeft', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(value, this.mPaddingTop, this.mPaddingRight, this.mPaddingBottom);\n }, () => {\n return this.mPaddingLeft;\n }),\n a.addAttr('paddingStart', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(value, this.mPaddingTop, this.mPaddingRight, this.mPaddingBottom);\n }, () => {\n return this.mPaddingLeft;\n }),\n a.addAttr('paddingTop', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, value, this.mPaddingRight, this.mPaddingBottom);\n }, () => {\n return this.mPaddingTop;\n }),\n a.addAttr('paddingRight', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, this.mPaddingTop, value, this.mPaddingBottom);\n }, () => {\n return this.mPaddingRight;\n }),\n a.addAttr('paddingEnd', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, this.mPaddingTop, value, this.mPaddingBottom);\n }, () => {\n return this.mPaddingRight;\n }),\n a.addAttr('paddingBottom', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, this.mPaddingTop, this.mPaddingRight, value);\n }, () => {\n return this.mPaddingBottom;\n }),\n a.addAttr('scrollX', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.scrollTo(value, this.mScrollY);\n }, () => {\n return this.getScrollX();\n }),\n a.addAttr('scrollY', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.scrollTo(this.mScrollX, value);\n }, () => {\n return this.getScrollY();\n }),\n a.addAttr('alpha', (value) => {\n this.setAlpha(a.parseNumber(value, this.getAlpha()));\n }, () => {\n return this.getAlpha();\n }),\n a.addAttr('transformPivotX', (value) => {\n this.setPivotX(a.parseNumber(value, this.getPivotX()));\n }, () => {\n return this.getPivotX();\n }),\n a.addAttr('transformPivotY', (value) => {\n this.setPivotY(a.parseNumber(value, this.getPivotY()));\n }, () => {\n return this.getPivotY();\n }),\n a.addAttr('translationX', (value) => {\n this.setTranslationX(a.parseNumber(value, this.getTranslationX()));\n }, () => {\n return this.getTranslationX();\n }),\n a.addAttr('translationY', (value) => {\n this.setTranslationY(a.parseNumber(value, this.getTranslationY()));\n }, () => {\n return this.getTranslationY();\n }),\n a.addAttr('rotation', (value) => {\n this.setRotation(a.parseNumber(value, this.getRotation()));\n }, () => {\n return this.getRotation();\n }),\n a.addAttr('rotationX', (value) => {\n }),\n a.addAttr('rotationY', (value) => {\n }),\n a.addAttr('scaleX', (value) => {\n this.setScaleX(a.parseNumber(value, this.getScaleX()));\n }, () => {\n return this.getScaleX();\n }),\n a.addAttr('scaleY', (value) => {\n this.setScaleY(a.parseNumber(value, this.getScaleY()));\n }, () => {\n return this.getScaleY();\n }),\n a.addAttr('tag', (value) => {\n this.setTag(value);\n }),\n a.addAttr('id', (value) => {\n this.setId(value);\n }),\n a.addAttr('focusable', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK);\n }\n }, () => {\n return this.isFocusable();\n }),\n a.addAttr('focusableInTouchMode', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE, View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK);\n }\n }, () => {\n return this.isFocusableInTouchMode();\n }),\n a.addAttr('clickable', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.CLICKABLE, View.CLICKABLE);\n }\n }, () => {\n return this.isClickable();\n }),\n a.addAttr('longClickable', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.LONG_CLICKABLE, View.LONG_CLICKABLE);\n }\n }, () => {\n return this.isLongClickable();\n }),\n a.addAttr('saveEnabled', (value) => {\n if (a.parseBoolean(value, false)) {\n }\n }),\n a.addAttr('duplicateParentState', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.DUPLICATE_PARENT_STATE, View.DUPLICATE_PARENT_STATE);\n }\n }),\n a.addAttr('visibility', (value) => {\n if (value === 'gone')\n this.setVisibility(View.GONE);\n else if (value === 'invisible')\n this.setVisibility(View.INVISIBLE);\n else if (value === 'visible')\n this.setVisibility(View.VISIBLE);\n }, () => {\n return this.getVisibility();\n }),\n a.addAttr('scrollbars', (value) => {\n if (value === 'none') {\n this.setHorizontalScrollBarEnabled(false);\n this.setVerticalScrollBarEnabled(false);\n }\n }),\n a.addAttr('isScrollContainer', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setScrollContainer(true);\n }\n }),\n a.addAttr('minWidth', (value) => {\n this.setMinimumWidth(a.parseNumber(value, 0));\n }, () => {\n return this.mMinWidth;\n }),\n a.addAttr('minHeight', (value) => {\n this.setMinimumHeight(a.parseNumber(value, 0));\n }, () => {\n return this.mMinHeight;\n }),\n a.addAttr('onClick', (value) => {\n if (a.parseBoolean(value))\n this.setClickable(true);\n }),\n a.addAttr('overScrollMode', (value) => {\n let scrollMode = View[('OVER_SCROLL_' + value).toUpperCase()];\n if (scrollMode === undefined)\n scrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS;\n this.setOverScrollMode(scrollMode);\n }),\n a.addAttr('layerType', (value) => {\n if ((value + '').toLowerCase() == 'software') {\n this.setLayerType(View.LAYER_TYPE_SOFTWARE);\n }\n else {\n this.setLayerType(View.LAYER_TYPE_NONE);\n }\n });\n a.addAttr('cornerRadius', (value) => {\n let [leftTop, topRight, rightBottom, bottomLeft] = a.parsePaddingMarginLTRB(value);\n this.setCornerRadius(a.parseNumber(leftTop, 0), a.parseNumber(topRight, 0), a.parseNumber(rightBottom, 0), a.parseNumber(bottomLeft, 0));\n }, () => {\n return this.mCornerRadiusTopLeft + ' ' + this.mCornerRadiusTopRight + ' ' + this.mCornerRadiusBottomRight + ' ' + this.mCornerRadiusBottomLeft;\n });\n a.addAttr('cornerRadiusTopLeft', (value) => {\n this.setCornerRadiusTopLeft(a.parseNumber(value, this.mCornerRadiusTopLeft));\n }, () => {\n return this.mCornerRadiusTopLeft;\n });\n a.addAttr('cornerRadiusTopRight', (value) => {\n this.setCornerRadiusTopRight(a.parseNumber(value, this.mCornerRadiusTopRight));\n }, () => {\n return this.mCornerRadiusTopRight;\n });\n a.addAttr('cornerRadiusBottomLeft', (value) => {\n this.setCornerRadiusBottomLeft(a.parseNumber(value, this.mCornerRadiusBottomLeft));\n }, () => {\n return this.mCornerRadiusBottomLeft;\n });\n a.addAttr('cornerRadiusBottomRight', (value) => {\n this.setCornerRadiusBottomRight(a.parseNumber(value, this.mCornerRadiusBottomRight));\n }, () => {\n return this.mCornerRadiusBottomRight;\n });\n a.addAttr('viewShadowColor', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n this.setShadowView(this.mShadowPaint.shadowRadius, this.mShadowPaint.shadowDx, this.mShadowPaint.shadowDy, a.parseColor(value, this.mShadowPaint.shadowColor));\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowColor;\n });\n a.addAttr('viewShadowDx', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n let dx = this._attrBinder.parseNumber(value, this.mShadowPaint.shadowDx);\n this.setShadowView(this.mShadowPaint.shadowRadius, dx, this.mShadowPaint.shadowDy, this.mShadowPaint.shadowColor);\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowDx;\n });\n a.addAttr('viewShadowDy', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n let dy = a.parseNumber(value, this.mShadowPaint.shadowDy);\n this.setShadowView(this.mShadowPaint.shadowRadius, this.mShadowPaint.shadowDx, dy, this.mShadowPaint.shadowColor);\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowDy;\n });\n a.addAttr('viewShadowRadius', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n let radius = this._attrBinder.parseNumber(value, this.mShadowPaint.shadowRadius);\n this.setShadowView(radius, this.mShadowPaint.shadowDx, this.mShadowPaint.shadowDy, this.mShadowPaint.shadowColor);\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowRadius;\n });\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 dm = Resources.getDisplayMetrics();\n let width = view.getWidth();\n let height = view.getHeight();\n let padLeft = TypedValue.complexToDimensionPixelSize(left, width, dm);\n let padTop = TypedValue.complexToDimensionPixelSize(top, height, dm);\n let padRight = TypedValue.complexToDimensionPixelSize(right, width, dm);\n let padBottom = TypedValue.complexToDimensionPixelSize(bottom, height, dm);\n view.setPadding(padLeft, padTop, padRight, padBottom);\n let unit = 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 = TypedValue.complexToDimensionPixelSize(left, width, dm);\n let padTopN = TypedValue.complexToDimensionPixelSize(top, height, dm);\n let padRightN = TypedValue.complexToDimensionPixelSize(right, width, dm);\n let padBottomN = TypedValue.complexToDimensionPixelSize(bottom, height, dm);\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 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 }\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 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 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 (!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 }\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 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 this.getListenerInfo().mOnLongClickListener = l;\n }\n playSoundEffect(soundConstant) {\n }\n performHapticFeedback(feedbackConstant) {\n return false;\n }\n performClick(event) {\n let handle = false;\n if (this.bindElementOnClickAttr) {\n handle = eval(this.bindElementOnClickAttr);\n }\n let li = this.mListenerInfo;\n if (li != null && li.mOnClickListener != null) {\n handle = li.mOnClickListener.onClick(this) || handle;\n }\n return handle;\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 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 }\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 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);\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.multiplyAlpha(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.multiplyAlpha(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 this.mPrivateFlags |= View.PFLAG_DRAWING_CACHE_VALID;\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 this.syncDrawStateToElement();\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 = new Array(drawableState.length + extraSpace);\n System.arraycopy(drawableState, 0, fullState, 0, drawableState.length);\n }\n else {\n fullState = new Array(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 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 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 let originProto = Object.getPrototypeOf(this);\n console.dir(Object.assign(Object.create(originProto), this));\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 findViewByPredicateTraversal(predicate, childToSkip) {\n if (predicate.apply(this)) {\n return this;\n }\n return null;\n }\n findViewById(id) {\n if (!id)\n return null;\n if (id == this.bindElement.id) {\n return this;\n }\n return this.findViewTraversal(id);\n }\n findViewTraversal(id) {\n let bindEle = this.bindElement.querySelector('#' + id);\n return bindEle ? bindEle[View.AndroidViewProperty] : null;\n }\n findViewByPredicate(predicate) {\n return this.findViewByPredicateTraversal(predicate, 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 if (this.bindElement)\n this.bindElement.id = 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.bindElementOnClickAttr = this.bindElement.getAttribute('onclick');\n this.bindElement.removeAttribute('onclick');\n if (this.bindElementOnClickAttr)\n this.setClickable(true);\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._parseInitedAttribute();\n this._initAttrObserver();\n }\n requestSyncBoundToElement(immediately = false) {\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 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.left = (left - pScrollX) / density + 'px';\n bind.style.top = (top - pScrollY) / density + 'px';\n bind.style.width = width / density + 'px';\n bind.style.height = height / density + 'px';\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 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 syncDrawStateToElement() {\n const bind = this.bindElement;\n if (this.isPressed())\n bind.classList.add('_pressed');\n else\n bind.classList.remove('_pressed');\n if (this.isEnabled())\n bind.classList.remove('_disabled');\n else\n bind.classList.add('_disabled');\n if (this.isFocused())\n bind.classList.add('_focused');\n else\n bind.classList.remove('_focused');\n if (this.isSelected())\n bind.classList.add('_selected');\n else\n bind.classList.remove('_selected');\n if (this.isActivated())\n bind.classList.add('_activated');\n else\n bind.classList.remove('_activated');\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 _parseInitedAttribute() {\n for (let [key, value] of this._stateAttrList.getDefaultStateAttr().getAttrMap().entries()) {\n key = 'android:' + key;\n this.bindElement.removeAttribute(key);\n if (value != null) {\n this.bindElement.setAttribute(key, value);\n }\n }\n let id = this.bindElement.getAttribute('android:id');\n if (id)\n this.bindElement.id = id;\n }\n _fireInitedAttributeChange() {\n for (let attr of Array.from(this.bindElement.attributes)) {\n this.onBindElementAttributeChanged(attr.name, null, attr.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 && attrValue != null) {\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 hasAttributeIgnoreCase(name) {\n return this.getAttributeIgnoreCase(name) != null;\n }\n getAttributeIgnoreCase(name) {\n if (!(typeof name === 'string'))\n return null;\n name = name.toLowerCase();\n if (name.startsWith('android:'))\n name = name.substring('android:'.length);\n for (let attr of Array.from(this.bindElement.attributes)) {\n let attrName = attr.name.toLowerCase();\n if (attrName.startsWith('android:'))\n attrName = attrName.substring('android:'.length);\n if (attrName == name)\n return attr.value;\n }\n return null;\n }\n applyDefaultAttributes(attrs) {\n for (let key in attrs) {\n if (!this.hasAttributeIgnoreCase(key)) {\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 = new Array(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_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 = new Array(2);\n this.mScrollContainers = new Set();\n this.mInvalidateChildLocation = new Array(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 })(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 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 let mCanvasContent = this.mCanvasElement.getContext('2d');\n mCanvasContent.clearRect(left, top, width, height);\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 canvas.clearColor();\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 }\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 initImpl() {\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 let historyLocking = false;\n let pendingFuncLock = [];\n function init() {\n removeLastHistoryIfFaked();\n ensureLockDo(_init);\n history.go = function (delta) {\n PageStack.go(delta);\n };\n history.back = function () {\n PageStack.go(-1);\n };\n history.forward = function () {\n PageStack.go(1);\n };\n }\n PageStack.init = init;\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 history.replaceState(PageStack.currentStack, null, '#');\n }\n ensureLastHistoryFaked();\n initOnpopstate();\n window.addEventListener('load', () => {\n window.removeEventListener('popstate', onpopstateListener);\n setTimeout(initOnpopstate, 0);\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 (firePageOpen(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 if (firePageClose(stackList[stackList.length - 1].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 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 go(-1, pageAlreadyClose);\n }\n PageStack.back = back;\n function openPage(pageId, extra) {\n pageId += '';\n if (firePageOpen(pageId, extra)) {\n notifyNewPageOpened(pageId);\n }\n }\n PageStack.openPage = openPage;\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 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 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 if (PageStack.DEBUG)\n console.log('notifyPageClosed', pageId);\n if (historyLocking) {\n ensureLockDo(() => {\n notifyPageClosed(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 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 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 ensureLockDo(func) {\n if (!historyLocking) {\n func();\n return;\n }\n pendingFuncLock.push(func);\n _queryLockDo();\n }\n function ensureLockDoAtFront(func, runNowIfNotLock = false) {\n if (!historyLocking && 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) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n else {\n let f;\n while (f = pendingFuncLock.shift()) {\n f();\n if (historyLocking) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n break;\n }\n }\n }\n }\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n function removeLastHistoryIfFaked() {\n if (history.state && history.state.isFake) {\n if (PageStack.DEBUG)\n console.log('remove Fake History');\n history.replaceState({}, null, '');\n historyGo(-1, false);\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 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 }\n scheduleApplicationShow() {\n this.scheduleActivityResume();\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 let isRootActivity = this.isRootActivity(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 (isRootActivity) {\n PageStack.back(true);\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.mCalled = false;\n activity.performPause();\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + ActivityThread.getActivityName(activity) + \" did not call through to super.onPause()\");\n }\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.mCalled = false;\n activity.performPause();\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + ActivityThread.getActivityName(activity) + \" did not call through to super.onPause()\");\n }\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 var MotionEvent = android.view.MotionEvent;\n var KeyEvent = android.view.KeyEvent;\n var Intent = android.content.Intent;\n var ActivityThread = android.app.ActivityThread;\n class AndroidUI {\n constructor(androidUIElement) {\n this._canvas = document.createElement(\"canvas\");\n this._windowBound = new android.graphics.Rect();\n this.tempRect = new android.graphics.Rect();\n this.touchEvent = new MotionEvent();\n this.touchAvailable = false;\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._viewRootImpl.androidUIElement = this.androidUIElement;\n this.rootResourceElement = this.androidUIElement.querySelector('resources');\n if (this.rootResourceElement)\n this.androidUIElement.removeChild(this.rootResourceElement);\n else\n this.rootResourceElement = document.createElement('resources');\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 this.mApplication = new android.app.Application(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 }\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.touchAvailable = true;\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 if (this.touchAvailable)\n return;\n isMouseDown = true;\n this.refreshWindowBound();\n this.androidUIElement.focus();\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 (this.touchAvailable)\n return;\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 if (this.touchAvailable)\n return;\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 (this.touchAvailable)\n return;\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 showDebugLayout() {\n if (this.windowManager.getWindowsLayout().bindElement.parentNode === null) {\n this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);\n }\n }\n }\n AndroidUI.BindToElementName = 'AndroidUI';\n androidui.AndroidUI = AndroidUI;\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 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.showDebugLayout();\n }\n }\n }\n androidui.AndroidUIElement = AndroidUIElement;\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.showDebugLayout();\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 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})(androidui || (androidui = {}));\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 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.androidUIElement.appendChild(this._showFPSNode);\n }\n this._showFPSNode.innerText = 'FPS:' + fps.toFixed(1);\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 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 = Number.MIN_SAFE_INTEGER;\n Integer.MAX_VALUE = Number.MAX_SAFE_INTEGER;\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 TypedValue = android.util.TypedValue;\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 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 const a = this._attrBinder;\n a.addAttr('clipChildren', (value) => {\n this.setClipChildren(a.parseBoolean(value));\n }, () => {\n return this.getClipChildren();\n });\n a.addAttr('clipToPadding', (value) => {\n this.setClipToPadding(a.parseBoolean(value));\n }, () => {\n return this.isClipToPadding();\n });\n a.addAttr('animationCache', (value) => {\n this.setAnimationCacheEnabled(a.parseBoolean(value, true));\n });\n a.addAttr('persistentDrawingCache', (value) => {\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 });\n a.addAttr('addStatesFromChildren', (value) => {\n this.setAddStatesFromChildren(a.parseBoolean(value, false));\n });\n a.addAttr('alwaysDrawnWithCache', (value) => {\n this.setAlwaysDrawnWithCacheEnabled(a.parseBoolean(value, true));\n });\n a.addAttr('descendantFocusability', (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 a.addAttr('splitMotionEvents', (value) => {\n this.setMotionEventSplittingEnabled(a.parseBoolean(value, false));\n });\n }\n get mChildrenCount() {\n return this.mChildren.length;\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_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 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 : new Array(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 }\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 }\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 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 }\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 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 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 this._attrBinder.addAttr('width', (value) => {\n if (value == null)\n value = -2;\n this.width = value;\n }, () => {\n return this._widthOrig;\n });\n this._attrBinder.addAttr('height', (value) => {\n if (value == null)\n value = -2;\n this.height = value;\n }, () => {\n return this._heightOrig;\n });\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 this._width = TypedValue.complexToDimensionPixelSize(this._width, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.error(e);\n this._width = -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 this._height = TypedValue.complexToDimensionPixelSize(this._height, parentHeight, this._measuringMeasureSpec);\n }\n catch (e) {\n console.error(e);\n this._height = -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.split(\"layout_\")[1];\n this._attrBinder.onAttrChange(layoutParamFiled, attr.value, context);\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();\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 super(src);\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 else if (args.length == 2) {\n super(args[0], args[1]);\n }\n this._attrBinder.addAttr('marginLeft', (value) => {\n if (value == null)\n value = 0;\n this.leftMargin = value;\n }, () => {\n return this._leftMarginOrig;\n });\n this._attrBinder.addAttr('marginStart', (value) => {\n if (value == null)\n value = 0;\n this.leftMargin = value;\n }, () => {\n return this._leftMarginOrig;\n });\n this._attrBinder.addAttr('marginTop', (value) => {\n if (value == null)\n value = 0;\n this.topMargin = value;\n }, () => {\n return this._topMarginOrig;\n });\n this._attrBinder.addAttr('marginRight', (value) => {\n if (value == null)\n value = 0;\n this.rightMargin = value;\n }, () => {\n return this._rightMarginOrig;\n });\n this._attrBinder.addAttr('marginEnd', (value) => {\n if (value == null)\n value = 0;\n this.rightMargin = value;\n }, () => {\n return this._rightMarginOrig;\n });\n this._attrBinder.addAttr('marginBottom', (value) => {\n if (value == null)\n value = 0;\n this.bottomMargin = value;\n }, () => {\n return this._bottomMargin;\n });\n this._attrBinder.addAttr('margin', (value) => {\n if (value == null)\n value = 0;\n let [left, top, right, bottom] = this._attrBinder.parsePaddingMarginLTRB(value);\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n });\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 this._leftMargin = TypedValue.complexToDimensionPixelSize(this._leftMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._leftMargin = 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 this._topMargin = TypedValue.complexToDimensionPixelSize(this._topMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._topMargin = 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 this._rightMargin = TypedValue.complexToDimensionPixelSize(this._rightMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._rightMargin = 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 this._bottomMargin = TypedValue.complexToDimensionPixelSize(this._bottomMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._bottomMargin = 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();\n this.gravity = -1;\n if (args.length === 1 && args[0] instanceof LayoutParams) {\n super(args[0]);\n this.gravity = args[0].gravity;\n }\n else {\n let [width, height, gravity = -1] = args;\n super(width, height);\n this.gravity = gravity;\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 = new Array(length);\n this.spanEnds = new Array(length);\n this.spanFlags = new Array(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 = new Array(10);\n }\n else if (ns == stops.length) {\n let nstops = new Array(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 = new Array(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 }\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 this.mWindowsLayout.addView(decorView, wparams);\n decorView.dispatchAttachedToWindow(window.mAttachInfo, 0);\n if (wparams.isFocusable()) {\n this.clearWindowFocus();\n decorView.dispatchWindowFocusChanged(true);\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 }\n clearWindowFocus() {\n }\n }\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 dispatchKeyEvent(event) {\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() && child.dispatchKeyEvent(event)) {\n return true;\n }\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 = new Array(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.Window_this = window;\n this.bindElement.classList.add(window.mContext.constructor.name);\n this.setBackgroundColor(android.graphics.Color.WHITE);\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 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 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.scheduleLaunchActivity(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 }\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 this.mCalled = false;\n this.onPause();\n this.mResumed = false;\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onPause()\")`);\n }\n this.mResumed = false;\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 = new Array(VelocityTracker.NUM_PAST);\n this.pastY = new Array(VelocityTracker.NUM_PAST);\n this.pastTime = new Array(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 = new Array(SplineOverScroller.NB_SAMPLES + 1);\n SplineOverScroller.SPLINE_TIME = new Array(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 = new Array(LinearLayout.VERTICAL_GRAVITY_COUNT);\n this.mMaxDescent = new Array(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();\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 super(args[0]);\n }\n else {\n let [width, height, weight = 0] = args;\n super(width, height);\n this.weight = weight;\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.parseNumber(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 (function (InputType) {\n InputType[InputType[\"TYPE_NULL\"] = 0] = \"TYPE_NULL\";\n InputType[InputType[\"TYPE_CLASS_TEXT\"] = 1] = \"TYPE_CLASS_TEXT\";\n InputType[InputType[\"TYPE_CLASS_URI\"] = 2] = \"TYPE_CLASS_URI\";\n InputType[InputType[\"TYPE_CLASS_EMAIL_ADDRESS\"] = 3] = \"TYPE_CLASS_EMAIL_ADDRESS\";\n InputType[InputType[\"TYPE_CLASS_NUMBER\"] = 4] = \"TYPE_CLASS_NUMBER\";\n InputType[InputType[\"TYPE_CLASS_PHONE\"] = 5] = \"TYPE_CLASS_PHONE\";\n InputType[InputType[\"TYPE_PASSWORD\"] = 6] = \"TYPE_PASSWORD\";\n InputType[InputType[\"TYPE_TEXT_PASSWORD\"] = 7] = \"TYPE_TEXT_PASSWORD\";\n InputType[InputType[\"TYPE_TEXT_VISIBLE_PASSWORD\"] = 8] = \"TYPE_TEXT_VISIBLE_PASSWORD\";\n InputType[InputType[\"TYPE_NUMBER_PASSWORD\"] = 9] = \"TYPE_NUMBER_PASSWORD\";\n InputType[InputType[\"TYPE_NUMBER_SIGNED\"] = 10] = \"TYPE_NUMBER_SIGNED\";\n InputType[InputType[\"TYPE_NUMBER_DECIMAL\"] = 11] = \"TYPE_NUMBER_DECIMAL\";\n })(text.InputType || (text.InputType = {}));\n var InputType = text.InputType;\n var 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 LimitCode.TYPE_NUMBER_PASSWORD = [\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_NUMBER_SIGNED = [\n KeyEvent.KEYCODE_Minus,\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_NUMBER_DECIMAL = [\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 onInvalidated() { }\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 = new Array(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 = new Array(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 = new Array((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 = new Array(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 = new Array(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 = new Array(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 = new Array(DynamicLayout.COLUMNS_ELLIPSIZE);\n start[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n start = new Array(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 = new Array(DynamicLayout.COLUMNS_ELLIPSIZE);\n ints[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n ints = new Array(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 = new Array(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 = new Array((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 = new Array((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 = new Array(newSize);\n let blockIndices = new Array(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 = new Array(blockEndLines.length);\n this.mBlockIndices = new Array(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 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.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 const a = this._attrBinder;\n a.addAttr('textColorHighlight', (value) => {\n this.setHighlightColor(a.parseColor(value, this.mHighlightColor));\n }, () => {\n return this.getHighlightColor();\n });\n a.addAttr('textColor', (value) => {\n let color = a.parseColorList(value);\n if (color)\n this.setTextColor(color);\n }, () => {\n return this.mTextColor;\n });\n a.addAttr('textColorHint', (value) => {\n let color = a.parseColorList(value);\n if (color)\n this.setHintTextColor(color);\n }, () => {\n return this.mHintTextColor;\n });\n a.addAttr('textSize', (value) => {\n let size = a.parseNumber(value, this.mTextPaint.getTextSize());\n this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);\n }, () => {\n return this.mTextPaint.getTextSize();\n });\n a.addAttr('textAllCaps', (value) => {\n this.setAllCaps(a.parseBoolean(value, true));\n });\n a.addAttr('shadowColor', (value) => {\n this.setShadowLayer(this.mShadowRadius, this.mShadowDx, this.mShadowDy, a.parseColor(value, this.mTextPaint.shadowColor));\n }, () => {\n return this.getShadowColor();\n });\n a.addAttr('shadowDx', (value) => {\n let dx = a.parseNumber(value, this.mShadowDx);\n this.setShadowLayer(this.mShadowRadius, dx, this.mShadowDy, this.mTextPaint.shadowColor);\n }, () => {\n return this.getShadowDx();\n });\n a.addAttr('shadowDy', (value) => {\n let dy = a.parseNumber(value, this.mShadowDy);\n this.setShadowLayer(this.mShadowRadius, this.mShadowDx, dy, this.mTextPaint.shadowColor);\n }, () => {\n return this.getShadowDy();\n });\n a.addAttr('shadowRadius', (value) => {\n let radius = a.parseNumber(value, this.mShadowRadius);\n this.setShadowLayer(radius, this.mShadowDx, this.mShadowDy, this.mTextPaint.shadowColor);\n }, () => {\n return this.getShadowRadius();\n });\n a.addAttr('drawableLeft', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom);\n }, () => {\n return this.getCompoundDrawables()[0];\n });\n a.addAttr('drawableTop', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, drawable, dr.mDrawableRight, dr.mDrawableBottom);\n }, () => {\n return this.getCompoundDrawables()[1];\n });\n a.addAttr('drawableRight', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom);\n }, () => {\n return this.getCompoundDrawables()[2];\n });\n a.addAttr('drawableBottom', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, drawable);\n }, () => {\n return this.getCompoundDrawables()[3];\n });\n a.addAttr('drawablePadding', (value) => {\n this.setCompoundDrawablePadding(a.parseNumber(value));\n }, () => {\n return this.getCompoundDrawablePadding();\n });\n a.addAttr('maxLines', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.setMaxLines(value);\n }, () => {\n return this.getMaxLines();\n });\n a.addAttr('maxHeight', (value) => {\n this.setMaxHeight(a.parseNumber(value, this.getMaxHeight()));\n }, () => {\n return this.getMaxHeight();\n });\n a.addAttr('lines', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.setLines(value);\n }, () => {\n if (this.getMaxLines() === this.getMinLines())\n return this.getMaxLines();\n return null;\n });\n a.addAttr('height', (value) => {\n value = a.parseNumber(value, -1);\n if (value >= 0)\n this.setHeight(value);\n }, () => {\n if (this.getMaxHeight() === this.getMinimumHeight())\n return this.getMaxHeight();\n return null;\n });\n a.addAttr('minLines', (value) => {\n this.setMinLines(a.parseNumber(value, this.getMinLines()));\n }, () => {\n return this.getMinLines();\n });\n a.addAttr('minHeight', (value) => {\n this.setMinHeight(a.parseNumber(value, this.getMinHeight()));\n }, () => {\n return this.getMinHeight();\n });\n a.addAttr('maxEms', (value) => {\n this.setMaxEms(a.parseNumber(value, this.getMaxEms()));\n }, () => {\n return this.getMaxEms();\n });\n a.addAttr('maxWidth', (value) => {\n this.setMaxWidth(a.parseNumber(value, this.getMaxWidth()));\n }, () => {\n return this.getMaxWidth();\n });\n a.addAttr('ems', (value) => {\n let ems = a.parseNumber(value, null);\n if (ems != null)\n this.setEms(ems);\n }, () => {\n if (this.getMinEms() === this.getMaxEms())\n return this.getMaxEms();\n return null;\n });\n a.addAttr('width', (value) => {\n value = a.parseNumber(value, -1);\n if (value >= 0)\n this.setWidth(value);\n }, () => {\n if (this.getMinWidth() === this.getMaxWidth())\n return this.getMinWidth();\n return null;\n });\n a.addAttr('minEms', (value) => {\n this.setMinEms(a.parseNumber(value, this.getMinEms()));\n }, () => {\n return this.getMinEms();\n });\n a.addAttr('minWidth', (value) => {\n this.setMinWidth(a.parseNumber(value, this.getMinWidth()));\n }, () => {\n return this.getMinWidth();\n });\n a.addAttr('gravity', (value) => {\n this.setGravity(a.parseGravity(value, this.mGravity));\n }, () => {\n return this.mGravity;\n });\n a.addAttr('hint', (value) => {\n this.setHint(a.parseString(value));\n }, () => {\n return this.getHint();\n });\n a.addAttr('text', (value) => {\n this.setText(a.parseString(value));\n }, () => {\n return this.getText();\n });\n a.addAttr('scrollHorizontally', (value) => {\n this.setHorizontallyScrolling(a.parseBoolean(value, false));\n });\n a.addAttr('singleLine', (value) => {\n this.setSingleLine(a.parseBoolean(value, false));\n });\n a.addAttr('ellipsize', (value) => {\n let ellipsize = TextUtils.TruncateAt[(value + '').toUpperCase()];\n if (ellipsize)\n this.setEllipsize(ellipsize);\n });\n a.addAttr('marqueeRepeatLimit', (value) => {\n let marqueeRepeatLimit = a.parseNumber(value, -1);\n if (marqueeRepeatLimit >= 0)\n this.setMarqueeRepeatLimit(marqueeRepeatLimit);\n });\n a.addAttr('includeFontPadding', (value) => {\n this.setIncludeFontPadding(a.parseBoolean(value, false));\n });\n a.addAttr('enabled', (value) => {\n this.setEnabled(a.parseBoolean(value, this.isEnabled()));\n }, () => {\n return this.isEnabled();\n });\n a.addAttr('lineSpacingExtra', (value) => {\n this.setLineSpacing(a.parseNumber(value, this.mSpacingAdd), this.mSpacingMult);\n }, () => {\n return this.mSpacingAdd;\n });\n a.addAttr('lineSpacingMultiplier', (value) => {\n this.setLineSpacing(this.mSpacingAdd, a.parseNumber(value, this.mSpacingMult));\n }, () => {\n return this.mSpacingMult;\n });\n this.setTextSize(14);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n this.bindElement.innerHTML = this.bindElement.innerHTML.trim();\n let text = this.mText || this.bindElement.innerText;\n this.bindElement.innerHTML = '';\n this.setText(text, this.mBufferType);\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 = new Array(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 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 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 let transcriptMode = this._attrBinder.parseNumber(value, AbsListView.TRANSCRIPT_MODE_DISABLED);\n this.setTranscriptMode(transcriptMode);\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.parseNumber(value, 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();\n this.viewType = 0;\n this.scrappedFromPosition = 0;\n this.itemId = -1;\n if (args.length === 1) {\n super(args[0]);\n }\n else if (args.length === 2) {\n super(args[0], args[1]);\n }\n else if (args.length === 3) {\n super(args[0], args[1]);\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.parseNumber(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 = new Array(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 = new Array(checkedCount);\n System.arraycopy(ids, 0, result, 0, checkedCount);\n return result;\n }\n }\n return new Array(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_HSCROLL);\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_URI);\n break;\n case 'textEmailAddress':\n this.setInputType(InputType.TYPE_CLASS_EMAIL_ADDRESS);\n break;\n case 'textPassword':\n this.setInputType(InputType.TYPE_TEXT_PASSWORD);\n break;\n case 'textVisiblePassword':\n this.setInputType(InputType.TYPE_TEXT_VISIBLE_PASSWORD);\n break;\n case 'number':\n case 'numberSigned':\n case 'numberDecimal':\n this.setInputType(InputType.TYPE_CLASS_NUMBER);\n break;\n case 'numberPassword':\n this.setInputType(InputType.TYPE_NUMBER_PASSWORD);\n break;\n case 'phone':\n this.setInputType(InputType.TYPE_CLASS_PHONE);\n break;\n }\n });\n a.addAttr('maxLength', (value) => {\n this.mMaxLength = a.parseNumber(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() {\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.filterKeyCode(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 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 this.mSingleLineInputElement.onblur = () => {\n this.mSingleLineInputElement.style.opacity = '0';\n this.setForceDisableDrawText(false);\n };\n this.mSingleLineInputElement.onfocus = () => {\n this.mSingleLineInputElement.style.opacity = '1';\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n };\n this.mSingleLineInputElement.oninput = () => this.onInputValueChange();\n }\n if (this.inputElement === this.mSingleLineInputElement)\n return;\n if (this.inputElement && this.inputElement.parentElement) {\n this.bindElement.removeChild(this.inputElement);\n this.bindElement.appendChild(this.mSingleLineInputElement);\n }\n this.inputElement = 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 this.mMultilineInputElement.onblur = () => {\n this.mMultilineInputElement.style.opacity = '0';\n this.setForceDisableDrawText(false);\n };\n this.mMultilineInputElement.onfocus = () => {\n this.mMultilineInputElement.style.opacity = '1';\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n };\n this.mMultilineInputElement.oninput = () => this.onInputValueChange();\n }\n if (this.inputElement === this.mMultilineInputElement)\n return;\n if (this.inputElement && this.inputElement.parentElement) {\n this.bindElement.removeChild(this.inputElement);\n this.bindElement.appendChild(this.mMultilineInputElement);\n }\n this.inputElement = 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 performClick(event) {\n this.tryShowInputElement();\n return super.performClick(event);\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 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 isInputElementShowed() {\n return this.inputElement.parentElement != null;\n }\n setForceDisableDrawText(disable) {\n if (this.mForceDisableDraw == disable)\n return;\n this.mForceDisableDraw = disable;\n if (disable) {\n this.mTextPaint.setAlpha(0);\n }\n else {\n this.mTextPaint.setAlpha(255);\n }\n this.invalidate();\n }\n updateTextColors() {\n super.updateTextColors();\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n 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 }\n return super.onTouchEvent(event) || this.isInputElementShowed();\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.filterKeyCode(keyCode);\n }\n return false;\n }\n filterKeyCode(keyCode) {\n switch (this.mInputType) {\n case InputType.TYPE_NUMBER_SIGNED:\n if (keyCode === android.view.KeyEvent.KEYCODE_Minus && this.getText().length > 0)\n return true;\n return InputType.LimitCode.TYPE_NUMBER_SIGNED.indexOf(keyCode) === -1;\n case InputType.TYPE_NUMBER_DECIMAL:\n return InputType.LimitCode.TYPE_NUMBER_DECIMAL.indexOf(keyCode) === -1;\n case InputType.TYPE_CLASS_NUMBER:\n return InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode) === -1;\n case InputType.TYPE_NUMBER_PASSWORD:\n return InputType.LimitCode.TYPE_NUMBER_PASSWORD.indexOf(keyCode) === -1;\n case InputType.TYPE_CLASS_PHONE:\n return InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode) === -1;\n }\n return false;\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 }\n }\n onKeyDown(keyCode, event) {\n this.checkFilterKeyEventToDom(event);\n return super.onKeyDown(keyCode, event) || true;\n }\n onKeyUp(keyCode, event) {\n this.checkFilterKeyEventToDom(event);\n return super.onKeyUp(keyCode, event) || true;\n }\n requestSyncBoundToElement(immediately = false) {\n if (this.inputElement.parentNode && this.inputElement.style.opacity != '0') {\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 setInputType(type) {\n this.mInputType = type;\n this.inputElement.style['webkitTextSecurity'] = '';\n this.setTransformationMethod(null);\n switch (type) {\n case InputType.TYPE_NULL:\n this.switchToMultilineInputElement();\n this.setSingleLine(false);\n break;\n case InputType.TYPE_CLASS_TEXT:\n this.switchToMultilineInputElement();\n this.setSingleLine(false);\n break;\n case InputType.TYPE_CLASS_URI:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'url');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_CLASS_EMAIL_ADDRESS:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'email');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_NUMBER_SIGNED:\n case InputType.TYPE_NUMBER_DECIMAL:\n case InputType.TYPE_CLASS_NUMBER:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'number');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_NUMBER_PASSWORD:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'number');\n this.inputElement.style['webkitTextSecurity'] = 'disc';\n this.setSingleLine(true);\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n break;\n case InputType.TYPE_CLASS_PHONE:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'tel');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_TEXT_PASSWORD:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'password');\n this.setSingleLine(true);\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n break;\n case InputType.TYPE_TEXT_VISIBLE_PASSWORD:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'email');\n this.setSingleLine(true);\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 onAttachedToWindow() {\n this.getContext().androidUI.showDebugLayout();\n return super.onAttachedToWindow();\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 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 const a = this._attrBinder;\n a.addAttr('src', (value) => {\n let d = a.parseDrawable(value);\n if (d)\n this.setImageDrawable(d);\n else\n this.setImageURI(value);\n }, () => {\n return this.mDrawable;\n });\n a.addAttr('baselineAlignBottom', (value) => {\n this.setBaselineAlignBottom(a.parseBoolean(value, this.mBaselineAlignBottom));\n });\n a.addAttr('baseline', (value) => {\n this.setBaseline(a.parseNumber(value, this.mBaseline));\n }, () => {\n return this.mBaseline;\n });\n a.addAttr('adjustViewBounds', (value) => {\n this.setAdjustViewBounds(a.parseBoolean(value, false));\n });\n a.addAttr('maxWidth', (value) => {\n let baseValue = this.getParent() instanceof View ? this.getParent().getWidth() : 0;\n this.setMaxWidth(a.parseNumber(value, this.mMaxWidth, baseValue));\n }, () => {\n return this.mMaxWidth;\n });\n a.addAttr('maxHeight', (value) => {\n let baseValue = this.getParent() instanceof View ? this.getParent().getHeight() : 0;\n this.setMaxHeight(a.parseNumber(value, this.mMaxHeight, baseValue));\n }, () => {\n return this.mMaxHeight;\n });\n a.addAttr('scaleType', (value) => {\n this.setScaleType(ImageView.parseScaleType(value, this.mScaleType));\n }, () => {\n return this.mScaleType.toString();\n });\n a.addAttr('drawableAlpha', (value) => {\n this.setAlpha(a.parseNumber(value, this.mAlpha));\n }, () => {\n return this.mAlpha;\n });\n a.addAttr('cropToPadding', (value) => {\n this.setCropToPadding(a.parseBoolean(value, false));\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 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 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 this.requestLayout();\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 this.setAlpha(alpha);\n }\n setAlpha(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.parseNumber(value, 0));\n });\n this._attrBinder.addAttr('verticalSpacing', (value) => {\n this.setVerticalSpacing(this._attrBinder.parseNumber(value, 0));\n });\n this._attrBinder.addAttr('stretchMode', (value) => {\n let strechMode = this._attrBinder.parseNumber(value, -1);\n if (strechMode >= 0) {\n this.setStretchMode(strechMode);\n }\n });\n this._attrBinder.addAttr('columnWidth', (value) => {\n let columnWidth = this._attrBinder.parseNumber(value, -1);\n if (columnWidth > 0) {\n this.setColumnWidth(columnWidth);\n }\n });\n this._attrBinder.addAttr('numColumns', (value) => {\n this.setNumColumns(this._attrBinder.parseNumber(value, 1));\n });\n this._attrBinder.addAttr('gravity', (value) => {\n this.setNumColumns(this._attrBinder.parseNumber(value, 1));\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.parseNumber(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.parseNumber(value, defSelectionDividerDistance);\n });\n this._attrBinder.addAttr('internalMinHeight', (value) => {\n this.mMinHeight_ = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxHeight', (value) => {\n this.mMaxHeight = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMinWidth', (value) => {\n this.mMinWidth_ = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxWidth', (value) => {\n this.mMaxWidth = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxWidth', (value) => {\n this.mMaxWidth = this._attrBinder.parseNumber(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.parseNumber(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.parseNumber(value, this.mMinValue));\n });\n this._attrBinder.addAttr('maxValue', (value) => {\n this.setMaxValue(this._attrBinder.parseNumber(value, this.mMaxValue));\n });\n this._attrBinder.addAttr('itemCount', (value) => {\n this.SELECTOR_WHEEL_ITEM_COUNT = this._attrBinder.parseNumber(value, this.SELECTOR_WHEEL_ITEM_COUNT);\n this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2);\n this.mSelectorIndices = new Array(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 = new Array(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_6) {\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 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_6.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_6.ClipDrawable || (drawable_6.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.parseNumber(value, this.mDuration));\n }, () => {\n return this.mDuration;\n });\n a.addAttr('minWidth', (value) => {\n this.mMinWidth = Math.floor(a.parseNumber(value, this.mMinWidth));\n }, () => {\n return this.mMinWidth;\n });\n a.addAttr('maxWidth', (value) => {\n this.mMaxWidth = Math.floor(a.parseNumber(value, this.mMaxWidth));\n }, () => {\n return this.mMaxWidth;\n });\n a.addAttr('minHeight', (value) => {\n this.mMinHeight = Math.floor(a.parseNumber(value, this.mMinHeight));\n }, () => {\n return this.mMinHeight;\n });\n a.addAttr('maxHeight', (value) => {\n this.mMaxHeight = Math.floor(a.parseNumber(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.parseNumber(value, this.mMax));\n }, () => {\n return this.mMax;\n });\n a.addAttr('progress', (value) => {\n this.setProgress(a.parseNumber(value, this.mProgress));\n }, () => {\n return this.mProgress;\n });\n a.addAttr('secondaryProgress', (value) => {\n this.setSecondaryProgress(a.parseNumber(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 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 this._attrBinder.addAttr('checkedButton', (value) => {\n this.setCheckedId(value);\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 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.parseNumber(value));\n }, () => this.mThumbOffset);\n a.addAttr('disabledAlpha', (value) => {\n this.mDisabledAlpha = a.parseNumber(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.parseNumber(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.parseNumber(value, 0.5));\n }, () => this.getStepSize());\n a.addAttr('rating', (value) => {\n this.setRating(a.parseNumber(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.parseNumber(value, 0), this.mIndicatorRight);\n }, () => {\n return this.mIndicatorLeft;\n });\n this._attrBinder.addAttr('indicatorRight', (value) => {\n let num = this._attrBinder.parseNumber(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.parseNumber(value, ExpandableListView.CHILD_INDICATOR_INHERIT), this.mChildIndicatorRight);\n }, () => {\n return this.mChildIndicatorLeft;\n });\n this._attrBinder.addAttr('childIndicatorRight', (value) => {\n let num = this._attrBinder.parseNumber(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 ColorDrawable = android.graphics.drawable.ColorDrawable;\n var Color = android.graphics.Color;\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 = new ColorDrawable(Color.WHITE);\n let topDark = new ColorDrawable(Color.WHITE);\n let centerDark = new ColorDrawable(Color.WHITE);\n let bottomDark = new ColorDrawable(Color.WHITE);\n let fullBright = new ColorDrawable(Color.WHITE);\n let topBright = new ColorDrawable(Color.WHITE);\n let centerBright = new ColorDrawable(Color.WHITE);\n let bottomBright = new ColorDrawable(Color.WHITE);\n let bottomMedium = new ColorDrawable(Color.WHITE);\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.parseTextArray(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.parseNumber(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.parseNumber(value, 0);\n if (verticalOffset != 0) {\n popup.setVerticalOffset(verticalOffset);\n }\n });\n a.addAttr('dropDownHorizontalOffset', (value) => {\n const horizontalOffset = a.parseNumber(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.parseNumber(value, Gravity.CENTER);\n });\n a.addAttr('prompt', (value) => {\n this.mGravity = a.parseNumber(value, Gravity.CENTER);\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 android;\n(function (android) {\n var webkit;\n (function (webkit) {\n class WebViewClient {\n onPageStarted(view, url) {\n }\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 FrameLayout = android.widget.FrameLayout;\n class WebView extends FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n let density = this.getResources().getDisplayMetrics().density;\n this.setMinimumWidth(300 * density);\n this.setMinimumHeight(150 * density);\n this.initIFrameElement();\n }\n initIFrameElement() {\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 if (this.mClient) {\n this.mClient.onReceivedTitle(this, this.getTitle());\n this.mClient.onPageFinished(this, this.iFrameElement.src);\n }\n };\n this.bindElement.appendChild(this.iFrameElement);\n }\n loadUrl(url) {\n if (this.mClient)\n this.mClient.onPageStarted(this, url);\n this.iFrameElement.src = url;\n }\n loadData(data) {\n this.iFrameElement['srcdoc'] = data;\n }\n evaluateJavascript(script) {\n try {\n eval.call(this.iFrameElement.contentWindow, script);\n }\n catch (e) {\n console.warn(e);\n eval(script);\n }\n }\n stopLoading() {\n try {\n this.iFrameElement.contentWindow['stop']();\n }\n catch (e) {\n console.error(e);\n }\n }\n reload() {\n this.iFrameElement.src = this.iFrameElement.src;\n }\n getUrl() {\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 getContentHeight() {\n try {\n return this.iFrameElement.contentWindow.document.documentElement.offsetHeight;\n }\n catch (e) {\n console.warn(e);\n return 0;\n }\n }\n getContentWidth() {\n try {\n return this.iFrameElement.contentWindow.document.documentElement.offsetWidth;\n }\n catch (e) {\n console.warn(e);\n return 0;\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 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 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 = new Array(pointerId + 1);\n let imy = new Array(pointerId + 1);\n let lmx = new Array(pointerId + 1);\n let lmy = new Array(pointerId + 1);\n let iit = new Array(pointerId + 1);\n let edip = new Array(pointerId + 1);\n let edl = new Array(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 = new Array(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 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 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 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 requestSyncBoundToElement(immediately = true) {\n super.requestSyncBoundToElement(immediately);\n }\n onAttachedToWindow() {\n this.getContext().androidUI.showDebugLayout();\n return super.onAttachedToWindow();\n }\n }\n widget.HtmlBaseView = HtmlBaseView;\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 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.parseNumber(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.parseNumber(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 initImpl() {\n this.canvasId = ++sNextID;\n this.createCanvasImpl();\n }\n createCanvasImpl() {\n native.NativeApi.canvas.createCanvas(this.canvasId, this.mWidth, this.mHeight);\n }\n recycleImpl() {\n native.NativeApi.canvas.recycleCanvas(this.canvasId);\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 clearRectImpl(left, top, width, height) {\n native.NativeApi.canvas.clearRect(this.canvasId, left, top, width, height);\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 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, dstRect) {\n if (image instanceof native.NativeImage) {\n native.NativeApi.canvas.drawImage(this.canvasId, image.imageId, dstRect.left, dstRect.top, dstRect.width(), dstRect.height());\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);\n }\n drawOvalImpl(oval, style) {\n }\n drawCircleImpl(cx, cy, radius, style) {\n }\n drawArcImpl(oval, startAngle, sweepAngle, useCenter, style) {\n }\n drawRoundRectImpl(rect, 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);\n }\n multiplyAlphaImpl(alpha) {\n native.NativeApi.canvas.multiplyAlpha(this.canvasId, alpha);\n }\n setAlphaImpl(alpha) {\n native.NativeApi.canvas.setAlpha(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 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 let density = android.content.res.Resources.getDisplayMetrics().density;\n native.NativeApi.surface.createSurface(this.surfaceId, bound.left * density, bound.top * density, bound.right * density, bound.bottom * density);\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 let canvas = new SurfaceLockCanvas(width, height);\n native.NativeApi.surface.lockCanvas(this.surfaceId, canvas.canvasId, left, top, left + width, top + height);\n return canvas;\n }\n unlockCanvasAndPost(canvas) {\n if (canvas instanceof native.NativeCanvas) {\n native.NativeApi.surface.unlockCanvasAndPost(this.surfaceId, canvas.canvasId);\n native.NativeApi.canvas.recycleCanvas(canvas.canvasId);\n }\n else {\n throw Error('canvas is not NativeCanvas');\n }\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 SurfaceLockCanvas 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 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 }\n static notifyLoadFinish(imageId, width, height) {\n let image = NativeImageInstances.get(imageId);\n image.mImageWidth = width;\n image.mImageHeight = height;\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 }\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 const AndroidJsBridgeProperty = 'AndroidUIRuntime';\n const JSBridge = window[AndroidJsBridgeProperty];\n class NativeApi {\n }\n native.NativeApi = NativeApi;\n (function (NativeApi) {\n class CallQueues {\n constructor() {\n this.calls = [];\n }\n pushCall(method, methodArgs) {\n this.calls.push(new NativeCall(method, methodArgs));\n }\n clear() {\n this.calls = [];\n }\n toString() {\n return this.calls.join('\\n');\n }\n }\n class NativeCall {\n constructor(methodName, methodArgs) {\n this.method = methodName;\n this.args = methodArgs;\n }\n toString() {\n return this.method + JSON.stringify(this.args);\n }\n }\n let callQueues = new CallQueues();\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 callQueues.pushCall('lockCanvas', [surfaceId, canvasId, left, top, right, bottom]);\n }\n unlockCanvasAndPost(surfaceId, canvasId) {\n callQueues.pushCall('unlockCanvasAndPost', [surfaceId, canvasId]);\n JSBridge.batchCall(callQueues.toString());\n callQueues.clear();\n }\n }\n NativeApi.SurfaceApi = SurfaceApi;\n class CanvasApi {\n createCanvas(canvasId, width, height) {\n callQueues.pushCall('createCanvas', [canvasId, width, height]);\n }\n recycleCanvas(canvasId) {\n callQueues.pushCall('recycleCanvas', [canvasId]);\n }\n translate(canvasId, dx, dy) {\n callQueues.pushCall('translate', [canvasId, dx, dy]);\n }\n scale(canvasId, sx, sy) {\n callQueues.pushCall('scale', [canvasId, sx, sy]);\n }\n rotate(canvasId, degrees) {\n callQueues.pushCall('rotate', [canvasId, degrees]);\n }\n concat(canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y) {\n callQueues.pushCall('concat', [canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y]);\n }\n drawColor(canvasId, color) {\n callQueues.pushCall('drawColor', [canvasId, color]);\n }\n clearRect(canvasId, left, top, width, height) {\n callQueues.pushCall('clearRect', [canvasId, left, top, width, height]);\n }\n drawRect(canvasId, left, top, width, height) {\n callQueues.pushCall('drawRect', [canvasId, left, top, width, height]);\n }\n clipRect(canvasId, left, top, width, height) {\n callQueues.pushCall('clipRect', [canvasId, left, top, width, height]);\n }\n save(canvasId) {\n callQueues.pushCall('save', [canvasId]);\n }\n restore(canvasId) {\n callQueues.pushCall('restore', [canvasId]);\n }\n drawCanvas(canvasId, drawCanvasId, offsetX, offsetY) {\n callQueues.pushCall('drawCanvas', [canvasId, drawCanvasId, offsetX, offsetY]);\n }\n drawImage(canvasId, drawImageId, dstLeft, dstTop, dstWidth, dstHeight) {\n callQueues.pushCall('drawImage', [canvasId, drawImageId, dstLeft, dstTop, dstWidth, dstHeight]);\n }\n drawText(canvasId, text, x, y, fillStyle) {\n callQueues.pushCall('drawText', [canvasId, encodeURIComponent(text), x, y, fillStyle]);\n }\n setFillColor(canvasId, color) {\n callQueues.pushCall('setFillColor', [canvasId, color]);\n }\n multiplyAlpha(canvasId, alpha) {\n callQueues.pushCall('multiplyAlpha', [canvasId, alpha]);\n }\n setAlpha(canvasId, alpha) {\n callQueues.pushCall('setAlpha', [canvasId, alpha]);\n }\n setTextAlign(canvasId, align) {\n callQueues.pushCall('setTextAlign', [canvasId, align]);\n }\n setLineWidth(canvasId, width) {\n callQueues.pushCall('setLineWidth', [canvasId, width]);\n }\n setLineCap(canvasId, lineCap) {\n callQueues.pushCall('setLineCap', [canvasId, lineCap]);\n }\n setLineJoin(canvasId, lineJoin) {\n callQueues.pushCall('setLineJoin', [canvasId, lineJoin]);\n }\n setShadow(canvasId, radius, dx, dy, color) {\n callQueues.pushCall('setShadow', [canvasId, radius, dx, dy, color]);\n }\n setFontSize(canvasId, size) {\n callQueues.pushCall('setFontSize', [canvasId, size]);\n }\n setFont(canvasId, fontName) {\n callQueues.pushCall('setFont', [canvasId, fontName]);\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 NativeApi.surface = new NativeApi.SurfaceApi();\n NativeApi.canvas = new NativeApi.CanvasApi();\n NativeApi.image = JSBridge;\n }\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nwindow[`android`] = android;\nwindow[`java`] = java;\nwindow[`AndroidUI`] = androidui.AndroidUI;\nwindow.dispatchEvent(new CustomEvent(\"AndroidUILoadFinish\"));\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":["var androidui;\n(function (androidui) {\n androidui.sdk_version_info = `\nAndroidUI4Web: https://github.com/linfaxin/AndroidUI-WebApp\nversion: 0.4.0\nrelease type: Pre-release\nrelease date: 2016-02-12\n`;\n})(androidui || (androidui = {}));\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;\n this.top = t;\n this.right = right;\n this.bottom = bottom;\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;\n this.top = t;\n this.right = right;\n this.bottom = bottom;\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 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 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 }\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 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 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 = new Array(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 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\");\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\");\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.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.mAlpha = paint.mAlpha;\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 if (this.mAlpha == null)\n return 255;\n return this.mAlpha;\n }\n setAlpha(alpha) {\n this.mAlpha = alpha;\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 = new Array(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.mAlpha == 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.mAlpha != null) {\n canvas.multiplyAlpha(this.mAlpha / 255);\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 = new Array(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 = new Array(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 = new Array(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 = new Array(9);\n Matrix.multiply(tmp, this.mValues, matrix);\n this.mValues = tmp;\n }\n preTransform(matrix) {\n let tmp = new Array(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(new Array(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 = new Array(9);\n let tmp2 = new Array(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(new Array(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 = new Array(9);\n let tmp2 = new Array(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 = new Array(9);\n let tmp2 = new Array(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 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.initImpl();\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 initImpl() {\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._saveCount = 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 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.clearRectImpl(this.mCurrentClip.left, this.mCurrentClip.top, this.mCurrentClip.width(), this.mCurrentClip.height());\n }\n clearRectImpl(left, top, width, height) {\n this._mCanvasContent.clearRect(left, top, width, 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, image.browserImage.width, image.browserImage.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 multiplyAlpha(alpha) {\n if (typeof alpha === 'number') {\n this.multiplyAlphaImpl(alpha);\n }\n }\n multiplyAlphaImpl(alpha) {\n this._mCanvasContent.globalAlpha *= alpha;\n }\n setAlpha(alpha) {\n if (typeof alpha === 'number') {\n this.setAlphaImpl(alpha);\n }\n }\n setAlphaImpl(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 }\n Canvas.TempMatrixValue = new Array(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) {\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 }\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 notifySizeChangeSelf() {\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 }\n Drawable.ZERO_BOUNDS_RECT = new Rect();\n drawable.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 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_1) {\n class InsetDrawable extends drawable_1.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 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_1.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_2) {\n class ShadowDrawable extends drawable_2.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_2.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 this._class = new Class(this.constructor.name);\n }\n static get class() {\n return new Class(this.name);\n }\n hashCode() {\n return this.hash;\n }\n getClass() {\n return this._class;\n }\n equals(o) {\n return this === o;\n }\n }\n lang.JavaObject = JavaObject;\n class Class {\n constructor(name) {\n this.name = name;\n }\n getName() {\n return this.name;\n }\n getSimpleName() {\n return this.name;\n }\n }\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(activityClassOrName) {\n this.mRequestCode = -1;\n this.activityName = activityClassOrName;\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 }\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 }\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.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 let children = Array.from(domtree.children);\n let defStyle;\n let styleAttrValue = domtree.getAttribute('style');\n if (styleAttrValue) {\n defStyle = this.mContext.getResources().getAttr(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 \"id\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\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(layoutRef) {\n if (!layoutRef)\n return null;\n layoutRef = layoutRef.replace('/', '.').split('.').pop();\n if (!_layout_data[layoutRef])\n return null;\n _tempDiv.innerHTML = _layout_data[layoutRef];\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.id = '@android:layout/id';\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 android;\n(function (android) {\n var content;\n (function (content) {\n var res;\n (function (res) {\n var DisplayMetrics = android.util.DisplayMetrics;\n class Resources {\n constructor(context) {\n this.context = context;\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 let displayMetrics = this.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 displayMetrics.widthPixels = window.innerWidth * density;\n displayMetrics.heightPixels = window.innerHeight * density;\n return displayMetrics;\n }\n getObjectRef(refString) {\n if (refString.startsWith('@'))\n refString = refString.substring(1);\n if (refString == 'null')\n return null;\n try {\n return window.eval(refString);\n }\n catch (e) {\n console.log(e);\n }\n }\n getAttr(refString) {\n if (refString.startsWith('@android:attr/')) {\n refString = refString.substring('@android:attr/'.length);\n return android.R.attr[refString];\n }\n else if (Resources.buildAttrFinder && refString.startsWith('@attr/')) {\n return Resources.buildAttrFinder(refString);\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n return null;\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 else if (Resources.buildDrawableFinder && refString.startsWith('@drawable/')) {\n return Resources.buildDrawableFinder(refString);\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n }\n getColor(refString) {\n let s = this.getString(refString);\n return android.graphics.Color.parseColor(s);\n }\n getColorStateList(refString) {\n if (refString.startsWith('@android:color/')) {\n refString = refString.substring('@android:color/'.length);\n return android.R.color[refString];\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n }\n getString(refString, notFindValue = refString) {\n if (!refString || !refString.startsWith('@'))\n return notFindValue;\n if (refString.startsWith('@android:string/')) {\n refString = refString.substring('@android:string/'.length);\n return android.R.string_[refString];\n }\n let referenceArray = [];\n let attrValue = refString;\n while (attrValue && attrValue.startsWith('@')) {\n let reference = this.getReference(attrValue, false);\n if (!reference)\n return notFindValue;\n if (referenceArray.indexOf(reference) >= 0)\n throw Error('findReference Error: circle reference');\n referenceArray.push(reference);\n attrValue = reference.innerText;\n }\n return attrValue;\n }\n getTextArray(refString) {\n if (!refString || !refString.startsWith('@'))\n return null;\n let reference = this.getReference(refString, false);\n if (reference instanceof HTMLElement) {\n let array = [];\n for (let ele of Array.from(reference.children)) {\n if (ele instanceof HTMLElement)\n array.push(ele.innerText);\n }\n return array;\n }\n return null;\n }\n getLayout(refString) {\n if (!refString || !refString.trim().startsWith('@'))\n return null;\n let reference = this.getReference(refString, true);\n if (reference)\n return reference.firstElementChild;\n if (refString.startsWith('@android:layout/')) {\n return android.R.layout.getLayoutData(refString);\n }\n else if (Resources.buildLayoutFinder && refString.startsWith('@layout/')) {\n return Resources.buildLayoutFinder(refString);\n }\n else if (refString.startsWith('@')) {\n return this.getObjectRef(refString);\n }\n }\n getReference(refString, cloneNode = true) {\n if (refString)\n refString = refString.trim();\n if (refString && refString.startsWith('@')) {\n refString = refString.substring(1);\n let [tagName, ...refIds] = refString.split('/');\n if (!refIds || refIds.length === 0)\n return null;\n let resourcesElement = Resources.buildResourcesElement;\n if (tagName.startsWith('android:')) {\n tagName = tagName.substring('android:'.length);\n resourcesElement = Resources.SDKResourcesElement;\n }\n if (!tagName.startsWith('android-'))\n tagName = 'android-' + tagName;\n let q = 'resources ' + tagName + '#' + refIds.join(' #');\n let rootElement = this.context ? this.context.androidUI.rootResourceElement : Resources.emptySelectorNode;\n let el = rootElement.querySelector(q) || resourcesElement.querySelector(q);\n if (!el)\n return null;\n return cloneNode ? el.cloneNode(true) : el;\n }\n return null;\n }\n }\n Resources.instance = new Resources();\n Resources.emptySelectorNode = document.createElement('resources');\n Resources.buildResourcesElement = document.createElement('resources');\n Resources.SDKResourcesElement = document.createElement('resources');\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 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 identifier: 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 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.identifier;\n for (let i = 0, length = e.touches.length; i < length; i++) {\n if (e.touches[i].identifier === 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 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 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].identifier;\n }\n findPointerIndex(pointerId) {\n for (let i = 0, length = this.mTouchingPointers.length; i < length; i++) {\n if (this.mTouchingPointers[i].identifier === 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].identifier);\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].identifier);\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.identifier) >= 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 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 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 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 {\n m.target = args[0];\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 }\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 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 requestAnimationFrame(MessageQueue.loop);\n }\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 requestAnimationFrame(MessageQueue.loop);\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(mCallback) {\n this.mCallback = mCallback;\n }\n handleMessage(msg) {\n }\n dispatchMessage(msg) {\n if (msg.callback != null) {\n msg.callback.run.call(msg.callback);\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 class ColorStateList {\n constructor(states, colors) {\n this.mDefaultColor = 0xffff0000;\n this.mStateSpecs = states;\n this.mColors = colors;\n if (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 withAlpha(alpha) {\n let colors = new Array(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 complexToDimensionPixelSize(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 }\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 = new Array(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 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.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 static parseStateAttrName(stateDesc) {\n if (stateDesc.startsWith('android:'))\n stateDesc = stateDesc.substring('android:'.length);\n if (stateDesc.startsWith('state_'))\n stateDesc = stateDesc.substring('state_'.length);\n let stateSet = new Set();\n let stateParts = stateDesc.split('&');\n for (let part of stateParts) {\n let sign = 1;\n while (part.startsWith('!')) {\n sign *= -1;\n part = part.substring(1);\n }\n let stateValue = android.view.View['VIEW_STATE_' + part.toUpperCase()];\n if (stateValue !== undefined) {\n stateSet.add(stateValue * sign);\n }\n }\n return stateSet;\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 this.optStateAttr([]);\n this._initStyleAttributes(view.bindElement, []);\n }\n _initStyleAttributes(ele, inParseState) {\n let attributes = Array.from(ele.attributes);\n attributes.forEach((attr) => {\n if (attr.name === 'style' || attr.name === 'android:style') {\n this._initStyleAttr(attr, ele, inParseState);\n }\n });\n attributes.forEach((attr) => {\n if (attr.name === 'style' || attr.name === 'android:style') {\n return;\n }\n if (attr.name.startsWith('android:state_') || attr.name.startsWith('state_')) {\n return;\n }\n this._initStyleAttr(attr, ele, inParseState);\n });\n attributes.forEach((attr) => {\n if (attr.name.startsWith('android:state_') || attr.name.startsWith('state_')) {\n this._initStyleAttr(attr, ele, inParseState);\n }\n });\n }\n _initStyleAttr(attr, ele, inParseState) {\n let attrName = attr.name;\n if (!attrName.startsWith('android:'))\n return;\n attrName = attrName.substring('android:'.length);\n if (attrName === 'id')\n return;\n let attrValue = attr.value;\n if (attrName.startsWith('state_')) {\n let newStateSet = attr_1.StateAttr.parseStateAttrName(attrName);\n for (let state of inParseState) {\n newStateSet.add(state);\n }\n inParseState = Array.from(newStateSet).sort();\n }\n let _stateAttr = this.optStateAttr(inParseState);\n if (attrName.startsWith('state_') || attrName === 'style') {\n if (attrValue.startsWith('@')) {\n let reference = this.mView.getResources().getReference(attrValue, false);\n if (reference)\n this._initStyleAttributes(reference, inParseState);\n }\n else {\n for (let part of attrValue.split(';')) {\n let [name, value] = part.split(':');\n value = value ? this.mView.getResources().getString(value) : '';\n if (name)\n _stateAttr.setAttr(name.trim().toLowerCase(), value);\n }\n }\n }\n else {\n attrValue = this.mView.getResources().getString(attrValue);\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 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 ColorDrawable = android.graphics.drawable.ColorDrawable;\n var Color = android.graphics.Color;\n var ColorStateList = android.content.res.ColorStateList;\n var Resources = android.content.res.Resources;\n var TypedValue = android.util.TypedValue;\n class AttrBinder {\n constructor(host) {\n this.attrChangeMap = new Map();\n this.attrStashMap = new Map();\n this.objectRefs = [];\n this.host = host;\n }\n addAttr(attrName, onAttrChange, stashAttrValueWhenStateChange) {\n if (!attrName)\n return;\n attrName = attrName.toLowerCase();\n if (onAttrChange)\n this.attrChangeMap.set(attrName, onAttrChange);\n if (stashAttrValueWhenStateChange)\n this.attrStashMap.set(attrName, stashAttrValueWhenStateChange);\n }\n onAttrChange(attrName, attrValue, context) {\n this.mContext = context;\n if (!attrName)\n return;\n attrName = attrName.toLowerCase();\n let onAttrChangeCall = this.attrChangeMap.get(attrName);\n if (onAttrChangeCall)\n onAttrChangeCall.call(this.host, attrValue);\n }\n getAttrValue(attrName) {\n if (!attrName)\n return undefined;\n attrName = attrName.toLowerCase();\n let getAttrCall = this.attrStashMap.get(attrName);\n if (getAttrCall) {\n let value = getAttrCall.call(this.host);\n if (value == null)\n return null;\n if (typeof value === \"number\")\n return value + '';\n if (typeof value === \"boolean\")\n return value + '';\n if (typeof value === \"string\")\n return value;\n return this.setRefObject(value);\n }\n return undefined;\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 switch (parts.length) {\n case 1: return [parts[0], parts[0], parts[0], parts[0]];\n case 2: return [parts[1], parts[0], parts[1], parts[0]];\n case 3: return [parts[1], parts[0], parts[1], parts[2]];\n case 4: return [parts[3], parts[0], parts[1], parts[2]];\n }\n throw Error('not a padding or margin value : ' + value);\n }\n parseBoolean(value, defaultValue = true) {\n if (value === false || value === 'false' || value === '0')\n return false;\n else if (value === true || value === 'true' || value === '1' || value === '')\n return true;\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 gravity = Gravity.NO_GRAVITY;\n try {\n let parts = s.split(\"|\");\n parts.forEach((part) => {\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) || gravity === Gravity.NO_GRAVITY)\n gravity = defaultValue;\n return gravity;\n }\n parseDrawable(s) {\n if (!s)\n return null;\n if (s instanceof Drawable)\n return s;\n s = (s + '').trim();\n if (s.startsWith('@')) {\n let refObj = this.getRefObject(s);\n if (refObj)\n return refObj;\n return Resources.getSystem().getDrawable(s);\n }\n else if (s.startsWith('url(')) {\n s = s.substring('url('.length);\n if (s.endsWith(')'))\n s = s.substring(0, s.length - 1);\n return new androidui.image.NetDrawable(s);\n }\n else {\n try {\n let color = this.parseColor(s);\n return new ColorDrawable(color);\n }\n catch (e) {\n }\n }\n return null;\n }\n parseColor(value, defaultValue) {\n let color = Number.parseInt(value);\n if (Number.isInteger(color))\n return color;\n try {\n if (value.startsWith('@')) {\n return Resources.getSystem().getColor(value);\n }\n else {\n if (value.startsWith('#') && value.length === 4) {\n value = '#' + value[1] + value[1] + value[2] + value[2] + value[2] + value[2];\n }\n return Color.parseColor(value);\n }\n }\n catch (e) {\n if (defaultValue == null)\n throw e;\n }\n return defaultValue;\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('@')) {\n let refObj = this.getRefObject(value);\n if (refObj)\n return refObj;\n return Resources.getSystem().getColorStateList(value);\n }\n else {\n try {\n let color = this.parseColor(value);\n return ColorStateList.valueOf(color);\n }\n catch (e) {\n console.log(e);\n }\n }\n return null;\n }\n parseNumber(value, defaultValue = 0, baseValue = 0) {\n if (typeof value === 'string' && value.startsWith('@')) {\n value = Resources.getSystem().getString(value);\n }\n try {\n return TypedValue.complexToDimensionPixelSize(value, baseValue);\n }\n catch (e) {\n return defaultValue;\n }\n }\n parseString(value, defaultValue) {\n if (typeof value === 'string') {\n if (value.startsWith('@')) {\n return Resources.getSystem().getString(value);\n }\n return value;\n }\n return defaultValue;\n }\n parseTextArray(value) {\n value += '';\n if (value.startsWith('@')) {\n return Resources.getSystem().getTextArray(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.AttrBinder = 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 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, 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);\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 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.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_3) {\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 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 = new Array(N);\n this.mPaddingT = new Array(N);\n this.mPaddingR = new Array(N);\n this.mPaddingB = new Array(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_3.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_3.LayerDrawable || (drawable_3.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) {\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 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.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.RotateDrawable || (drawable.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_4) {\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 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_4.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_4.ScaleDrawable || (drawable_4.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 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 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 = new Array(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_5) {\n const DEBUG = android.util.Log.DBG_StateListDrawable;\n const TAG = \"StateListDrawable\";\n const DEFAULT_DITHER = true;\n class StateListDrawable extends drawable_5.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 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_5.StateListDrawable = StateListDrawable;\n class StateListState extends drawable_5.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 \"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 \"topPanel\": \"topPanel\",\n \"titleDividerTop\": \"titleDividerTop\",\n \"title_template\": \"title_template\",\n \"icon\": \"icon\",\n \"alertTitle\": \"alertTitle\",\n \"titleDivider\": \"titleDivider\",\n \"contentPanel\": \"contentPanel\",\n \"scrollView\": \"scrollView\",\n \"message\": \"message\",\n \"customPanel\": \"customPanel\",\n \"custom\": \"custom\",\n \"buttonPanel\": \"buttonPanel\",\n \"button2\": \"button2\",\n \"button3\": \"button3\",\n \"button1\": \"button1\",\n \"progress\": \"progress\",\n \"progress_percent\": \"progress_percent\",\n \"progress_number\": \"progress_number\",\n \"content\": \"content\",\n \"background\": \"background\",\n \"secondaryProgress\": \"secondaryProgress\",\n \"leftSpacer\": \"leftSpacer\",\n \"rightSpacer\": \"rightSpacer\",\n \"text1\": \"text1\",\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.mNinePatchBorderInfo = NinePatchDrawable.GlobalBorderInfoCache.get(this.mState.mImage.src);\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 this.mTmpRect.set(0, 1, 1, image.height - 1);\n image.getPixels(this.mTmpRect, (leftBorder) => {\n this.mTmpRect.set(1, 0, image.width - 1, 1);\n image.getPixels(this.mTmpRect, (topBorder) => {\n this.mTmpRect.set(image.width - 1, 1, image.width, image.height - 1);\n image.getPixels(this.mTmpRect, (rightBorder) => {\n this.mTmpRect.set(1, image.height - 1, image.width - 1, image.height);\n image.getPixels(this.mTmpRect, (bottomBorder) => {\n ninePatchBorderInfo = new NinePatchBorderInfo(leftBorder, topBorder, rightBorder, bottomBorder);\n NinePatchDrawable.GlobalBorderInfoCache.set(image.src, ninePatchBorderInfo);\n super.onLoad();\n });\n });\n });\n });\n }\n draw(canvas) {\n if (!this.mNinePatchBorderInfo)\n return;\n if (!this.isImageSizeEmpty()) {\n let cache = NinePatchDrawable.DrawNinePatchWithCache ? this.getNinePatchCache() : null;\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 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 ? 1 : bound.width() / staticWidthSum;\n let staticHeightPartScale = extraHeight >= 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 let dstHeight;\n if (isScalePart) {\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 }\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 NinePatchDrawable.DrawNinePatchWithCache = true;\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 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 tmpLength = 0;\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,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABPlBMVEUAAAAzteUzteU9PT0zteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteUzteU9Pj4zteUzteUzteUzteUzteUzteUzteUMLTkzteUzteUzteUzteUzteUvp9QzteU9P0AIHCQ9QUMAT2kLKTQAV3QKIy0zteUAUWwzteUzteUzteUdaIQOM0Ays+MytOQpkrkzteUnjLErdIwpb4YmX3IPOEcjfZ8AU28oaH4zteUql74updIscokKIy0upNAnjLEnjbMufJYveZI9fJApa4ImZXoysuEsn8kdcY4uptETRFYiepormcIkgKJEh500gZsAWXc2bYAAPlMAOEoOMkAAmcwAmMoAksMAjbwOn88/stkQoNAqqtUsq9VBs9k+stgoqdRavd43r9cAj79HttoyrdYAibcmqNRAenSqAAAAV3RSTlMAAwbNDAgOEgohFBkXGx0fL84lNCMQOCoReDInQiw9Sj/Ra9THdc1wO8gpSFY5fVFNSEVEz8vCgzTJyFxLP81jRj401NHPycViTtFbREA6L9XVzce3s134HTq+AAAE2UlEQVRo3u2ZaXfSUBCGS1EhQoCEBAIxCIlIxbYuWDfUarXu+1qlVFqty///A85MhiZw0ZsCnqPn5P3c8zzcmZu5ye1CnDhx/pckDvI32GLmTxczX/xiKHM0hOFHOWHHXPgMT6ePYNJpdsxDEOAJfgxDElCwYXY+4RFumhbGRAcpyDAzn/GmlUodp6RS4JiLgfmEB3o2m6FkwWHBKoaGmfmMz6hqjqKCghaRZsHsfMLn8nmFkvcVUCVYAgpm5Vs+XjEMXV9ZX38BCjRYwRJm48PPV3OKYuh2u7zibm66LwwypKBILJiRn1Hh1wPdKTxr3fvy5ZZ7lQxYpLS0Rsk/RYM0MJ7nOYVqFfiDr18Hl9CQU2EJ0AWZICrfqxaLnda93b1+f2cbDbgEi2okE4gzefj4HjliprKZnKK3nUKxWOo0L+3u9T586JFByUGNogmILeLTB/xyoVos1YZ8MOx9f+xCF7LYBLlgFMw56m//rOrzS0v1C8zHbG1tvXuKAjOygNkMRzxtfzXv82v1G5Vbuzs9xn/cv+Ya0QQJX8BgJENoLFu4PYlf9PnbAf/TNXeDBNQDucCnE5hnvmn5T5dhE//EjcraCL+1YUcTJFDg45mMI98fnDgbbAf4dZH/3LGVPO+ihEzAeBr4OPER7o8e2j5L9ROPBH6hrOM2NWVPcgIFwXnCbBXoiG870F7i3w/zzzRvFgtlQ4EKRRMgn3pKPxzZNNgQj+29eFLgl6pYIW6BXBAa+FAXnMk4NhGPPx/410f5t5eKBxWS9Bj3Z1KD+iCfy27bZYAD3cefHedXbtdgAbyHqEJyAZ8ogF9x168CnOg1xJ89v3p9+3M/zK/zAnjURRBggYivr7gvN1t3iiWiE/7c6oNR/kngUwcywwXIBJqGRwrzX8Fp0urUmX7+nMg/ERSIOiB7ChZBwDMN6nN3G06TteYNpi8vT+QX2ka4QHIBdACeWuTDtITTZK3yiOjAvzyBzw1IBSe+VEBDH/l8mqytPlle7na7Vy4PBH5R4EcSQAfcx99/Ap8M91efdLsPJ/E9T+RLBSYKnr6FQwRhZLh+5eEY/5T/+z1P4EcUGO7r/Y+kYMNEfsHzRH60EhlX3dOfhob+529vLn+bwC97nsCPKrA3WiHDzmAwia97DYEvF+Bzllds507I0Ov3exP4SqMh4YtPMj8Hiu5U7zTZwBH5uUZDzhdHBXZZMeDw7bBB4NeZn2k05Hxx2HETnGrpwohB5B9vaCJfLuAawRKWLlTYMJmf0jSBLzPgeRAsocaGgD86HzRNzhePzNASSnU2MH98vmmayJcLeAm+ocZ9ID6eXyPzU0syP2pQQK/pXKTAgPzmTShP1WkH8yeZFPlywaJfJDTQizrt1n3kw/FYgPMrmD8kWDhMSBB8ien0utJpnf7x41TrJuLLupE/4JNg4bCCsW89VMDUONUivB3+3FvEv144ZJLJsa9VeuvaWH8P9Dbic2rwRQyChWkEbLBSw7cv3YboOuLxe3jIn1Lw+xsDvjIwmT+tIHynYqGCLz1UoPv4YP5MJxgacBGwCnyLp+DF0Oi90LQCNtAi0GGlIHTrxHjmTytgQ+hTiiNczU0vEO8WxcvFqQWS21HAE39qwaHyLwoi37H/J/8liBMnTpw4ceLEkeQXuf5HL4dNIhQAAAAASUVORK5CYII=\"\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,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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 \"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 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 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 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 = 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 static get white() {\n return Color.WHITE;\n }\n static get black() {\n return Color.BLACK;\n }\n }\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 TypedValue = android.util.TypedValue;\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(this._attrBinder);\n this.initBindElement(bindElement);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n }\n get mID() {\n if (this.bindElement) {\n let id = this.bindElement.id;\n return id ? id : null;\n }\n return null;\n }\n get mLeft() { return this._mLeft; }\n set mLeft(value) {\n this._mLeft = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mRight() { return this._mRight; }\n set mRight(value) {\n this._mRight = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mTop() { return this._mTop; }\n set mTop(value) {\n this._mTop = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mBottom() { return this._mBottom; }\n set mBottom(value) {\n this._mBottom = Math.floor(value);\n this.requestSyncBoundToElement();\n }\n get mScrollX() { return this._mScrollX; }\n set mScrollX(value) { this._mScrollX = Math.floor(value); }\n get mScrollY() { return this._mScrollY; }\n set mScrollY(value) {\n if (Number.isNaN(value) || value == null) {\n console.error('set mScrollY value is ' + value);\n value = 0;\n }\n this._mScrollY = Math.floor(value);\n }\n initBindAttr(a) {\n a.addAttr('background', (value) => {\n this.setBackground(a.parseDrawable(value));\n }, () => {\n return this.mBackground;\n });\n a.addAttr('padding', (value) => {\n if (value == null)\n value = 0;\n let [left, top, right, bottom] = a.parsePaddingMarginLTRB(value);\n this._setPaddingWithUnit(left, top, right, bottom);\n }, () => {\n return this.mPaddingTop + ' ' + this.mPaddingRight + ' ' + this.mPaddingBottom + ' ' + this.mPaddingLeft;\n }),\n a.addAttr('paddingLeft', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(value, this.mPaddingTop, this.mPaddingRight, this.mPaddingBottom);\n }, () => {\n return this.mPaddingLeft;\n }),\n a.addAttr('paddingStart', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(value, this.mPaddingTop, this.mPaddingRight, this.mPaddingBottom);\n }, () => {\n return this.mPaddingLeft;\n }),\n a.addAttr('paddingTop', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, value, this.mPaddingRight, this.mPaddingBottom);\n }, () => {\n return this.mPaddingTop;\n }),\n a.addAttr('paddingRight', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, this.mPaddingTop, value, this.mPaddingBottom);\n }, () => {\n return this.mPaddingRight;\n }),\n a.addAttr('paddingEnd', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, this.mPaddingTop, value, this.mPaddingBottom);\n }, () => {\n return this.mPaddingRight;\n }),\n a.addAttr('paddingBottom', (value) => {\n if (value == null)\n value = 0;\n this._setPaddingWithUnit(this.mPaddingLeft, this.mPaddingTop, this.mPaddingRight, value);\n }, () => {\n return this.mPaddingBottom;\n }),\n a.addAttr('scrollX', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.scrollTo(value, this.mScrollY);\n }, () => {\n return this.getScrollX();\n }),\n a.addAttr('scrollY', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.scrollTo(this.mScrollX, value);\n }, () => {\n return this.getScrollY();\n }),\n a.addAttr('alpha', (value) => {\n this.setAlpha(a.parseNumber(value, this.getAlpha()));\n }, () => {\n return this.getAlpha();\n }),\n a.addAttr('transformPivotX', (value) => {\n this.setPivotX(a.parseNumber(value, this.getPivotX()));\n }, () => {\n return this.getPivotX();\n }),\n a.addAttr('transformPivotY', (value) => {\n this.setPivotY(a.parseNumber(value, this.getPivotY()));\n }, () => {\n return this.getPivotY();\n }),\n a.addAttr('translationX', (value) => {\n this.setTranslationX(a.parseNumber(value, this.getTranslationX()));\n }, () => {\n return this.getTranslationX();\n }),\n a.addAttr('translationY', (value) => {\n this.setTranslationY(a.parseNumber(value, this.getTranslationY()));\n }, () => {\n return this.getTranslationY();\n }),\n a.addAttr('rotation', (value) => {\n this.setRotation(a.parseNumber(value, this.getRotation()));\n }, () => {\n return this.getRotation();\n }),\n a.addAttr('rotationX', (value) => {\n }),\n a.addAttr('rotationY', (value) => {\n }),\n a.addAttr('scaleX', (value) => {\n this.setScaleX(a.parseNumber(value, this.getScaleX()));\n }, () => {\n return this.getScaleX();\n }),\n a.addAttr('scaleY', (value) => {\n this.setScaleY(a.parseNumber(value, this.getScaleY()));\n }, () => {\n return this.getScaleY();\n }),\n a.addAttr('tag', (value) => {\n this.setTag(value);\n }),\n a.addAttr('id', (value) => {\n this.setId(value);\n }),\n a.addAttr('focusable', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.FOCUSABLE, View.FOCUSABLE_MASK);\n }\n }, () => {\n return this.isFocusable();\n }),\n a.addAttr('focusableInTouchMode', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE, View.FOCUSABLE_IN_TOUCH_MODE | View.FOCUSABLE_MASK);\n }\n }, () => {\n return this.isFocusableInTouchMode();\n }),\n a.addAttr('clickable', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.CLICKABLE, View.CLICKABLE);\n }\n }, () => {\n return this.isClickable();\n }),\n a.addAttr('longClickable', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.LONG_CLICKABLE, View.LONG_CLICKABLE);\n }\n }, () => {\n return this.isLongClickable();\n }),\n a.addAttr('saveEnabled', (value) => {\n if (a.parseBoolean(value, false)) {\n }\n }),\n a.addAttr('duplicateParentState', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setFlags(View.DUPLICATE_PARENT_STATE, View.DUPLICATE_PARENT_STATE);\n }\n }),\n a.addAttr('visibility', (value) => {\n if (value === 'gone')\n this.setVisibility(View.GONE);\n else if (value === 'invisible')\n this.setVisibility(View.INVISIBLE);\n else if (value === 'visible')\n this.setVisibility(View.VISIBLE);\n }, () => {\n return this.getVisibility();\n }),\n a.addAttr('scrollbars', (value) => {\n if (value === 'none') {\n this.setHorizontalScrollBarEnabled(false);\n this.setVerticalScrollBarEnabled(false);\n }\n }),\n a.addAttr('isScrollContainer', (value) => {\n if (a.parseBoolean(value, false)) {\n this.setScrollContainer(true);\n }\n }),\n a.addAttr('minWidth', (value) => {\n this.setMinimumWidth(a.parseNumber(value, 0));\n }, () => {\n return this.mMinWidth;\n }),\n a.addAttr('minHeight', (value) => {\n this.setMinimumHeight(a.parseNumber(value, 0));\n }, () => {\n return this.mMinHeight;\n }),\n a.addAttr('onClick', (value) => {\n if (a.parseBoolean(value))\n this.setClickable(true);\n }),\n a.addAttr('overScrollMode', (value) => {\n let scrollMode = View[('OVER_SCROLL_' + value).toUpperCase()];\n if (scrollMode === undefined)\n scrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS;\n this.setOverScrollMode(scrollMode);\n }),\n a.addAttr('layerType', (value) => {\n if ((value + '').toLowerCase() == 'software') {\n this.setLayerType(View.LAYER_TYPE_SOFTWARE);\n }\n else {\n this.setLayerType(View.LAYER_TYPE_NONE);\n }\n });\n a.addAttr('cornerRadius', (value) => {\n let [leftTop, topRight, rightBottom, bottomLeft] = a.parsePaddingMarginLTRB(value);\n this.setCornerRadius(a.parseNumber(leftTop, 0), a.parseNumber(topRight, 0), a.parseNumber(rightBottom, 0), a.parseNumber(bottomLeft, 0));\n }, () => {\n return this.mCornerRadiusTopLeft + ' ' + this.mCornerRadiusTopRight + ' ' + this.mCornerRadiusBottomRight + ' ' + this.mCornerRadiusBottomLeft;\n });\n a.addAttr('cornerRadiusTopLeft', (value) => {\n this.setCornerRadiusTopLeft(a.parseNumber(value, this.mCornerRadiusTopLeft));\n }, () => {\n return this.mCornerRadiusTopLeft;\n });\n a.addAttr('cornerRadiusTopRight', (value) => {\n this.setCornerRadiusTopRight(a.parseNumber(value, this.mCornerRadiusTopRight));\n }, () => {\n return this.mCornerRadiusTopRight;\n });\n a.addAttr('cornerRadiusBottomLeft', (value) => {\n this.setCornerRadiusBottomLeft(a.parseNumber(value, this.mCornerRadiusBottomLeft));\n }, () => {\n return this.mCornerRadiusBottomLeft;\n });\n a.addAttr('cornerRadiusBottomRight', (value) => {\n this.setCornerRadiusBottomRight(a.parseNumber(value, this.mCornerRadiusBottomRight));\n }, () => {\n return this.mCornerRadiusBottomRight;\n });\n a.addAttr('viewShadowColor', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n this.setShadowView(this.mShadowPaint.shadowRadius, this.mShadowPaint.shadowDx, this.mShadowPaint.shadowDy, a.parseColor(value, this.mShadowPaint.shadowColor));\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowColor;\n });\n a.addAttr('viewShadowDx', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n let dx = this._attrBinder.parseNumber(value, this.mShadowPaint.shadowDx);\n this.setShadowView(this.mShadowPaint.shadowRadius, dx, this.mShadowPaint.shadowDy, this.mShadowPaint.shadowColor);\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowDx;\n });\n a.addAttr('viewShadowDy', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n let dy = a.parseNumber(value, this.mShadowPaint.shadowDy);\n this.setShadowView(this.mShadowPaint.shadowRadius, this.mShadowPaint.shadowDx, dy, this.mShadowPaint.shadowColor);\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowDy;\n });\n a.addAttr('viewShadowRadius', (value) => {\n if (!this.mShadowPaint)\n this.mShadowPaint = new Paint();\n let radius = this._attrBinder.parseNumber(value, this.mShadowPaint.shadowRadius);\n this.setShadowView(radius, this.mShadowPaint.shadowDx, this.mShadowPaint.shadowDy, this.mShadowPaint.shadowColor);\n }, () => {\n if (this.mShadowPaint)\n return this.mShadowPaint.shadowRadius;\n });\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 dm = Resources.getDisplayMetrics();\n let width = view.getWidth();\n let height = view.getHeight();\n let padLeft = TypedValue.complexToDimensionPixelSize(left, width, dm);\n let padTop = TypedValue.complexToDimensionPixelSize(top, height, dm);\n let padRight = TypedValue.complexToDimensionPixelSize(right, width, dm);\n let padBottom = TypedValue.complexToDimensionPixelSize(bottom, height, dm);\n view.setPadding(padLeft, padTop, padRight, padBottom);\n let unit = 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 = TypedValue.complexToDimensionPixelSize(left, width, dm);\n let padTopN = TypedValue.complexToDimensionPixelSize(top, height, dm);\n let padRightN = TypedValue.complexToDimensionPixelSize(right, width, dm);\n let padBottomN = TypedValue.complexToDimensionPixelSize(bottom, height, dm);\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 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 }\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 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 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 (!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 }\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 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 this.getListenerInfo().mOnLongClickListener = l;\n }\n playSoundEffect(soundConstant) {\n }\n performHapticFeedback(feedbackConstant) {\n return false;\n }\n performClick(event) {\n let handle = false;\n if (this.bindElementOnClickAttr) {\n handle = eval(this.bindElementOnClickAttr);\n }\n let li = this.mListenerInfo;\n if (li != null && li.mOnClickListener != null) {\n handle = li.mOnClickListener.onClick(this) || handle;\n }\n return handle;\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 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 }\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 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);\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.multiplyAlpha(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.multiplyAlpha(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 this.mPrivateFlags |= View.PFLAG_DRAWING_CACHE_VALID;\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 this.syncDrawStateToElement();\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 = new Array(drawableState.length + extraSpace);\n System.arraycopy(drawableState, 0, fullState, 0, drawableState.length);\n }\n else {\n fullState = new Array(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 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 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 let originProto = Object.getPrototypeOf(this);\n console.dir(Object.assign(Object.create(originProto), this));\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 findViewByPredicateTraversal(predicate, childToSkip) {\n if (predicate.apply(this)) {\n return this;\n }\n return null;\n }\n findViewById(id) {\n if (!id)\n return null;\n if (id == this.bindElement.id) {\n return this;\n }\n return this.findViewTraversal(id);\n }\n findViewTraversal(id) {\n let bindEle = this.bindElement.querySelector('#' + id);\n return bindEle ? bindEle[View.AndroidViewProperty] : null;\n }\n findViewByPredicate(predicate) {\n return this.findViewByPredicateTraversal(predicate, 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 if (this.bindElement)\n this.bindElement.id = 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.bindElementOnClickAttr = this.bindElement.getAttribute('onclick');\n this.bindElement.removeAttribute('onclick');\n if (this.bindElementOnClickAttr)\n this.setClickable(true);\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._parseInitedAttribute();\n this._initAttrObserver();\n }\n requestSyncBoundToElement(immediately = false) {\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 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.left = (left - pScrollX) / density + 'px';\n bind.style.top = (top - pScrollY) / density + 'px';\n bind.style.width = width / density + 'px';\n bind.style.height = height / density + 'px';\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 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 syncDrawStateToElement() {\n const bind = this.bindElement;\n if (this.isPressed())\n bind.classList.add('_pressed');\n else\n bind.classList.remove('_pressed');\n if (this.isEnabled())\n bind.classList.remove('_disabled');\n else\n bind.classList.add('_disabled');\n if (this.isFocused())\n bind.classList.add('_focused');\n else\n bind.classList.remove('_focused');\n if (this.isSelected())\n bind.classList.add('_selected');\n else\n bind.classList.remove('_selected');\n if (this.isActivated())\n bind.classList.add('_activated');\n else\n bind.classList.remove('_activated');\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 _parseInitedAttribute() {\n for (let [key, value] of this._stateAttrList.getDefaultStateAttr().getAttrMap().entries()) {\n key = 'android:' + key;\n this.bindElement.removeAttribute(key);\n if (value != null) {\n this.bindElement.setAttribute(key, value);\n }\n }\n let id = this.bindElement.getAttribute('android:id');\n if (id)\n this.bindElement.id = id;\n }\n _fireInitedAttributeChange() {\n for (let attr of Array.from(this.bindElement.attributes)) {\n this.onBindElementAttributeChanged(attr.name, null, attr.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 && attrValue != null) {\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 hasAttributeIgnoreCase(name) {\n return this.getAttributeIgnoreCase(name) != null;\n }\n getAttributeIgnoreCase(name) {\n if (!(typeof name === 'string'))\n return null;\n name = name.toLowerCase();\n if (name.startsWith('android:'))\n name = name.substring('android:'.length);\n for (let attr of Array.from(this.bindElement.attributes)) {\n let attrName = attr.name.toLowerCase();\n if (attrName.startsWith('android:'))\n attrName = attrName.substring('android:'.length);\n if (attrName == name)\n return attr.value;\n }\n return null;\n }\n applyDefaultAttributes(attrs) {\n for (let key in attrs) {\n if (!this.hasAttributeIgnoreCase(key)) {\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 = new Array(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_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 = new Array(2);\n this.mScrollContainers = new Set();\n this.mInvalidateChildLocation = new Array(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 })(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 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 let mCanvasContent = this.mCanvasElement.getContext('2d');\n mCanvasContent.clearRect(left, top, width, height);\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 canvas.clearColor();\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 }\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 initImpl() {\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 let historyLocking = false;\n let pendingFuncLock = [];\n function init() {\n removeLastHistoryIfFaked();\n ensureLockDo(_init);\n history.go = function (delta) {\n PageStack.go(delta);\n };\n history.back = function () {\n PageStack.go(-1);\n };\n history.forward = function () {\n PageStack.go(1);\n };\n }\n PageStack.init = init;\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 history.replaceState(PageStack.currentStack, null, '#');\n }\n ensureLastHistoryFaked();\n initOnpopstate();\n window.addEventListener('load', () => {\n window.removeEventListener('popstate', onpopstateListener);\n setTimeout(initOnpopstate, 0);\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 (firePageOpen(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 if (firePageClose(stackList[stackList.length - 1].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 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 go(-1, pageAlreadyClose);\n }\n PageStack.back = back;\n function openPage(pageId, extra) {\n pageId += '';\n if (firePageOpen(pageId, extra)) {\n notifyNewPageOpened(pageId);\n }\n }\n PageStack.openPage = openPage;\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 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 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 if (PageStack.DEBUG)\n console.log('notifyPageClosed', pageId);\n if (historyLocking) {\n ensureLockDo(() => {\n notifyPageClosed(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 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 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 ensureLockDo(func) {\n if (!historyLocking) {\n func();\n return;\n }\n pendingFuncLock.push(func);\n _queryLockDo();\n }\n function ensureLockDoAtFront(func, runNowIfNotLock = false) {\n if (!historyLocking && 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) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n else {\n let f;\n while (f = pendingFuncLock.shift()) {\n f();\n if (historyLocking) {\n clearTimeout(execLockedTimeoutId);\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n break;\n }\n }\n }\n }\n execLockedTimeoutId = setTimeout(execLockedFunctions, 0);\n }\n function removeLastHistoryIfFaked() {\n if (history.state && history.state.isFake) {\n if (PageStack.DEBUG)\n console.log('remove Fake History');\n history.replaceState({}, null, '');\n historyGo(-1, false);\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 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 }\n scheduleApplicationShow() {\n this.scheduleActivityResume();\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 let isRootActivity = this.isRootActivity(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 (isRootActivity) {\n PageStack.back(true);\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.mCalled = false;\n activity.performPause();\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + ActivityThread.getActivityName(activity) + \" did not call through to super.onPause()\");\n }\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.mCalled = false;\n activity.performPause();\n if (!activity.mCalled) {\n throw new Error(\"Activity \" + ActivityThread.getActivityName(activity) + \" did not call through to super.onPause()\");\n }\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 var MotionEvent = android.view.MotionEvent;\n var KeyEvent = android.view.KeyEvent;\n var Intent = android.content.Intent;\n var ActivityThread = android.app.ActivityThread;\n class AndroidUI {\n constructor(androidUIElement) {\n this._canvas = document.createElement(\"canvas\");\n this._windowBound = new android.graphics.Rect();\n this.tempRect = new android.graphics.Rect();\n this.touchEvent = new MotionEvent();\n this.touchAvailable = false;\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._viewRootImpl.androidUIElement = this.androidUIElement;\n this.rootResourceElement = this.androidUIElement.querySelector('resources');\n if (this.rootResourceElement)\n this.androidUIElement.removeChild(this.rootResourceElement);\n else\n this.rootResourceElement = document.createElement('resources');\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 this.mApplication = new android.app.Application(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 }\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.touchAvailable = true;\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 if (this.touchAvailable)\n return;\n isMouseDown = true;\n this.refreshWindowBound();\n this.androidUIElement.focus();\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 (this.touchAvailable)\n return;\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 if (this.touchAvailable)\n return;\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 (this.touchAvailable)\n return;\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 showDebugLayout() {\n if (this.windowManager.getWindowsLayout().bindElement.parentNode === null) {\n this.androidUIElement.appendChild(this.windowManager.getWindowsLayout().bindElement);\n }\n }\n }\n AndroidUI.BindToElementName = 'AndroidUI';\n androidui.AndroidUI = AndroidUI;\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 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.showDebugLayout();\n }\n }\n }\n androidui.AndroidUIElement = AndroidUIElement;\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.showDebugLayout();\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 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})(androidui || (androidui = {}));\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 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.androidUIElement.appendChild(this._showFPSNode);\n }\n this._showFPSNode.innerText = 'FPS:' + fps.toFixed(1);\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 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 = Number.MIN_SAFE_INTEGER;\n Integer.MAX_VALUE = Number.MAX_SAFE_INTEGER;\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 TypedValue = android.util.TypedValue;\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 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 const a = this._attrBinder;\n a.addAttr('clipChildren', (value) => {\n this.setClipChildren(a.parseBoolean(value));\n }, () => {\n return this.getClipChildren();\n });\n a.addAttr('clipToPadding', (value) => {\n this.setClipToPadding(a.parseBoolean(value));\n }, () => {\n return this.isClipToPadding();\n });\n a.addAttr('animationCache', (value) => {\n this.setAnimationCacheEnabled(a.parseBoolean(value, true));\n });\n a.addAttr('persistentDrawingCache', (value) => {\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 });\n a.addAttr('addStatesFromChildren', (value) => {\n this.setAddStatesFromChildren(a.parseBoolean(value, false));\n });\n a.addAttr('alwaysDrawnWithCache', (value) => {\n this.setAlwaysDrawnWithCacheEnabled(a.parseBoolean(value, true));\n });\n a.addAttr('descendantFocusability', (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 a.addAttr('splitMotionEvents', (value) => {\n this.setMotionEventSplittingEnabled(a.parseBoolean(value, false));\n });\n }\n get mChildrenCount() {\n return this.mChildren.length;\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_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 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 : new Array(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 }\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 }\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 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 }\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 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 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 this._attrBinder.addAttr('width', (value) => {\n if (value == null)\n value = -2;\n this.width = value;\n }, () => {\n return this._widthOrig;\n });\n this._attrBinder.addAttr('height', (value) => {\n if (value == null)\n value = -2;\n this.height = value;\n }, () => {\n return this._heightOrig;\n });\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 this._width = TypedValue.complexToDimensionPixelSize(this._width, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.error(e);\n this._width = -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 this._height = TypedValue.complexToDimensionPixelSize(this._height, parentHeight, this._measuringMeasureSpec);\n }\n catch (e) {\n console.error(e);\n this._height = -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.split(\"layout_\")[1];\n this._attrBinder.onAttrChange(layoutParamFiled, attr.value, context);\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();\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 super(src);\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 else if (args.length == 2) {\n super(args[0], args[1]);\n }\n this._attrBinder.addAttr('marginLeft', (value) => {\n if (value == null)\n value = 0;\n this.leftMargin = value;\n }, () => {\n return this._leftMarginOrig;\n });\n this._attrBinder.addAttr('marginStart', (value) => {\n if (value == null)\n value = 0;\n this.leftMargin = value;\n }, () => {\n return this._leftMarginOrig;\n });\n this._attrBinder.addAttr('marginTop', (value) => {\n if (value == null)\n value = 0;\n this.topMargin = value;\n }, () => {\n return this._topMarginOrig;\n });\n this._attrBinder.addAttr('marginRight', (value) => {\n if (value == null)\n value = 0;\n this.rightMargin = value;\n }, () => {\n return this._rightMarginOrig;\n });\n this._attrBinder.addAttr('marginEnd', (value) => {\n if (value == null)\n value = 0;\n this.rightMargin = value;\n }, () => {\n return this._rightMarginOrig;\n });\n this._attrBinder.addAttr('marginBottom', (value) => {\n if (value == null)\n value = 0;\n this.bottomMargin = value;\n }, () => {\n return this._bottomMargin;\n });\n this._attrBinder.addAttr('margin', (value) => {\n if (value == null)\n value = 0;\n let [left, top, right, bottom] = this._attrBinder.parsePaddingMarginLTRB(value);\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n });\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 this._leftMargin = TypedValue.complexToDimensionPixelSize(this._leftMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._leftMargin = 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 this._topMargin = TypedValue.complexToDimensionPixelSize(this._topMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._topMargin = 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 this._rightMargin = TypedValue.complexToDimensionPixelSize(this._rightMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._rightMargin = 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 this._bottomMargin = TypedValue.complexToDimensionPixelSize(this._bottomMargin, parentWidth, this._measuringMeasureSpec);\n }\n catch (e) {\n console.warn(e);\n this._bottomMargin = 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();\n this.gravity = -1;\n if (args.length === 1 && args[0] instanceof LayoutParams) {\n super(args[0]);\n this.gravity = args[0].gravity;\n }\n else {\n let [width, height, gravity = -1] = args;\n super(width, height);\n this.gravity = gravity;\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 = new Array(length);\n this.spanEnds = new Array(length);\n this.spanFlags = new Array(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 = new Array(10);\n }\n else if (ns == stops.length) {\n let nstops = new Array(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 = new Array(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 }\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 this.mWindowsLayout.addView(decorView, wparams);\n decorView.dispatchAttachedToWindow(window.mAttachInfo, 0);\n if (wparams.isFocusable()) {\n this.clearWindowFocus();\n decorView.dispatchWindowFocusChanged(true);\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 }\n clearWindowFocus() {\n }\n }\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 dispatchKeyEvent(event) {\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() && child.dispatchKeyEvent(event)) {\n return true;\n }\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 = new Array(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.Window_this = window;\n this.bindElement.classList.add(window.mContext.constructor.name);\n this.setBackgroundColor(android.graphics.Color.WHITE);\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 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 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.scheduleLaunchActivity(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 }\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 this.mCalled = false;\n this.onPause();\n this.mResumed = false;\n if (!this.mCalled) {\n throw Error(`new SuperNotCalledException(\"Activity \" + this.mComponent.toShortString() + \" did not call through to super.onPause()\")`);\n }\n this.mResumed = false;\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 = new Array(VelocityTracker.NUM_PAST);\n this.pastY = new Array(VelocityTracker.NUM_PAST);\n this.pastTime = new Array(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 = new Array(SplineOverScroller.NB_SAMPLES + 1);\n SplineOverScroller.SPLINE_TIME = new Array(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 = new Array(LinearLayout.VERTICAL_GRAVITY_COUNT);\n this.mMaxDescent = new Array(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();\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 super(args[0]);\n }\n else {\n let [width, height, weight = 0] = args;\n super(width, height);\n this.weight = weight;\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.parseNumber(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 (function (InputType) {\n InputType[InputType[\"TYPE_NULL\"] = 0] = \"TYPE_NULL\";\n InputType[InputType[\"TYPE_CLASS_TEXT\"] = 1] = \"TYPE_CLASS_TEXT\";\n InputType[InputType[\"TYPE_CLASS_URI\"] = 2] = \"TYPE_CLASS_URI\";\n InputType[InputType[\"TYPE_CLASS_EMAIL_ADDRESS\"] = 3] = \"TYPE_CLASS_EMAIL_ADDRESS\";\n InputType[InputType[\"TYPE_CLASS_NUMBER\"] = 4] = \"TYPE_CLASS_NUMBER\";\n InputType[InputType[\"TYPE_CLASS_PHONE\"] = 5] = \"TYPE_CLASS_PHONE\";\n InputType[InputType[\"TYPE_PASSWORD\"] = 6] = \"TYPE_PASSWORD\";\n InputType[InputType[\"TYPE_TEXT_PASSWORD\"] = 7] = \"TYPE_TEXT_PASSWORD\";\n InputType[InputType[\"TYPE_TEXT_VISIBLE_PASSWORD\"] = 8] = \"TYPE_TEXT_VISIBLE_PASSWORD\";\n InputType[InputType[\"TYPE_NUMBER_PASSWORD\"] = 9] = \"TYPE_NUMBER_PASSWORD\";\n InputType[InputType[\"TYPE_NUMBER_SIGNED\"] = 10] = \"TYPE_NUMBER_SIGNED\";\n InputType[InputType[\"TYPE_NUMBER_DECIMAL\"] = 11] = \"TYPE_NUMBER_DECIMAL\";\n })(text.InputType || (text.InputType = {}));\n var InputType = text.InputType;\n var 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 LimitCode.TYPE_NUMBER_PASSWORD = [\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_NUMBER_SIGNED = [\n KeyEvent.KEYCODE_Minus,\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_NUMBER_DECIMAL = [\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 onInvalidated() { }\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 = new Array(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 = new Array(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 = new Array((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 = new Array(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 = new Array(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 = new Array(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 = new Array(DynamicLayout.COLUMNS_ELLIPSIZE);\n start[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n start = new Array(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 = new Array(DynamicLayout.COLUMNS_ELLIPSIZE);\n ints[DynamicLayout.ELLIPSIS_START] = DynamicLayout.ELLIPSIS_UNDEFINED;\n }\n else {\n ints = new Array(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 = new Array(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 = new Array((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 = new Array((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 = new Array(newSize);\n let blockIndices = new Array(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 = new Array(blockEndLines.length);\n this.mBlockIndices = new Array(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 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.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 const a = this._attrBinder;\n a.addAttr('textColorHighlight', (value) => {\n this.setHighlightColor(a.parseColor(value, this.mHighlightColor));\n }, () => {\n return this.getHighlightColor();\n });\n a.addAttr('textColor', (value) => {\n let color = a.parseColorList(value);\n if (color)\n this.setTextColor(color);\n }, () => {\n return this.mTextColor;\n });\n a.addAttr('textColorHint', (value) => {\n let color = a.parseColorList(value);\n if (color)\n this.setHintTextColor(color);\n }, () => {\n return this.mHintTextColor;\n });\n a.addAttr('textSize', (value) => {\n let size = a.parseNumber(value, this.mTextPaint.getTextSize());\n this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);\n }, () => {\n return this.mTextPaint.getTextSize();\n });\n a.addAttr('textAllCaps', (value) => {\n this.setAllCaps(a.parseBoolean(value, true));\n });\n a.addAttr('shadowColor', (value) => {\n this.setShadowLayer(this.mShadowRadius, this.mShadowDx, this.mShadowDy, a.parseColor(value, this.mTextPaint.shadowColor));\n }, () => {\n return this.getShadowColor();\n });\n a.addAttr('shadowDx', (value) => {\n let dx = a.parseNumber(value, this.mShadowDx);\n this.setShadowLayer(this.mShadowRadius, dx, this.mShadowDy, this.mTextPaint.shadowColor);\n }, () => {\n return this.getShadowDx();\n });\n a.addAttr('shadowDy', (value) => {\n let dy = a.parseNumber(value, this.mShadowDy);\n this.setShadowLayer(this.mShadowRadius, this.mShadowDx, dy, this.mTextPaint.shadowColor);\n }, () => {\n return this.getShadowDy();\n });\n a.addAttr('shadowRadius', (value) => {\n let radius = a.parseNumber(value, this.mShadowRadius);\n this.setShadowLayer(radius, this.mShadowDx, this.mShadowDy, this.mTextPaint.shadowColor);\n }, () => {\n return this.getShadowRadius();\n });\n a.addAttr('drawableLeft', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(drawable, dr.mDrawableTop, dr.mDrawableRight, dr.mDrawableBottom);\n }, () => {\n return this.getCompoundDrawables()[0];\n });\n a.addAttr('drawableTop', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, drawable, dr.mDrawableRight, dr.mDrawableBottom);\n }, () => {\n return this.getCompoundDrawables()[1];\n });\n a.addAttr('drawableRight', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, drawable, dr.mDrawableBottom);\n }, () => {\n return this.getCompoundDrawables()[2];\n });\n a.addAttr('drawableBottom', (value) => {\n let dr = this.mDrawables || {};\n let drawable = a.parseDrawable(value);\n this.setCompoundDrawablesWithIntrinsicBounds(dr.mDrawableLeft, dr.mDrawableTop, dr.mDrawableRight, drawable);\n }, () => {\n return this.getCompoundDrawables()[3];\n });\n a.addAttr('drawablePadding', (value) => {\n this.setCompoundDrawablePadding(a.parseNumber(value));\n }, () => {\n return this.getCompoundDrawablePadding();\n });\n a.addAttr('maxLines', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.setMaxLines(value);\n }, () => {\n return this.getMaxLines();\n });\n a.addAttr('maxHeight', (value) => {\n this.setMaxHeight(a.parseNumber(value, this.getMaxHeight()));\n }, () => {\n return this.getMaxHeight();\n });\n a.addAttr('lines', (value) => {\n value = Number.parseInt(value);\n if (Number.isInteger(value))\n this.setLines(value);\n }, () => {\n if (this.getMaxLines() === this.getMinLines())\n return this.getMaxLines();\n return null;\n });\n a.addAttr('height', (value) => {\n value = a.parseNumber(value, -1);\n if (value >= 0)\n this.setHeight(value);\n }, () => {\n if (this.getMaxHeight() === this.getMinimumHeight())\n return this.getMaxHeight();\n return null;\n });\n a.addAttr('minLines', (value) => {\n this.setMinLines(a.parseNumber(value, this.getMinLines()));\n }, () => {\n return this.getMinLines();\n });\n a.addAttr('minHeight', (value) => {\n this.setMinHeight(a.parseNumber(value, this.getMinHeight()));\n }, () => {\n return this.getMinHeight();\n });\n a.addAttr('maxEms', (value) => {\n this.setMaxEms(a.parseNumber(value, this.getMaxEms()));\n }, () => {\n return this.getMaxEms();\n });\n a.addAttr('maxWidth', (value) => {\n this.setMaxWidth(a.parseNumber(value, this.getMaxWidth()));\n }, () => {\n return this.getMaxWidth();\n });\n a.addAttr('ems', (value) => {\n let ems = a.parseNumber(value, null);\n if (ems != null)\n this.setEms(ems);\n }, () => {\n if (this.getMinEms() === this.getMaxEms())\n return this.getMaxEms();\n return null;\n });\n a.addAttr('width', (value) => {\n value = a.parseNumber(value, -1);\n if (value >= 0)\n this.setWidth(value);\n }, () => {\n if (this.getMinWidth() === this.getMaxWidth())\n return this.getMinWidth();\n return null;\n });\n a.addAttr('minEms', (value) => {\n this.setMinEms(a.parseNumber(value, this.getMinEms()));\n }, () => {\n return this.getMinEms();\n });\n a.addAttr('minWidth', (value) => {\n this.setMinWidth(a.parseNumber(value, this.getMinWidth()));\n }, () => {\n return this.getMinWidth();\n });\n a.addAttr('gravity', (value) => {\n this.setGravity(a.parseGravity(value, this.mGravity));\n }, () => {\n return this.mGravity;\n });\n a.addAttr('hint', (value) => {\n this.setHint(a.parseString(value));\n }, () => {\n return this.getHint();\n });\n a.addAttr('text', (value) => {\n this.setText(a.parseString(value));\n }, () => {\n return this.getText();\n });\n a.addAttr('scrollHorizontally', (value) => {\n this.setHorizontallyScrolling(a.parseBoolean(value, false));\n });\n a.addAttr('singleLine', (value) => {\n this.setSingleLine(a.parseBoolean(value, false));\n });\n a.addAttr('ellipsize', (value) => {\n let ellipsize = TextUtils.TruncateAt[(value + '').toUpperCase()];\n if (ellipsize)\n this.setEllipsize(ellipsize);\n });\n a.addAttr('marqueeRepeatLimit', (value) => {\n let marqueeRepeatLimit = a.parseNumber(value, -1);\n if (marqueeRepeatLimit >= 0)\n this.setMarqueeRepeatLimit(marqueeRepeatLimit);\n });\n a.addAttr('includeFontPadding', (value) => {\n this.setIncludeFontPadding(a.parseBoolean(value, false));\n });\n a.addAttr('enabled', (value) => {\n this.setEnabled(a.parseBoolean(value, this.isEnabled()));\n }, () => {\n return this.isEnabled();\n });\n a.addAttr('lineSpacingExtra', (value) => {\n this.setLineSpacing(a.parseNumber(value, this.mSpacingAdd), this.mSpacingMult);\n }, () => {\n return this.mSpacingAdd;\n });\n a.addAttr('lineSpacingMultiplier', (value) => {\n this.setLineSpacing(this.mSpacingAdd, a.parseNumber(value, this.mSpacingMult));\n }, () => {\n return this.mSpacingMult;\n });\n this.setTextSize(14);\n if (defStyle)\n this.applyDefaultAttributes(defStyle);\n this.bindElement.innerHTML = this.bindElement.innerHTML.trim();\n let text = this.mText || this.bindElement.innerText;\n this.bindElement.innerHTML = '';\n this.setText(text, this.mBufferType);\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 = new Array(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 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 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 let transcriptMode = this._attrBinder.parseNumber(value, AbsListView.TRANSCRIPT_MODE_DISABLED);\n this.setTranscriptMode(transcriptMode);\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.parseNumber(value, 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();\n this.viewType = 0;\n this.scrappedFromPosition = 0;\n this.itemId = -1;\n if (args.length === 1) {\n super(args[0]);\n }\n else if (args.length === 2) {\n super(args[0], args[1]);\n }\n else if (args.length === 3) {\n super(args[0], args[1]);\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.parseNumber(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 = new Array(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 = new Array(checkedCount);\n System.arraycopy(ids, 0, result, 0, checkedCount);\n return result;\n }\n }\n return new Array(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_HSCROLL);\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_URI);\n break;\n case 'textEmailAddress':\n this.setInputType(InputType.TYPE_CLASS_EMAIL_ADDRESS);\n break;\n case 'textPassword':\n this.setInputType(InputType.TYPE_TEXT_PASSWORD);\n break;\n case 'textVisiblePassword':\n this.setInputType(InputType.TYPE_TEXT_VISIBLE_PASSWORD);\n break;\n case 'number':\n case 'numberSigned':\n case 'numberDecimal':\n this.setInputType(InputType.TYPE_CLASS_NUMBER);\n break;\n case 'numberPassword':\n this.setInputType(InputType.TYPE_NUMBER_PASSWORD);\n break;\n case 'phone':\n this.setInputType(InputType.TYPE_CLASS_PHONE);\n break;\n }\n });\n a.addAttr('maxLength', (value) => {\n this.mMaxLength = a.parseNumber(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() {\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.filterKeyCode(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 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 this.mSingleLineInputElement.onblur = () => {\n this.mSingleLineInputElement.style.opacity = '0';\n this.setForceDisableDrawText(false);\n };\n this.mSingleLineInputElement.onfocus = () => {\n this.mSingleLineInputElement.style.opacity = '1';\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n };\n this.mSingleLineInputElement.oninput = () => this.onInputValueChange();\n }\n if (this.inputElement === this.mSingleLineInputElement)\n return;\n if (this.inputElement && this.inputElement.parentElement) {\n this.bindElement.removeChild(this.inputElement);\n this.bindElement.appendChild(this.mSingleLineInputElement);\n }\n this.inputElement = 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 this.mMultilineInputElement.onblur = () => {\n this.mMultilineInputElement.style.opacity = '0';\n this.setForceDisableDrawText(false);\n };\n this.mMultilineInputElement.onfocus = () => {\n this.mMultilineInputElement.style.opacity = '1';\n if (this.getText().length > 0) {\n this.setForceDisableDrawText(true);\n }\n };\n this.mMultilineInputElement.oninput = () => this.onInputValueChange();\n }\n if (this.inputElement === this.mMultilineInputElement)\n return;\n if (this.inputElement && this.inputElement.parentElement) {\n this.bindElement.removeChild(this.inputElement);\n this.bindElement.appendChild(this.mMultilineInputElement);\n }\n this.inputElement = 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 performClick(event) {\n this.tryShowInputElement();\n return super.performClick(event);\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 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 isInputElementShowed() {\n return this.inputElement.parentElement != null;\n }\n setForceDisableDrawText(disable) {\n if (this.mForceDisableDraw == disable)\n return;\n this.mForceDisableDraw = disable;\n if (disable) {\n this.mTextPaint.setAlpha(0);\n }\n else {\n this.mTextPaint.setAlpha(255);\n }\n this.invalidate();\n }\n updateTextColors() {\n super.updateTextColors();\n if (this.isInputElementShowed()) {\n this.syncTextBoundInfoToInputElement();\n }\n }\n 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 }\n return super.onTouchEvent(event) || this.isInputElementShowed();\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.filterKeyCode(keyCode);\n }\n return false;\n }\n filterKeyCode(keyCode) {\n switch (this.mInputType) {\n case InputType.TYPE_NUMBER_SIGNED:\n if (keyCode === android.view.KeyEvent.KEYCODE_Minus && this.getText().length > 0)\n return true;\n return InputType.LimitCode.TYPE_NUMBER_SIGNED.indexOf(keyCode) === -1;\n case InputType.TYPE_NUMBER_DECIMAL:\n return InputType.LimitCode.TYPE_NUMBER_DECIMAL.indexOf(keyCode) === -1;\n case InputType.TYPE_CLASS_NUMBER:\n return InputType.LimitCode.TYPE_CLASS_NUMBER.indexOf(keyCode) === -1;\n case InputType.TYPE_NUMBER_PASSWORD:\n return InputType.LimitCode.TYPE_NUMBER_PASSWORD.indexOf(keyCode) === -1;\n case InputType.TYPE_CLASS_PHONE:\n return InputType.LimitCode.TYPE_CLASS_PHONE.indexOf(keyCode) === -1;\n }\n return false;\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 }\n }\n onKeyDown(keyCode, event) {\n this.checkFilterKeyEventToDom(event);\n return super.onKeyDown(keyCode, event) || true;\n }\n onKeyUp(keyCode, event) {\n this.checkFilterKeyEventToDom(event);\n return super.onKeyUp(keyCode, event) || true;\n }\n requestSyncBoundToElement(immediately = false) {\n if (this.inputElement.parentNode && this.inputElement.style.opacity != '0') {\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 setInputType(type) {\n this.mInputType = type;\n this.inputElement.style['webkitTextSecurity'] = '';\n this.setTransformationMethod(null);\n switch (type) {\n case InputType.TYPE_NULL:\n this.switchToMultilineInputElement();\n this.setSingleLine(false);\n break;\n case InputType.TYPE_CLASS_TEXT:\n this.switchToMultilineInputElement();\n this.setSingleLine(false);\n break;\n case InputType.TYPE_CLASS_URI:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'url');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_CLASS_EMAIL_ADDRESS:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'email');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_NUMBER_SIGNED:\n case InputType.TYPE_NUMBER_DECIMAL:\n case InputType.TYPE_CLASS_NUMBER:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'number');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_NUMBER_PASSWORD:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'number');\n this.inputElement.style['webkitTextSecurity'] = 'disc';\n this.setSingleLine(true);\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n break;\n case InputType.TYPE_CLASS_PHONE:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'tel');\n this.setSingleLine(true);\n break;\n case InputType.TYPE_TEXT_PASSWORD:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'password');\n this.setSingleLine(true);\n this.setTransformationMethod(PasswordTransformationMethod.getInstance());\n break;\n case InputType.TYPE_TEXT_VISIBLE_PASSWORD:\n this.switchToSingleLineInputElement();\n this.inputElement.setAttribute('type', 'email');\n this.setSingleLine(true);\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 onAttachedToWindow() {\n this.getContext().androidUI.showDebugLayout();\n return super.onAttachedToWindow();\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 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 const a = this._attrBinder;\n a.addAttr('src', (value) => {\n let d = a.parseDrawable(value);\n if (d)\n this.setImageDrawable(d);\n else\n this.setImageURI(value);\n }, () => {\n return this.mDrawable;\n });\n a.addAttr('baselineAlignBottom', (value) => {\n this.setBaselineAlignBottom(a.parseBoolean(value, this.mBaselineAlignBottom));\n });\n a.addAttr('baseline', (value) => {\n this.setBaseline(a.parseNumber(value, this.mBaseline));\n }, () => {\n return this.mBaseline;\n });\n a.addAttr('adjustViewBounds', (value) => {\n this.setAdjustViewBounds(a.parseBoolean(value, false));\n });\n a.addAttr('maxWidth', (value) => {\n let baseValue = this.getParent() instanceof View ? this.getParent().getWidth() : 0;\n this.setMaxWidth(a.parseNumber(value, this.mMaxWidth, baseValue));\n }, () => {\n return this.mMaxWidth;\n });\n a.addAttr('maxHeight', (value) => {\n let baseValue = this.getParent() instanceof View ? this.getParent().getHeight() : 0;\n this.setMaxHeight(a.parseNumber(value, this.mMaxHeight, baseValue));\n }, () => {\n return this.mMaxHeight;\n });\n a.addAttr('scaleType', (value) => {\n this.setScaleType(ImageView.parseScaleType(value, this.mScaleType));\n }, () => {\n return this.mScaleType.toString();\n });\n a.addAttr('drawableAlpha', (value) => {\n this.setAlpha(a.parseNumber(value, this.mAlpha));\n }, () => {\n return this.mAlpha;\n });\n a.addAttr('cropToPadding', (value) => {\n this.setCropToPadding(a.parseBoolean(value, false));\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 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 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 this.requestLayout();\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 this.setAlpha(alpha);\n }\n setAlpha(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.parseNumber(value, 0));\n });\n this._attrBinder.addAttr('verticalSpacing', (value) => {\n this.setVerticalSpacing(this._attrBinder.parseNumber(value, 0));\n });\n this._attrBinder.addAttr('stretchMode', (value) => {\n let strechMode = this._attrBinder.parseNumber(value, -1);\n if (strechMode >= 0) {\n this.setStretchMode(strechMode);\n }\n });\n this._attrBinder.addAttr('columnWidth', (value) => {\n let columnWidth = this._attrBinder.parseNumber(value, -1);\n if (columnWidth > 0) {\n this.setColumnWidth(columnWidth);\n }\n });\n this._attrBinder.addAttr('numColumns', (value) => {\n this.setNumColumns(this._attrBinder.parseNumber(value, 1));\n });\n this._attrBinder.addAttr('gravity', (value) => {\n this.setNumColumns(this._attrBinder.parseNumber(value, 1));\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.parseNumber(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.parseNumber(value, defSelectionDividerDistance);\n });\n this._attrBinder.addAttr('internalMinHeight', (value) => {\n this.mMinHeight_ = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxHeight', (value) => {\n this.mMaxHeight = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMinWidth', (value) => {\n this.mMinWidth_ = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxWidth', (value) => {\n this.mMaxWidth = this._attrBinder.parseNumber(value, NumberPicker.SIZE_UNSPECIFIED);\n });\n this._attrBinder.addAttr('internalMaxWidth', (value) => {\n this.mMaxWidth = this._attrBinder.parseNumber(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.parseNumber(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.parseNumber(value, this.mMinValue));\n });\n this._attrBinder.addAttr('maxValue', (value) => {\n this.setMaxValue(this._attrBinder.parseNumber(value, this.mMaxValue));\n });\n this._attrBinder.addAttr('itemCount', (value) => {\n this.SELECTOR_WHEEL_ITEM_COUNT = this._attrBinder.parseNumber(value, this.SELECTOR_WHEEL_ITEM_COUNT);\n this.SELECTOR_MIDDLE_ITEM_INDEX = Math.floor(this.SELECTOR_WHEEL_ITEM_COUNT / 2);\n this.mSelectorIndices = new Array(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 = new Array(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_6) {\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 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_6.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_6.ClipDrawable || (drawable_6.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.parseNumber(value, this.mDuration));\n }, () => {\n return this.mDuration;\n });\n a.addAttr('minWidth', (value) => {\n this.mMinWidth = Math.floor(a.parseNumber(value, this.mMinWidth));\n }, () => {\n return this.mMinWidth;\n });\n a.addAttr('maxWidth', (value) => {\n this.mMaxWidth = Math.floor(a.parseNumber(value, this.mMaxWidth));\n }, () => {\n return this.mMaxWidth;\n });\n a.addAttr('minHeight', (value) => {\n this.mMinHeight = Math.floor(a.parseNumber(value, this.mMinHeight));\n }, () => {\n return this.mMinHeight;\n });\n a.addAttr('maxHeight', (value) => {\n this.mMaxHeight = Math.floor(a.parseNumber(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.parseNumber(value, this.mMax));\n }, () => {\n return this.mMax;\n });\n a.addAttr('progress', (value) => {\n this.setProgress(a.parseNumber(value, this.mProgress));\n }, () => {\n return this.mProgress;\n });\n a.addAttr('secondaryProgress', (value) => {\n this.setSecondaryProgress(a.parseNumber(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 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 this._attrBinder.addAttr('checkedButton', (value) => {\n this.setCheckedId(value);\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 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.parseNumber(value));\n }, () => this.mThumbOffset);\n a.addAttr('disabledAlpha', (value) => {\n this.mDisabledAlpha = a.parseNumber(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.parseNumber(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.parseNumber(value, 0.5));\n }, () => this.getStepSize());\n a.addAttr('rating', (value) => {\n this.setRating(a.parseNumber(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.parseNumber(value, 0), this.mIndicatorRight);\n }, () => {\n return this.mIndicatorLeft;\n });\n this._attrBinder.addAttr('indicatorRight', (value) => {\n let num = this._attrBinder.parseNumber(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.parseNumber(value, ExpandableListView.CHILD_INDICATOR_INHERIT), this.mChildIndicatorRight);\n }, () => {\n return this.mChildIndicatorLeft;\n });\n this._attrBinder.addAttr('childIndicatorRight', (value) => {\n let num = this._attrBinder.parseNumber(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 ColorDrawable = android.graphics.drawable.ColorDrawable;\n var Color = android.graphics.Color;\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 = new ColorDrawable(Color.WHITE);\n let topDark = new ColorDrawable(Color.WHITE);\n let centerDark = new ColorDrawable(Color.WHITE);\n let bottomDark = new ColorDrawable(Color.WHITE);\n let fullBright = new ColorDrawable(Color.WHITE);\n let topBright = new ColorDrawable(Color.WHITE);\n let centerBright = new ColorDrawable(Color.WHITE);\n let bottomBright = new ColorDrawable(Color.WHITE);\n let bottomMedium = new ColorDrawable(Color.WHITE);\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.parseTextArray(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.parseNumber(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.parseNumber(value, 0);\n if (verticalOffset != 0) {\n popup.setVerticalOffset(verticalOffset);\n }\n });\n a.addAttr('dropDownHorizontalOffset', (value) => {\n const horizontalOffset = a.parseNumber(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.parseNumber(value, Gravity.CENTER);\n });\n a.addAttr('prompt', (value) => {\n this.mGravity = a.parseNumber(value, Gravity.CENTER);\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 android;\n(function (android) {\n var webkit;\n (function (webkit) {\n class WebViewClient {\n onPageStarted(view, url) {\n }\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 FrameLayout = android.widget.FrameLayout;\n class WebView extends FrameLayout {\n constructor(context, bindElement, defStyle) {\n super(context, bindElement, defStyle);\n let density = this.getResources().getDisplayMetrics().density;\n this.setMinimumWidth(300 * density);\n this.setMinimumHeight(150 * density);\n this.initIFrameElement();\n }\n initIFrameElement() {\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 if (this.mClient) {\n this.mClient.onReceivedTitle(this, this.getTitle());\n this.mClient.onPageFinished(this, this.iFrameElement.src);\n }\n };\n this.bindElement.appendChild(this.iFrameElement);\n }\n loadUrl(url) {\n if (this.mClient)\n this.mClient.onPageStarted(this, url);\n this.iFrameElement.src = url;\n }\n loadData(data) {\n this.iFrameElement['srcdoc'] = data;\n }\n evaluateJavascript(script) {\n try {\n eval.call(this.iFrameElement.contentWindow, script);\n }\n catch (e) {\n console.warn(e);\n eval(script);\n }\n }\n stopLoading() {\n try {\n this.iFrameElement.contentWindow['stop']();\n }\n catch (e) {\n console.error(e);\n }\n }\n reload() {\n this.iFrameElement.src = this.iFrameElement.src;\n }\n getUrl() {\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 getContentHeight() {\n try {\n return this.iFrameElement.contentWindow.document.documentElement.offsetHeight;\n }\n catch (e) {\n console.warn(e);\n return 0;\n }\n }\n getContentWidth() {\n try {\n return this.iFrameElement.contentWindow.document.documentElement.offsetWidth;\n }\n catch (e) {\n console.warn(e);\n return 0;\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 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 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 = new Array(pointerId + 1);\n let imy = new Array(pointerId + 1);\n let lmx = new Array(pointerId + 1);\n let lmy = new Array(pointerId + 1);\n let iit = new Array(pointerId + 1);\n let edip = new Array(pointerId + 1);\n let edl = new Array(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 = new Array(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 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 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 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 requestSyncBoundToElement(immediately = true) {\n super.requestSyncBoundToElement(immediately);\n }\n onAttachedToWindow() {\n this.getContext().androidUI.showDebugLayout();\n return super.onAttachedToWindow();\n }\n }\n widget.HtmlBaseView = HtmlBaseView;\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 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.parseNumber(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.parseNumber(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 initImpl() {\n this.canvasId = ++sNextID;\n this.createCanvasImpl();\n }\n createCanvasImpl() {\n native.NativeApi.canvas.createCanvas(this.canvasId, this.mWidth, this.mHeight);\n }\n recycleImpl() {\n native.NativeApi.canvas.recycleCanvas(this.canvasId);\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 clearRectImpl(left, top, width, height) {\n native.NativeApi.canvas.clearRect(this.canvasId, left, top, width, height);\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 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, dstRect) {\n if (image instanceof native.NativeImage) {\n native.NativeApi.canvas.drawImage(this.canvasId, image.imageId, dstRect.left, dstRect.top, dstRect.width(), dstRect.height());\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);\n }\n drawOvalImpl(oval, style) {\n }\n drawCircleImpl(cx, cy, radius, style) {\n }\n drawArcImpl(oval, startAngle, sweepAngle, useCenter, style) {\n }\n drawRoundRectImpl(rect, 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);\n }\n multiplyAlphaImpl(alpha) {\n native.NativeApi.canvas.multiplyAlpha(this.canvasId, alpha);\n }\n setAlphaImpl(alpha) {\n native.NativeApi.canvas.setAlpha(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 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 let density = android.content.res.Resources.getDisplayMetrics().density;\n native.NativeApi.surface.createSurface(this.surfaceId, bound.left * density, bound.top * density, bound.right * density, bound.bottom * density);\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 let canvas = new SurfaceLockCanvas(width, height);\n native.NativeApi.surface.lockCanvas(this.surfaceId, canvas.canvasId, left, top, left + width, top + height);\n return canvas;\n }\n unlockCanvasAndPost(canvas) {\n if (canvas instanceof native.NativeCanvas) {\n native.NativeApi.surface.unlockCanvasAndPost(this.surfaceId, canvas.canvasId);\n native.NativeApi.canvas.recycleCanvas(canvas.canvasId);\n }\n else {\n throw Error('canvas is not NativeCanvas');\n }\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 SurfaceLockCanvas 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 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 }\n static notifyLoadFinish(imageId, width, height) {\n let image = NativeImageInstances.get(imageId);\n image.mImageWidth = width;\n image.mImageHeight = height;\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 }\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 const AndroidJsBridgeProperty = 'AndroidUIRuntime';\n const JSBridge = window[AndroidJsBridgeProperty];\n class NativeApi {\n }\n native.NativeApi = NativeApi;\n (function (NativeApi) {\n class CallQueues {\n constructor() {\n this.calls = [];\n }\n pushCall(method, methodArgs) {\n this.calls.push(new NativeCall(method, methodArgs));\n }\n clear() {\n this.calls = [];\n }\n toString() {\n return this.calls.join('\\n');\n }\n }\n class NativeCall {\n constructor(methodName, methodArgs) {\n this.method = methodName;\n this.args = methodArgs;\n }\n toString() {\n return this.method + JSON.stringify(this.args);\n }\n }\n let callQueues = new CallQueues();\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 callQueues.pushCall('lockCanvas', [surfaceId, canvasId, left, top, right, bottom]);\n }\n unlockCanvasAndPost(surfaceId, canvasId) {\n callQueues.pushCall('unlockCanvasAndPost', [surfaceId, canvasId]);\n JSBridge.batchCall(callQueues.toString());\n callQueues.clear();\n }\n }\n NativeApi.SurfaceApi = SurfaceApi;\n class CanvasApi {\n createCanvas(canvasId, width, height) {\n callQueues.pushCall('createCanvas', [canvasId, width, height]);\n }\n recycleCanvas(canvasId) {\n callQueues.pushCall('recycleCanvas', [canvasId]);\n }\n translate(canvasId, dx, dy) {\n callQueues.pushCall('translate', [canvasId, dx, dy]);\n }\n scale(canvasId, sx, sy) {\n callQueues.pushCall('scale', [canvasId, sx, sy]);\n }\n rotate(canvasId, degrees) {\n callQueues.pushCall('rotate', [canvasId, degrees]);\n }\n concat(canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y) {\n callQueues.pushCall('concat', [canvasId, MSCALE_X, MSKEW_X, MTRANS_X, MSKEW_Y, MSCALE_Y, MTRANS_Y]);\n }\n drawColor(canvasId, color) {\n callQueues.pushCall('drawColor', [canvasId, color]);\n }\n clearRect(canvasId, left, top, width, height) {\n callQueues.pushCall('clearRect', [canvasId, left, top, width, height]);\n }\n drawRect(canvasId, left, top, width, height) {\n callQueues.pushCall('drawRect', [canvasId, left, top, width, height]);\n }\n clipRect(canvasId, left, top, width, height) {\n callQueues.pushCall('clipRect', [canvasId, left, top, width, height]);\n }\n save(canvasId) {\n callQueues.pushCall('save', [canvasId]);\n }\n restore(canvasId) {\n callQueues.pushCall('restore', [canvasId]);\n }\n drawCanvas(canvasId, drawCanvasId, offsetX, offsetY) {\n callQueues.pushCall('drawCanvas', [canvasId, drawCanvasId, offsetX, offsetY]);\n }\n drawImage(canvasId, drawImageId, dstLeft, dstTop, dstWidth, dstHeight) {\n callQueues.pushCall('drawImage', [canvasId, drawImageId, dstLeft, dstTop, dstWidth, dstHeight]);\n }\n drawText(canvasId, text, x, y, fillStyle) {\n callQueues.pushCall('drawText', [canvasId, encodeURIComponent(text), x, y, fillStyle]);\n }\n setFillColor(canvasId, color) {\n callQueues.pushCall('setFillColor', [canvasId, color]);\n }\n multiplyAlpha(canvasId, alpha) {\n callQueues.pushCall('multiplyAlpha', [canvasId, alpha]);\n }\n setAlpha(canvasId, alpha) {\n callQueues.pushCall('setAlpha', [canvasId, alpha]);\n }\n setTextAlign(canvasId, align) {\n callQueues.pushCall('setTextAlign', [canvasId, align]);\n }\n setLineWidth(canvasId, width) {\n callQueues.pushCall('setLineWidth', [canvasId, width]);\n }\n setLineCap(canvasId, lineCap) {\n callQueues.pushCall('setLineCap', [canvasId, lineCap]);\n }\n setLineJoin(canvasId, lineJoin) {\n callQueues.pushCall('setLineJoin', [canvasId, lineJoin]);\n }\n setShadow(canvasId, radius, dx, dy, color) {\n callQueues.pushCall('setShadow', [canvasId, radius, dx, dy, color]);\n }\n setFontSize(canvasId, size) {\n callQueues.pushCall('setFontSize', [canvasId, size]);\n }\n setFont(canvasId, fontName) {\n callQueues.pushCall('setFont', [canvasId, fontName]);\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 NativeApi.surface = new NativeApi.SurfaceApi();\n NativeApi.canvas = new NativeApi.CanvasApi();\n NativeApi.image = JSBridge;\n }\n })(native = androidui.native || (androidui.native = {}));\n})(androidui || (androidui = {}));\nwindow[`android`] = android;\nwindow[`java`] = java;\nwindow[`AndroidUI`] = androidui.AndroidUI;\nwindow.dispatchEvent(new CustomEvent(\"AndroidUILoadFinish\"));\n"]} \ No newline at end of file diff --git a/dist/android-ui.js b/dist/android-ui.js index dd5ca89..c3d2b46 100644 --- a/dist/android-ui.js +++ b/dist/android-ui.js @@ -2,9 +2,9 @@ var androidui; (function (androidui) { androidui.sdk_version_info = ` AndroidUI4Web: https://github.com/linfaxin/AndroidUI-WebApp -version: 0.3.0 +version: 0.4.0 release type: Pre-release -release date: 2016-02-07 +release date: 2016-02-12 `; })(androidui || (androidui = {})); var java; diff --git a/src/sdk_version.ts b/src/sdk_version.ts index fb3f528..77c4c0b 100644 --- a/src/sdk_version.ts +++ b/src/sdk_version.ts @@ -2,8 +2,8 @@ module androidui { export var sdk_version_info = ` AndroidUI4Web: https://github.com/linfaxin/AndroidUI-WebApp -version: 0.3.0 +version: 0.4.0 release type: Pre-release -release date: 2016-02-07 +release date: 2016-02-12 `; } \ No newline at end of file