summaryrefslogtreecommitdiff
path: root/core/java/android/widget/Switch.java
Commit message (Collapse)AuthorAgeFilesLines
* Fixed the reference to the compat version of the widget. Revised the class ↵joneckenrode2022-08-251-14/+24
| | | | | | | | | description. Cherry-picked from CL 19211934 merged on master. See https://googleplex-android-review.git.corp.google.com/c/platform/frameworks/base/+/19211934. Test: Built API documentation Change-Id: If74178eba609346eb7cf9e462bdb3edf40db4d81
* Migrate frameworks/base javadocs references to androidxAlan Viverette2022-02-091-1/+1
| | | | | | | | | | | Does not remove Support Library artifacts from docs classpath (ApiDocs.bp) because they are still used in development/samples, which is not as easy to migrate as javadoc. Bug: 158779503 Test: make docs Exempt-From-Owner-Approval: Mass find/replace for androidx migration Change-Id: Icf7f53ec36a0e970413352e2ebf40ce9d60ed17e
* Enable use of of CompoundButtons in RemoteViewsSteven Kideckel2021-02-031-0/+64
| | | | | | | | | | | | | | | | | This change adds @RemoteView and @RemotableViewMethod to the relevant views we'd like to enable. New APIs have been added to set Icons in CompooundButton and Switch. onCheckedChange support will be added in a follow-up CL. CompoundButton.setChecked and RadioGroup.check aren't directly remotable since RemoteViews will need to control those calls directly to ensure that any onCheckedChange listeners aren't triggered by RemoteViews actions. Bug: 179245670 Test: manual, atest Change-Id: I85e2aee62cf39ed008d9c9c1fece813293841fbd
* Add maxTargetSdk restriction to unused APIs.Mathew Inwood2020-10-291-1/+2
| | | | | | | | | | | | | | | | | | | These are APIs that have @UnsupportedAppUsage but for which we don't have any evidence of them currently being used, so should be safe to remove from the unsupported list. This is a resubmit of ag/12929664 with some APIs excluded that caused test failures; see bugs 171886397, 171888296, 171864568. APIs excluded: Landroid/bluetooth/le/ScanRecord;->parseFromBytes([B)Landroid/bluetooth/le/ScanRecord; Landroid/os/Process;->myPpid()I Landroid/os/SharedMemory;->getFd()I Landroid/hardware/input/InputManager;->INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH:I Bug: 170729553 Test: Treehugger Change-Id: I8285daa8530260251ecad6f3f38f98e263629ca7
* Revert "Add maxTargetSdk restriction to unused APIs."Hongwei Wang2020-10-281-2/+1
| | | | | | | | | This reverts commit 72f07d6a8a32db4a0dedd7682a0b3385be2b9cd6. Reason for revert: Droidcop-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?testMethod=testAppZygotePreload&testClass=android.app.cts.ServiceTest&atpConfigName=suite%2Ftest-mapping-presubmit-retry_cloud-tf&testModule=CtsAppTestCases&fkbb=6936597&lkbb=6936969&lkgb=6936551&testResults=true&branch=git_master&target=cf_x86_phone-userdebug>, bug b/171886397 Bug: 171886397 Change-Id: Ibe0f0430a3451477c1ee8ef56a596e91ea1e7672
* Add maxTargetSdk restriction to unused APIs.Mathew Inwood2020-10-271-1/+2
| | | | | | | | | | These are APIs that have @UnsupportedAppUsage but for which we don't have any evidence of them currently being used, so should be safe to remove from the unsupported list. Bug: 170729553 Test: Treehugger Change-Id: I4c8fd0006f950de9955242e93968fb0996ceb372
* Delay sending accessibility events a little for temporarily detached viewyingleiw2020-07-141-3/+3
| | | | | | | | | | | | | | | | | | | In RV, a view could be temporarily detached in one draw cycle. Accessibility events sent during this time will be lost. To prevent the events from being lost, we will set a flag when a view is detached by parent. And when sending accessibility events for detached view, we will delay it a little by ViewConfiguration.getSendRecurringAccessibilityEventsInterval. This way, if the view is attached in one draw cycle, the events will be sent out. Also add more setStateDescription() in CompoundButton to for safer code. (this is not the cause of this bug though). Fix: 151125936 Test: tested that the bug is fixed. Change-Id: Iffca8c87bad4fa2f66862b966e351562d77d6d76
* Use new UnsupportedAppUsage annotation.Artur Satayev2020-01-061-1/+1
| | | | | | | | Existing annotations in libcore/ and frameworks/ will deleted after the migration. This also means that any java library that compiles @UnsupportedAppUsage requires a direct dependency on "unsupportedappusage" java_library. Bug: 145132366 Test: m && diff unsupportedappusage_index.csv Change-Id: I41e12e425284e74561c6b61663241df364ae54a1
* Fix setting state description of toggle button and switchyingleiw2019-12-161-0/+3
| | | | | | | | | | | | | | We should set the state description whenever textOn and textOff are updated. Setting it multiple times doesn't hurt because the setStateDescription method won't do anything if the state description is the same. Test: tested with talkback test app. Without the change, a toggle button with textOn and textOff set won't have them announced as the state before a click happens. After the change, a toggle button with textOn and textOff set has them announced as state. Change-Id: Ia1cc6218c8cd0125c123c9b650bb4963825db23a
* change CompoundButton button to use the accessibility state APIyingleiw2019-11-191-18/+17
| | | | | | | Test: tested with updated talkback (see CL/274237446). It works as before. Change-Id: I928350c8bc9112252e8b8a703c465489f03fde11
* Added BlendMode equivalent APIs to replace deprecated PorterDuffNader Jawad2019-04-151-16/+75
| | | | | | | | | | | | | variants Updated various framework Views to have equivalent BlendMode APIs to replace the deprecated PorterDuff equivalents. Updated InspectableProperty annotations to refer to the same xml attributes as the original tintmode APIs Bug: 126726419 Test: Added CTS tests to verify new BlendMode APIs Change-Id: Id9ab36d3d4d29f351250723e9d13d49bc6062c83
* Update core widgets to save attribute source info.Aurimas Liutikas2019-02-071-0/+2
| | | | | | Bug: 111439551 Test: make -j Change-Id: I72997a87122f38b32e38e42a690385acc7d0e521
* @InspectableProperty coverage for android.widgetAshley Rose2019-02-041-0/+14
| | | | | | | | | A few getters for view properties have been added where they were missing. CTS tests for the new APIs are pending in b/123894719. Test: m framework Bug: 120492712 Change-Id: I743ce693d384eaf749ced3db7f81bda7d19ed275
* Simplified View.onProvideContentCaptureStructure()Felipe Leme2018-11-161-20/+3
| | | | | | | | | | | | | | | That method was returning a boolean to indicate whether the IntelligenceManager should be notify, so views with virtual hierarchy could return false. But now it returns void and always notify, which makes the API easier to understand and use. Bug: 117944706 Test: m -j update-api doc-comment-check-docs Test: atest CtsAutoFillServiceTestCases Change-Id: I216cacb6edb144239b6eabe56ab177fc2582e1aa
* Added moar ContentCapture APIs (and their initial implementation).Felipe Leme2018-11-121-4/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are 4 new APIs on View: - boolean setImportantForContentCapture() - boolean getImportantForContentCapture() - boolean isImportantForContentCapture() - boolean onProvideContentCaptureStructure() And 4 on IntelligenceManager: - void notifyViewAppeared() - void notifyViewDisappeared() - void notifyViewTextChanged() - ViewStructure newVirtualViewStructure() These methods are similar to the equivalent methods that are used for Autofill and/or Assist, except for the following differences: - The view hierarchy nodes are reported as they are rendered, rather than at once in a tree, recursively. Hence, the ViewStructure implementation does not implement the methods that add children to it, and views that provide virtual hierarchies must manually call IntelligenceManager to create the ViewStructure to their children and notify when their children are added and removed. - It does not support methods added for Autofill to handle HTML pages (such as setHtmlInfo() and setWewbDomain()), as they're not important in the Content Capture context. - Similarly, it also does not support setDataIsSensitive(), because the Intelligence service does not have the same restrictions as the Autofill service. The CL also provides the initial implementation of these APIs, although still full of TODOs (for example, we're not holding the events to send as a batch yet). Test: m -j update-api doc-comment-check-docs Bug: 117944706 Change-Id: I43f06ce82bfe3b14d8d13fb3b2ebee223db83284
* Add @UnsupportedAppUsage annotationsMathew Inwood2018-08-211-0/+11
| | | | | | | | | | | | | | | | For packages: android.widget This is an automatically generated CL. See go/UnsupportedAppUsage for more details. Exempted-From-Owner-Approval: Mechanical changes to the codebase which have been approved by Android API council and announced on android-eng@ Bug: 110868826 Test: m Change-Id: Ic61019b1df85448a158fc2ba55c326353222c6b9
* Switch version gate for fallback linespacing to PRoozbeh Pournader2017-09-211-4/+1
| | | | | | | | | | | | | | | Previously, no version was defined for Android P. Now that I0a90033239081c583b10021cbc06d032e206beb4 defines it, we can switch the version gate on the new fallback-based linespacing behavior of TextView and Switch to it. Test: bit CtsWidgetTestCases:android.widget.cts.CheckedTextViewTest Test: bit CtsWidgetTestCases:android.widget.cts.EditTextTest Test: bit CtsWidgetTestCases:android.widget.cts.SwitchTest Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest Test: bit FrameworksCoreTests:android.widget.TextViewTest Change-Id: Id68ea4b26baa8a632d9f516083a73a0b8879513f Fixes: 64648475
* Use fallback-based line spacing in TextView etcRoozbeh Pournader2017-08-231-2/+10
| | | | | | | | | | | | | | | | | In TextView and Switch, version-gate the use of setUseLineSpacingFromFallbacks() to apps targeting Android P and later for backward compatibility. In internal widgets, ImageFloatingTextView and SubtitleView, always turn it on, since there is no backward compatibility concerns. Bug: 28963299 Test: bit CtsWidgetTestCases:android.widget.cts.CheckedTextViewTest Test: bit CtsWidgetTestCases:android.widget.cts.EditTextTest Test: bit CtsWidgetTestCases:android.widget.cts.SwitchTest Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest Test: bit FrameworksCoreTests:android.widget.TextViewTest Change-Id: Icfe4e71ba26bbc6755ba12ddab72e6bf20b3ce25
* Replaced auto-fill by autofill to keep it consistent with API style.Felipe Leme2017-03-091-5/+5
| | | | | | | | | | | | | | This change will affects 2 types of apps: autofill service implementations and apps that use autofill APIs. Since just the former is known to be used at the moment, we're not trying to keep backward compatibility with the latter. Bug: 35956626 Test: CtsAutoFillServiceTestCases pass Test: android.provider.SettingsBackupTest pass Change-Id: Ia720083508716deae9e887f9faa7ae7c5a82f471
* YAMAFFR - Yet Another Major AutoFill Framework RefactoringFelipe Leme2017-01-101-3/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Explicitly split View methods into Assist and AutoFill methods, rather than use an overloaded method that takes flags. - Simarly, renamed ASSIST_FLAG_SANITIZED_TEXT and ASSIST_FLAG_NON_SANITIZED_TEXT flags to AUTO_FILL_FLAG_TYPE_FILL and AUTO_FILL_FLAG_TYPE_SAVE respectively. - Created a AutoFillUI class to host the auto-fill bar and other UI affordances. - Moved the temporary notifications to AutoFillUI (eventually that class will host the real UI). - Moved FillData to android.app.view.autofill package. - Split IAutoFillCallback in 2 (IAutoFillAppCallback and IAutoFillServerCallback, residing at the app and system_server respectively), so service cannot fill the app directly (which lets the framework control the UI). - Moved assist's IResultReceiver to AutoFillServiceImpl so system_server can act as a mediator between the AutoFillService implementation and the app being auto-filled. - Replaced FillData and FillableInputFields by a bunch of new objects: - FillResponse contains a group of Datasets, each representing different values that can be used to auto-fill an activity (for example, different user accounts), optional id of fields the service is interested to save, and an optional bundle for service-side extras. - Dataset contains a name, Fields, and an optional bundle for service-side extras. - Fields contain an AutoFillId (parcelable) and a value (Bundle) - Changed the temporary notifications to emulate the new workflow: - Initial notification requests the auto-fill data but do not auto-fill. - Once service calls back, a new notification is shown with the results. - Then if the user selects a dataset, the activity is auto-filled with it. - It also shows a notification to emulate what can be saved. - Created an VirtualViewDelegate for views that uses a virtual hierarchy for assist data. - Added new methods on ViewStructure to add children with virtual ids. - Added 2 methods on View to support auto-fill: - autoFill(Bundle) to auto-fill the view. - getAutoFillType() to return how the view can be auto-filled. - AutoFillType defines the input fields that support auto-fill: - Text fields (like EditText) - Toggle fields (like CheckBox) - Lists (like RadioGroup) - AutoFillType can also have a sub-type representing its semantic (for now only text fields have it, and it's the same as getInputType()). - etc :-) Bug: 31001899 Test: manual verification Change-Id: I2dd2fdedcb3ecd1e4403f9c32fa644cb914e186f
* AutoFill Framework refactoring.Felipe Leme2016-12-121-2/+4
| | | | | | | | | | | | | | | | | | | | | The AutoFill Framework uses the same AssitStructure provided by the Assist API and so far it was using the same methods as well, both internally and externally (public API). Sharing that internal code internally is fine, but the public APIs must distinguish between the 2 cases so they can fill the assist structures accordingly (although the initial implementation still shares the same logic). This CL also splits the original 'auto-fill' request in 2 types of requests, which are set by View flags: - ASSIST_FLAG_SANITIZED_TEXT - ASSIST_FLAG_NON_SANITIZED_TEXT It also added new methods and callbacks to handle save requests. Bug: 31001899 Test: manual verification Change-Id: I4eb09099dc19a43cb7e053e64d939aed3704b410
* Fix import statements in android.widget package.Aurimas Liutikas2016-10-111-2/+2
| | | | | | | Additionally this CL removes spaces at the end of the line. Test: code still compiles. Change-Id: I1ce98b4e70aa3ae614f87966c3bc6181fa4389a4
* docs: Mention SwitchCompat in Switch and toggle documentation am: ↵Mark Lu2016-09-261-0/+3
|\ | | | | | | | | | | | | | | 3404032dfc am: cc9f8e2418 am: 15d0605087 Change-Id: I6035ee9f1c532e4298374f1f180e27e374fb146f
| * docs: Mention SwitchCompat in Switch and toggle documentationMark Lu2016-09-021-0/+3
| | | | | | | | | | Bug: 19574556 Change-Id: I2ebb504b144a442d90cfdf6ab4b407726a3b896f
* | Fix bidi desired width calculationSiyamed Sinir2016-06-281-2/+3
|/ | | | | | | | | | Layout.getDesiredWidth measured text with TextDirectionHeuristics.LTR, whereas the real calculations used the active direction heuristic set in the TextView instance. This CL uses the same heuristics for both of them by passing the value to Layout.getDesiredWidth function. Bug: 28845953 Change-Id: I68d23f55fe5a86255d62e83bc62df38a047e4bca
* Add consistent @NonNull annotations for drawable callbacksAlan Viverette2016-03-111-1/+2
| | | | | Bug: 27599515 Change-Id: I33fdc5392302403bfff9cc74a8226173ec962af6
* End switch thumb animator if it's been startedAlan Viverette2015-09-231-1/+1
| | | | | | | | | Running implies that it's been started and the animation has actually begun, which is not true if we call start() and then immediately try to jump state. Bug: 24273164 Change-Id: I7f8d856dbe925679dad082f1e28d8936ac2b04db
* Invalidate when Drawable.setState() returns trueAlan Viverette2015-09-041-6/+11
| | | | | | | | Ensures views that manage drawables follow the contract set forth in the Drawable.setState() documentation. Bug: 23792020 Change-Id: I4e5a449cd6535487873fd8443da50555c38e8ed9
* Always set switch state following dragAlan Viverette2015-08-071-2/+2
| | | | | Bug: 23029815 Change-Id: Ic291803f02cab2a9ccb96622ac0569e1c78c7291
* am e67416ec: am 4859a612: Merge "docs: Clarified how to find out when a ↵Andrew Solovay2015-07-141-1/+1
|\ | | | | | | | | | | | | switch is toggled" into mnc-preview-docs * commit 'e67416eccc6092e2fce3619b2244deda36fabd26': docs: Clarified how to find out when a switch is toggled
| * docs: Clarified how to find out when a switch is toggledAndrew Solovay2015-07-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Per Chris, the existing doc was incorrect: you *can't* check for a button press and a switch flip the same way. (The button triggers a click event, but the switch does not.) Chris suggested that we just remove the reference to onClick and suggest using a listener for both kinds of buttons (ToggleButton and Switch). Also pulled one note out of a section where it didn't fit (the bit about changing a button/switch's state programmatically didn't have much to do with listening for clicks) and put it at the top, and I fixed a Javadoc typo for a relevant class that I happened to notice. See first comment for doc stage location. bug: 20625504 Change-Id: I9c8975111381e5b169f6a61454ef3a93da635759
* | Apply thumbTint and trackTint styles to Switch from xml.Jun Mukai2015-06-241-0/+32
| | | | | | | | | | Bug: 21664957 Change-Id: Id08ae89fb1586968df4b901816a8e108bb8570af
* | assist: Fix reported colors/styles for TextView/SwitchJames Cook2015-05-281-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes to the data provided to AssistStructure: * Text foreground color is correct even if the view has not yet been painted. * Text background color is now always 1 (TEXT_COLOR_UNDEFINED) for a TextView, as it has no separate concept of background color. * Switch now reports the text size/color/style of the label text (usually user visible) rather than the on/off text on the button itself (usually hidden in Material, and not usually revelant when visible). Bug: 21080375 Change-Id: I7e15f68d89510a76cab76031c2c8ca6ca3f32435
* | Revert "Fix build - Revert "Revert "Use default constructor to get ↵Chris Craik2015-05-121-1/+2
| | | | | | | | | | | | | | | | | | | | anti-aliasing""" Fix import This reverts commit 7ed1431c83286abc83b9e5afc45fbd21ecb777b1. Change-Id: Id93eba3ed1d47a90384ba20dea6f74d78755792b
* | Fix build - Revert "Revert "Use default constructor to get anti-aliasing""Chris Craik2015-05-121-1/+1
| | | | | | | | | | | | This reverts commit dfe0a66ceca530e0777ebfab20f81103baa18f14. Change-Id: I58a1bae649a284f3d3b6213064d903ea7fcf185a
* | Revert "Use default constructor to get anti-aliasing"Chris Craik2015-05-121-1/+1
| | | | | | | | | | | | | | | | bug:20948129 This reverts commit 58fc522a69e8ddf9ac8530ce88e9c2c92da1dd14. Change-Id: Iddeccb4ad15b843bb3e610bd3673a0c7abc1bf46
* | Fix issue #20655182: API Review: ViewAssistStructureDianne Hackborn2015-05-071-5/+3
| | | | | | | | | | | | | | | | | | | | | | Fix the various view assist related APIs. Also remove the blockAssist view attribute, and instead use the window's FLAG_SECURE to drive blocking of the entire hierarchy (which is semantically correct, and will protect existing apps that have already indicated they need it). Change-Id: I6beebc86b202809cba0a356cae9607d8d0fb5e78
* | Use default constructor to get anti-aliasingChris Craik2015-04-281-1/+1
| | | | | | | | Change-Id: I3e078a3bc91a2fd703984ba18b5e7e98069b32f1
* | Rework assist to walk down the view hierarchy.Dianne Hackborn2015-04-011-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | Instead of collecting all of the data directly in AssistStructure, we now have a dispatch mechanism down the hierarchy to do so. While doing this, also added the ability to automatically collect assist data from AccessibilityNodeProviders attached to views (so now we see all of the data in for example Calendar). This is a first step needed towards being able to asynchronously populate assist data. Change-Id: I59ee1ea104ca8207bad8df7a38195d93da1adea7
* | More work on collecting assist data.Dianne Hackborn2015-03-121-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Optimize parceling of AssistData (which is now renamed to AssistStructure) by pooling duplicated class name strings. Change text associated with a view node to a CharSequence, so styling information comes along. Include global text attributes -- size, colors, etc. Introduce a new AssistContent structure, which allows us to propagate information about the intent and data the activity is looking at. This further allows us to propagate permission grants, so the assistant can dig in to that data. The default implementation propagates the base intent of an activity, so if for example you bring up the assistant while doing a share the assistant itself has the same information and access that was given to the share activity (so it could for example share it in another way if it wanted to). Did some optimization of loading PersistableBundle from xml, to avoid duplicating hash maps and such. Changed how we dispatch ACTION_ASSIST to no longer include the more detailed AssistStructure (and new AssistContent) data when launching; now the example code that intercepts that needs to be sure to ask for assist data when it starts its session. This is more like it will finally be, and allows us to get to the UI more quickly. Change-Id: I88420a55761bf48d34ce3013e81bd96a0e087637
* | Add @ResourceInt annotations on APIsTor Norbye2015-02-181-3/+5
| | | | | | | | Change-Id: I119cc059c2f8bd98fd585fc84ac2b1b7d5892a08
* | First quick implementation of auto assist data.Dianne Hackborn2015-02-061-5/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce new AssistData class that contains all data the framework automatically generates for assist. Currently populated with a very simple tree structure representing the app's view hierarchy. Reworked how we populate the class name for accessibility info, so this is provided through a new method call on View that subclasses can override. This method is also used to populate the class name in AssistData. Change-Id: Ibd0acdc8354727d4291473283b5e4b70894905dc
* | Add accessors for switch thumb and track tintingAlan Viverette2015-01-301-0/+172
| | | | | | | | | | Bug: 19196145 Change-Id: I5c426bc8c624c75fd27faaf6e0cbef5a0594175a
* | Fix accessibility delegationAlan Viverette2015-01-071-6/+9
|/ | | | | | | | | | | | | | | Ensures that delegate code is run last. Previously, calling the super method from an accessibility delegate set on a widget would only run code in the widget's parent. Next, the delegate code would run. Finally, the widget's code would run. As a result, the widget code would override any data supplied by the delegate. By moving all overridden code to internal methods, we ensure that the call chain for super includes the widget's parent code followed by the widget's code. The delegate code will always run last. BUG: 17641433 Change-Id: Ib9d403156c1fc4fb04f65f3c126d1277a44b3740
* Fix regression, don't NPE if Switch doesn't have a thumb setAlan Viverette2014-12-081-0/+4
| | | | | BUG: 18670202 Change-Id: Iecb3498032c121c007ec87740ddebadb8e71c7a3
* Play CLICK sound effect when compound buttons are clickedAlan Viverette2014-10-271-2/+8
| | | | | | | | Also plays the sound effect when the switch changes state as a result of dragging, since that's effectively the same as the click action. BUG: 16308311 Change-Id: Ic187ece2a8190082617f5ac7aaf05c3511fa80b5
* Add callback to track and thumb drawables, propagate state in ASLDAlan Viverette2014-09-261-0/+18
| | | | | BUG: 17665424 Change-Id: I22da4530f3e2869d856102e804f020461a46fe49
* Use correct checked value when animating SwitchAlan Viverette2014-08-121-0/+4
| | | | | BUG: 16984959 Change-Id: I1b4ffea568619663e26c097a28b86579d090c0ce
* Update switch assets, fix SearchView asset 9-patch areasAlan Viverette2014-07-301-40/+129
| | | | | | BUG: 16606037 BUG: 16467249 Change-Id: I9a5888e37317d1f8a6481f9733f784bbd37268f3
* Revert "Update switch assets, fix SearchView asset 9-patch areas"Alan Viverette2014-07-301-129/+40
| | | | | | | | Missing updated current.txt This reverts commit dbf6b0d68a3d502430d061cd14f03f344b50f019. Change-Id: I70846883f56be661fa89f9eaf20f5d103f2833c6