/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . android . tools . idea . ui builder . handlers . assistant Ċ Ċ import Ġcom . android . ide . common . rendering . api . Resource Value Ċ import Ġcom . android . resources . ResourceType Ċ import Ġcom . android . tools . adt ui . model . std ui . Default Common ComboBox Model Ċ import Ġcom . android . tools . adt ui . std ui . Common ComboBox Ċ import Ġcom . android . tools . adt ui . ui . Clickable Label Ċ import Ġcom . android . tools . idea . res . Resource Repository Manager Ċ import Ġcom . android . tools . idea . res . Sample Data Resource Item Ċ import Ġcom . android . tools . idea . res . Sample Data Resource Item . ContentType . IMAGE Ċ import Ġcom . android . tools . idea . res . get Drawable Resources Ċ import Ġcom . android . tools . idea . res . get Sample Data OfType Ċ import Ġcom . android . tools . idea . ui . resource cho oser . Drawable Grid Ċ import Ġcom . android . tools . idea . ui . resource cho oser . util . create Resource Picker Dialog Ċ import Ġcom . android . tools . idea . ui builder . handlers . ImageView Handler Ċ import Ġcom . android . tools . idea . ui builder . assistant . Assistant Popup Panel Ċ import Ġcom . android . tools . idea . ui builder . assistant . Component Assistant Factory Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . ui . JB Color Ċ import Ġcom . intellij . ui . components . JB CheckBox Ċ import Ġcom . intellij . util . concurrency . App Executor Util Ċ import Ġcom . intellij . util . concurrency . Ed t ExecutorService Ċ import Ġcom . intellij . util . ui . J BU I . B orders Ċ import Ġcom . intellij . util . ui . J BU I . scale Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . util . Enum Set Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . function . Bi Consumer Ċ import Ġjava . util . function . Supplier Ċ import Ġjavax . swing . Box Ċ import Ġjavax . swing . Default ListModel Ċ import Ġjavax . swing . J ComboBox Ċ import Ġjavax . swing . JPanel Ċ Ċ private Ġconst Ġval ĠITEM _ COUNT Ġ= Ġ 1 2 Ċ private Ġval ĠIMAGE _ SIZE Ġ= Ġscale ( 4 8 ) Ċ private Ġconst Ġval ĠNONE _ VALUE Ġ= Ġ" None " Ċ Ċ /** Ċ Ġ* ĠAssistant Ġfor Ġthe Ġimage Ġview Ġthat Ġdisplay Ġa Ġgrid Ġof Ġsample Ġimage Ġthat Ġwhich Ġthe Ġuser Ċ Ġ* Ġcan Ġselect Ġand Ġwill Ġbe Ġapplied Ġto Ġthe Ġprovided Ċ Ġ* Ġ[ Component Assistant Factory . Context . component ] Ċ Ġ*/ Ċ class ĠImageView Assistant ( ĊĠ Ġprivate Ġval Ġcontext : ĠComponent Assistant Factory . Context , ĊĠ Ġprivate Ġval Ġimage Handler : ĠImageView Handler Ċ ) Ġ{ ĊĠ Ġprivate Ġval Ġnl Component Ġ= Ġcontext . component ĊĊĠ Ġprivate Ġvar Ġselected Sample Item : ĠSample Data Resource Item ? Ġ= Ġnull ĊĊĠ Ġprivate Ġval Ġoriginal Value Ġ= Ġimage Handler . get Tools Src ( nl Component ) ĊĊĠ Ġprivate Ġval Ġitem Name Label Ġ= Ġassistant Label ( get Sample Item DisplayName ( original Value )) ĊĊĠ Ġprivate Ġvar Ġitem DisplayName : ĠString ? ĊĠĠĠ Ġget () Ġ= Ġitem Name Label . text ĊĠĠĠ Ġset ( itemName ) Ġ{ ĊĠĠĠĠĠ Ġitem Name Label . text Ġ= ĠString Util . short en Text With El lipsis ( itemName . or Empty (), Ġ 2 0 , Ġ 1 5 , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval Ġdrawable Grid Ġ= Ġcreate Drawable Grid () ĊĊĠ Ġprivate Ġvar Ġuse All Ġ= Ġoriginal Value Ġ== Ġnull Ġ|| Ġis Sample Value All ( original Value ) ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠ Ġdrawable Grid . isEnabled Ġ= Ġ! value ĊĠĠĠĠĠ Ġif Ġ( value ) Ġdrawable Grid . clear Selection () Ġelse Ġdrawable Grid . selectedIndex Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval Ġuse All CheckBox Ġ= Ġcreate Use All CheckBox () ĊĊĠ Ġprivate Ġval Ġbottom Bar Ġ= Ġcreate Bottom Bar () ĊĊĠ Ġprivate Ġval Ġcombo Box Model Ġ= ĠDefault Common ComboBox Model < Sample DataSet Item >( NONE _ VALUE ) ĊĊĠ Ġprivate Ġval Ġsample DataSet ComboBox Ġ= ĠCommon ComboBox ( comboBox Model ). apply Ġ{ ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠ Ġis Editable Ġ= Ġfalse ĊĠĠĠ Ġadd ActionListener Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠ Ġval Ġselected Item Ġ= Ġ( event . source Ġas ĠJ ComboBox < *> ). selected Item Ġas ? ĠSample DataSet Item ĊĠĠĠĠĠ ĠsetSelected Sample Item ( selected Item ?. resource ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġcontent Ġ= ĠJPanel ( Border Layout ()). apply Ġ{ ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠ Ġadd ( create Header (), ĠBorderLayout . NORTH ) ĊĠĠĠ Ġadd ( drawable Grid ) ĊĠĠĠ Ġadd ( bottom Bar , ĠBorderLayout . SO UTH ) ĊĠ Ġ} ĊĊĠ Ġval Ġcomponent Ġ= ĠAssistant Popup Panel ( content Ġ= Ġcontent ) ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġdisplay Resource Values ( null , Ġ- 1 ) ĊĠĠĠ Ġupdate UIState () ĊĊĠĠĠ Ġ// ĠGet ĠSample Data Ġdraw ables Ġin Ġbackground Ġthread , Ġthen , Ġupdate Ġthe Ġwidget Ġon Ġthe ĠE DT ĊĠĠĠ ĠCompletableFuture . supply Async ( Supplier Ġ{ ĊĠĠĠĠĠ ĠResource Repository Manager . getApp Resources ( nl Component . model . facet ). get Sample Data OfType ( IMAGE ). toList () ĊĠĠĠ Ġ}, ĠApp Executor Util . getApp ExecutorService ()). when Complete Async ( Bi Consumer Ġ{ Ġsample Data Items , Ġ_ Ġ-> ĊĠĠĠĠĠ Ġpopulate Widget ( sample Data Items ) ĊĠĠĠ Ġ}, ĠE dt ExecutorService . get Scheduled Executor Instance ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis Sample Value All ( value : ĠString ?) Ġ= Ġvalue ?. endsWith (' ]') ?. not () Ġ?: Ġfalse ĊĊĠ Ġprivate Ġfun Ġpopulate Widget ( sample Data Items : ĠList < Sample Data Resource Item >) Ġ{ ĊĠĠĠ Ġupdate ComboBox ( sample Data Items ) ĊĠĠĠ Ġupdate UIState () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Header (): ĠJPanel Ġ{ ĊĠĠĠ Ġreturn ĠJPanel ( Border Layout ()). apply Ġ{ ĊĠĠĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠĠĠ Ġadd ( assistant Label (" src Compat "), ĠBorderLayout . NORTH ) ĊĠĠĠĠĠ Ġadd ( sample DataSet ComboBox ) ĊĠĠĠĠĠ Ġadd ( use All CheckBox , ĠBorderLayout . EAST ) ĊĠĠĠĠĠ Ġborder Ġ= ĠB orders . empty Bottom ( 2 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Bottom Bar () Ġ= ĠBox . create Horizontal Box (). apply Ġ{ ĊĠĠĠ Ġborder Ġ= ĠB orders . empty Top ( 4 ) ĊĠĠĠ Ġadd ( itemName Label ) ĊĠĠĠ Ġadd ( Box . create Horizontal Gl ue ()) ĊĠĠĠ Ġadd ( Clickable Label (" Browse "). apply Ġ{ ĊĠĠĠĠĠ Ġborder Ġ= Ġnull ĊĠĠĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠĠĠ Ġforeground Ġ= ĠJ B Color . link () ĊĠĠĠĠĠ Ġadd ActionListener Ġ{ Ġpick From Resource Dialog () Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Drawable Grid () Ġ= ĠDrawable Grid ( nl Component . model . facet . module , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault ListModel < Resource Value >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIMAGE _ SIZE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠITEM _ COUNT . to Long ()). apply Ġ{ ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠ Ġis Enabled Ġ= Ġoriginal Value Ġ!= Ġnull Ġ&& Ġ! is Sample Value All ( original Value ) ĊĠĠĠ Ġvisible RowCount Ġ= Ġ 3 ĊĠĠĠ Ġadd List Selection Listener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠ Ġapply Sample Item ( selected Sample Item , Ġif Ġ( use All ) Ġ- 1 Ġelse Ġselected Index ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Use All CheckBox () Ġ= ĠJ B CheckBox (" Use Ġas Ġset "). apply Ġ{ ĊĠĠĠ Ġset Assistant Font ( this @ apply ) ĊĠĠĠ Ġis Selected Ġ= Ġuse All ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠ Ġadd Item Listener Ġ{ Ġevent Ġ-> Ġuse All Ġ= Ġ( event . source Ġas ĠJ B CheckBox ). isSelected Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate ComboBox ( sample Items : ĠList < Sample Data Resource Item >) Ġ{ ĊĠĠĠ Ġval Ġsample Items With Null Ġ= ĠlistOf ( null ) Ġ+ Ġsample Items ĊĠĠĠ Ġval Ġelements Ġ= Ġsample Items With Null . map Ġ{ Ġit ?. name Ġ?: ĠNONE _ VALUE Ġ} ĊĠĠĠ Ġval Ġselected Index Ġ= Ġelements . indexOf First Ġ{ Ġoriginal Value ?. contains ( it ) Ġ?: Ġfalse Ġ}. coerce At Least ( 0 ) ĊĊĠĠĠ Ġcombo Box Model . removeAll Elements () ĊĠĠĠ Ġsample Items With Null . forEach Ġ{ Ġcombo Box Model . addElement ( Sample DataSet Item ( it )) Ġ} ĊĠĠĠ Ġsample DataSet ComboBox . selectedIndex Ġ= Ġselected Index ĊĠĠĠ Ġselected Sample Item Ġ= Ġsample Items With Null [ selectedIndex ] ĊĊĠĠĠ Ġsample DataSet ComboBox . isEnabled Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate UIState () Ġ{ ĊĠĠĠ Ġif Ġ( selected Sample Item Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġdrawable Grid . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠ Ġuse All CheckBox . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġdrawable Grid . isEnabled Ġ= Ġtrue Ġ&& Ġ! use All ĊĠĠĠĠĠ Ġuse All CheckBox . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Sample Item DisplayName ( attribute Value : ĠString ?) Ġ= Ġattribute Value ?. substring After Last ("/ "). or Empty () ĊĊĠ Ġprivate Ġfun ĠsetSelected Sample Item ( item : ĠSample Data Resource Item ?) Ġ{ ĊĠĠĠ Ġif Ġ( item Ġ== Ġselected Sample Item ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġselected Sample Item Ġ= Ġitem ĊĠĠĠ Ġval Ġselected Index Ġ= Ġdrawable Grid . selectedIndex ĊĠĠĠ Ġdisplay Resource Values ( item , Ġselected Index ) ĊĠĠĠ Ġif Ġ( drawable Grid . selectedIndex Ġ== Ġ- 1 ) Ġ{ Ġ// Ġ- 1 Ġto Ġaccount Ġfor Ġthe ĠNone Ġvalue ĊĠĠĠĠĠ Ġapply Sample Item ( selected Sample Item , Ġ- 1 ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdisplay Resource Values ( item : ĠSample Data Resource Item ?, Ġselected Index : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġlist Model Ġ= Ġdrawable Grid . model Ġas ĠDefault ListModel < Resource Value > ĊĠĠĠ Ġlist Model . removeAll Elements () ĊĠĠĠ Ġdrawable Grid . reset Cache () ĊĠĠĠ Ġitem ?. get Drawable Resources ()?. take ( ITEM _ COUNT )?. forEach Ġ{ ĊĠĠĠĠĠ Ġlist Model . addElement ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhile Ġ( list Model . size () Ġ< ĠITEM _ COUNT ) Ġ{ ĊĠĠĠĠĠ Ġlist Model . addElement ( null ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġdrawable Grid . selectedIndex Ġ= ĠMath . min ( selectedIndex , Ġdrawable Grid . model . size Ġ- Ġ 1 ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġapply Sample Item ( item : ĠSample Data Resource Item ?, Ġresource Value Index : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġuse All Ġ= Ġresource Value Index Ġ< Ġ 0 Ġ|| Ġitem Ġ== Ġnull ĊĠĠĠ Ġval Ġitem Name Ġ= Ġif Ġ( item Ġ!= Ġnull ) Ġitem . name Ġ+ Ġif Ġ( use All ) Ġ"" Ġelse Ġ"[ ${ resource Value Index }] " Ġelse Ġ"" ĊĠĠĠ Ġitem DisplayName Ġ= Ġitem Name ĊĠĠĠ Ġupdate UIState () ĊĠĠĠ Ġimage Handler . set Tools Src ( nl Component , Ġitem , Ġresource Value Index ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpick From Resource Dialog () Ġ{ ĊĠĠĠ Ġval Ġmodel Ġ= Ġnl Component . model ĊĠĠĠ Ġval Ġtag Ġ= Ġnl Component . backend . tag ĊĠĠĠ Ġval Ġvirtual File Ġ= Ġtag ?. containing File ?. virtual File ĊĠĠĠ Ġval Ġdialog Ġ= Ġcreate Resource Picker Dialog ( ĊĠĠĠĠĠ Ġdialog Title Ġ= Ġ" Pick Ġa ĠDrawable ", ĊĠĠĠĠĠ Ġcurrent Value Ġ= Ġnull , ĊĠĠĠĠĠ Ġfacet Ġ= Ġmodel . facet , ĊĠĠĠĠĠ Ġresource Types Ġ= ĠEnum Set . of ( ResourceType . DRAW ABLE , ĠResource Type . MIP MAP ), ĊĠĠĠĠĠ Ġdefault ResourceType Ġ= Ġnull , ĊĠĠĠĠĠ Ġshow Color State Lists Ġ= Ġtrue , ĊĠĠĠĠĠ Ġshow Sample Data Ġ= Ġtrue , ĊĠĠĠĠĠ Ġfile Ġ= Ġvirtual File ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( dialog . show AndGet ()) Ġ{ ĊĠĠĠĠĠ Ġimage Handler . set Tools Src ( nl Component , Ġdialog . resourceName ) ĊĠĠĠĠĠ Ġcontext . do Close ( false ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠClass Ġfor Ġthe ĠSample Data ĠCombo Box Ġmodel , Ġwhich Ġuses Ġ[ Any . toString ] Ġto Ġdisplay Ġdata Ġin Ġthe ĠCombo Box , Ġthis Ġmakes Ġsure Ġthat Ġit Ġdisplays Ġthe Ċ Ġ* ĠSample Data Ġresource Ġname . Ċ Ġ*/ Ċ private Ġdata Ġclass ĠSample DataSet Item ( val Ġresource : ĠSample Data Resource Item ?) Ġ{ ĊĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġresource ?. name Ġ?: ĠNONE _ VALUE ĊĠ Ġ} Ċ }