ADD week 5
This commit is contained in:
		
							
								
								
									
										242
									
								
								02-Easy5/E5/sources/androidx/customview/R.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										242
									
								
								02-Easy5/E5/sources/androidx/customview/R.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,242 @@ | ||||
| package androidx.customview; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class R { | ||||
|  | ||||
|     public static final class attr { | ||||
|         public static final int alpha = 0x7f03002e; | ||||
|         public static final int font = 0x7f0301fb; | ||||
|         public static final int fontProviderAuthority = 0x7f0301fd; | ||||
|         public static final int fontProviderCerts = 0x7f0301fe; | ||||
|         public static final int fontProviderFetchStrategy = 0x7f0301ff; | ||||
|         public static final int fontProviderFetchTimeout = 0x7f030200; | ||||
|         public static final int fontProviderPackage = 0x7f030201; | ||||
|         public static final int fontProviderQuery = 0x7f030202; | ||||
|         public static final int fontStyle = 0x7f030204; | ||||
|         public static final int fontVariationSettings = 0x7f030205; | ||||
|         public static final int fontWeight = 0x7f030206; | ||||
|         public static final int ttcIndex = 0x7f0304b6; | ||||
|  | ||||
|         private attr() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class color { | ||||
|         public static final int androidx_core_ripple_material_light = 0x7f05001b; | ||||
|         public static final int androidx_core_secondary_text_default_material_light = 0x7f05001c; | ||||
|         public static final int notification_action_color_filter = 0x7f0502e9; | ||||
|         public static final int notification_icon_bg_color = 0x7f0502ea; | ||||
|  | ||||
|         private color() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class dimen { | ||||
|         public static final int compat_button_inset_horizontal_material = 0x7f060058; | ||||
|         public static final int compat_button_inset_vertical_material = 0x7f060059; | ||||
|         public static final int compat_button_padding_horizontal_material = 0x7f06005a; | ||||
|         public static final int compat_button_padding_vertical_material = 0x7f06005b; | ||||
|         public static final int compat_control_corner_material = 0x7f06005c; | ||||
|         public static final int compat_notification_large_icon_max_height = 0x7f06005d; | ||||
|         public static final int compat_notification_large_icon_max_width = 0x7f06005e; | ||||
|         public static final int notification_action_icon_size = 0x7f060307; | ||||
|         public static final int notification_action_text_size = 0x7f060308; | ||||
|         public static final int notification_big_circle_margin = 0x7f060309; | ||||
|         public static final int notification_content_margin_start = 0x7f06030a; | ||||
|         public static final int notification_large_icon_height = 0x7f06030b; | ||||
|         public static final int notification_large_icon_width = 0x7f06030c; | ||||
|         public static final int notification_main_column_padding_top = 0x7f06030d; | ||||
|         public static final int notification_media_narrow_margin = 0x7f06030e; | ||||
|         public static final int notification_right_icon_size = 0x7f06030f; | ||||
|         public static final int notification_right_side_padding_top = 0x7f060310; | ||||
|         public static final int notification_small_icon_background_padding = 0x7f060311; | ||||
|         public static final int notification_small_icon_size_as_large = 0x7f060312; | ||||
|         public static final int notification_subtext_size = 0x7f060313; | ||||
|         public static final int notification_top_pad = 0x7f060314; | ||||
|         public static final int notification_top_pad_large_text = 0x7f060315; | ||||
|  | ||||
|         private dimen() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class drawable { | ||||
|         public static final int notification_action_background = 0x7f0700d0; | ||||
|         public static final int notification_bg = 0x7f0700d1; | ||||
|         public static final int notification_bg_low = 0x7f0700d2; | ||||
|         public static final int notification_bg_low_normal = 0x7f0700d3; | ||||
|         public static final int notification_bg_low_pressed = 0x7f0700d4; | ||||
|         public static final int notification_bg_normal = 0x7f0700d5; | ||||
|         public static final int notification_bg_normal_pressed = 0x7f0700d6; | ||||
|         public static final int notification_icon_background = 0x7f0700d7; | ||||
|         public static final int notification_template_icon_bg = 0x7f0700d8; | ||||
|         public static final int notification_template_icon_low_bg = 0x7f0700d9; | ||||
|         public static final int notification_tile_bg = 0x7f0700da; | ||||
|         public static final int notify_panel_notification_icon_bg = 0x7f0700db; | ||||
|  | ||||
|         private drawable() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class id { | ||||
|         public static final int accessibility_action_clickable_span = 0x7f08000f; | ||||
|         public static final int accessibility_custom_action_0 = 0x7f080010; | ||||
|         public static final int accessibility_custom_action_1 = 0x7f080011; | ||||
|         public static final int accessibility_custom_action_10 = 0x7f080012; | ||||
|         public static final int accessibility_custom_action_11 = 0x7f080013; | ||||
|         public static final int accessibility_custom_action_12 = 0x7f080014; | ||||
|         public static final int accessibility_custom_action_13 = 0x7f080015; | ||||
|         public static final int accessibility_custom_action_14 = 0x7f080016; | ||||
|         public static final int accessibility_custom_action_15 = 0x7f080017; | ||||
|         public static final int accessibility_custom_action_16 = 0x7f080018; | ||||
|         public static final int accessibility_custom_action_17 = 0x7f080019; | ||||
|         public static final int accessibility_custom_action_18 = 0x7f08001a; | ||||
|         public static final int accessibility_custom_action_19 = 0x7f08001b; | ||||
|         public static final int accessibility_custom_action_2 = 0x7f08001c; | ||||
|         public static final int accessibility_custom_action_20 = 0x7f08001d; | ||||
|         public static final int accessibility_custom_action_21 = 0x7f08001e; | ||||
|         public static final int accessibility_custom_action_22 = 0x7f08001f; | ||||
|         public static final int accessibility_custom_action_23 = 0x7f080020; | ||||
|         public static final int accessibility_custom_action_24 = 0x7f080021; | ||||
|         public static final int accessibility_custom_action_25 = 0x7f080022; | ||||
|         public static final int accessibility_custom_action_26 = 0x7f080023; | ||||
|         public static final int accessibility_custom_action_27 = 0x7f080024; | ||||
|         public static final int accessibility_custom_action_28 = 0x7f080025; | ||||
|         public static final int accessibility_custom_action_29 = 0x7f080026; | ||||
|         public static final int accessibility_custom_action_3 = 0x7f080027; | ||||
|         public static final int accessibility_custom_action_30 = 0x7f080028; | ||||
|         public static final int accessibility_custom_action_31 = 0x7f080029; | ||||
|         public static final int accessibility_custom_action_4 = 0x7f08002a; | ||||
|         public static final int accessibility_custom_action_5 = 0x7f08002b; | ||||
|         public static final int accessibility_custom_action_6 = 0x7f08002c; | ||||
|         public static final int accessibility_custom_action_7 = 0x7f08002d; | ||||
|         public static final int accessibility_custom_action_8 = 0x7f08002e; | ||||
|         public static final int accessibility_custom_action_9 = 0x7f08002f; | ||||
|         public static final int action_container = 0x7f08003a; | ||||
|         public static final int action_divider = 0x7f08003c; | ||||
|         public static final int action_image = 0x7f08003d; | ||||
|         public static final int action_text = 0x7f080043; | ||||
|         public static final int actions = 0x7f080044; | ||||
|         public static final int async = 0x7f080052; | ||||
|         public static final int blocking = 0x7f08005c; | ||||
|         public static final int chronometer = 0x7f080071; | ||||
|         public static final int dialog_button = 0x7f080095; | ||||
|         public static final int forever = 0x7f0800c2; | ||||
|         public static final int icon = 0x7f0800d4; | ||||
|         public static final int icon_group = 0x7f0800d5; | ||||
|         public static final int info = 0x7f0800dd; | ||||
|         public static final int italic = 0x7f0800e0; | ||||
|         public static final int line1 = 0x7f0800e9; | ||||
|         public static final int line3 = 0x7f0800ea; | ||||
|         public static final int normal = 0x7f080139; | ||||
|         public static final int notification_background = 0x7f08013b; | ||||
|         public static final int notification_main_column = 0x7f08013c; | ||||
|         public static final int notification_main_column_container = 0x7f08013d; | ||||
|         public static final int right_icon = 0x7f08016b; | ||||
|         public static final int right_side = 0x7f08016c; | ||||
|         public static final int tag_accessibility_actions = 0x7f0801ad; | ||||
|         public static final int tag_accessibility_clickable_spans = 0x7f0801ae; | ||||
|         public static final int tag_accessibility_heading = 0x7f0801af; | ||||
|         public static final int tag_accessibility_pane_title = 0x7f0801b0; | ||||
|         public static final int tag_screen_reader_focusable = 0x7f0801b4; | ||||
|         public static final int tag_transition_group = 0x7f0801b6; | ||||
|         public static final int tag_unhandled_key_event_manager = 0x7f0801b7; | ||||
|         public static final int tag_unhandled_key_listeners = 0x7f0801b8; | ||||
|         public static final int text = 0x7f0801ba; | ||||
|         public static final int text2 = 0x7f0801bb; | ||||
|         public static final int time = 0x7f0801ca; | ||||
|         public static final int title = 0x7f0801cb; | ||||
|  | ||||
|         private id() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class integer { | ||||
|         public static final int status_bar_notification_info_maxnum = 0x7f090043; | ||||
|  | ||||
|         private integer() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class layout { | ||||
|         public static final int custom_dialog = 0x7f0b001d; | ||||
|         public static final int notification_action = 0x7f0b0060; | ||||
|         public static final int notification_action_tombstone = 0x7f0b0061; | ||||
|         public static final int notification_template_custom_big = 0x7f0b0062; | ||||
|         public static final int notification_template_icon_group = 0x7f0b0063; | ||||
|         public static final int notification_template_part_chronometer = 0x7f0b0064; | ||||
|         public static final int notification_template_part_time = 0x7f0b0065; | ||||
|  | ||||
|         private layout() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class string { | ||||
|         public static final int status_bar_notification_info_overflow = 0x7f0f00a8; | ||||
|  | ||||
|         private string() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class style { | ||||
|         public static final int TextAppearance_Compat_Notification = 0x7f1001c3; | ||||
|         public static final int TextAppearance_Compat_Notification_Info = 0x7f1001c4; | ||||
|         public static final int TextAppearance_Compat_Notification_Line2 = 0x7f1001c5; | ||||
|         public static final int TextAppearance_Compat_Notification_Time = 0x7f1001c6; | ||||
|         public static final int TextAppearance_Compat_Notification_Title = 0x7f1001c7; | ||||
|         public static final int Widget_Compat_NotificationActionContainer = 0x7f10032d; | ||||
|         public static final int Widget_Compat_NotificationActionText = 0x7f10032e; | ||||
|  | ||||
|         private style() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static final class styleable { | ||||
|         public static final int ColorStateListItem_alpha = 0x00000003; | ||||
|         public static final int ColorStateListItem_android_alpha = 0x00000001; | ||||
|         public static final int ColorStateListItem_android_color = 0x00000000; | ||||
|         public static final int ColorStateListItem_android_lStar = 0x00000002; | ||||
|         public static final int ColorStateListItem_lStar = 0x00000004; | ||||
|         public static final int FontFamilyFont_android_font = 0x00000000; | ||||
|         public static final int FontFamilyFont_android_fontStyle = 0x00000002; | ||||
|         public static final int FontFamilyFont_android_fontVariationSettings = 0x00000004; | ||||
|         public static final int FontFamilyFont_android_fontWeight = 0x00000001; | ||||
|         public static final int FontFamilyFont_android_ttcIndex = 0x00000003; | ||||
|         public static final int FontFamilyFont_font = 0x00000005; | ||||
|         public static final int FontFamilyFont_fontStyle = 0x00000006; | ||||
|         public static final int FontFamilyFont_fontVariationSettings = 0x00000007; | ||||
|         public static final int FontFamilyFont_fontWeight = 0x00000008; | ||||
|         public static final int FontFamilyFont_ttcIndex = 0x00000009; | ||||
|         public static final int FontFamily_fontProviderAuthority = 0x00000000; | ||||
|         public static final int FontFamily_fontProviderCerts = 0x00000001; | ||||
|         public static final int FontFamily_fontProviderFetchStrategy = 0x00000002; | ||||
|         public static final int FontFamily_fontProviderFetchTimeout = 0x00000003; | ||||
|         public static final int FontFamily_fontProviderPackage = 0x00000004; | ||||
|         public static final int FontFamily_fontProviderQuery = 0x00000005; | ||||
|         public static final int FontFamily_fontProviderSystemFontFamily = 0x00000006; | ||||
|         public static final int GradientColorItem_android_color = 0x00000000; | ||||
|         public static final int GradientColorItem_android_offset = 0x00000001; | ||||
|         public static final int GradientColor_android_centerColor = 0x00000007; | ||||
|         public static final int GradientColor_android_centerX = 0x00000003; | ||||
|         public static final int GradientColor_android_centerY = 0x00000004; | ||||
|         public static final int GradientColor_android_endColor = 0x00000001; | ||||
|         public static final int GradientColor_android_endX = 0x0000000a; | ||||
|         public static final int GradientColor_android_endY = 0x0000000b; | ||||
|         public static final int GradientColor_android_gradientRadius = 0x00000005; | ||||
|         public static final int GradientColor_android_startColor = 0x00000000; | ||||
|         public static final int GradientColor_android_startX = 0x00000008; | ||||
|         public static final int GradientColor_android_startY = 0x00000009; | ||||
|         public static final int GradientColor_android_tileMode = 0x00000006; | ||||
|         public static final int GradientColor_android_type = 0x00000002; | ||||
|         public static final int[] ColorStateListItem = {android.R.attr.color, android.R.attr.alpha, android.R.attr.lStar, ch.mod_p.sre24.e5.R.attr.alpha, ch.mod_p.sre24.e5.R.attr.lStar}; | ||||
|         public static final int[] FontFamily = {ch.mod_p.sre24.e5.R.attr.fontProviderAuthority, ch.mod_p.sre24.e5.R.attr.fontProviderCerts, ch.mod_p.sre24.e5.R.attr.fontProviderFetchStrategy, ch.mod_p.sre24.e5.R.attr.fontProviderFetchTimeout, ch.mod_p.sre24.e5.R.attr.fontProviderPackage, ch.mod_p.sre24.e5.R.attr.fontProviderQuery, ch.mod_p.sre24.e5.R.attr.fontProviderSystemFontFamily}; | ||||
|         public static final int[] FontFamilyFont = {android.R.attr.font, android.R.attr.fontWeight, android.R.attr.fontStyle, android.R.attr.ttcIndex, android.R.attr.fontVariationSettings, ch.mod_p.sre24.e5.R.attr.font, ch.mod_p.sre24.e5.R.attr.fontStyle, ch.mod_p.sre24.e5.R.attr.fontVariationSettings, ch.mod_p.sre24.e5.R.attr.fontWeight, ch.mod_p.sre24.e5.R.attr.ttcIndex}; | ||||
|         public static final int[] GradientColor = {android.R.attr.startColor, android.R.attr.endColor, android.R.attr.type, android.R.attr.centerX, android.R.attr.centerY, android.R.attr.gradientRadius, android.R.attr.tileMode, android.R.attr.centerColor, android.R.attr.startX, android.R.attr.startY, android.R.attr.endX, android.R.attr.endY}; | ||||
|         public static final int[] GradientColorItem = {android.R.attr.color, android.R.attr.offset}; | ||||
|  | ||||
|         private styleable() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private R() { | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,65 @@ | ||||
| package androidx.customview.view; | ||||
|  | ||||
| import android.os.Parcel; | ||||
| import android.os.Parcelable; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public abstract class AbsSavedState implements Parcelable { | ||||
|     private final Parcelable mSuperState; | ||||
|     public static final AbsSavedState EMPTY_STATE = new AbsSavedState() { // from class: androidx.customview.view.AbsSavedState.1 | ||||
|     }; | ||||
|     public static final Parcelable.Creator<AbsSavedState> CREATOR = new Parcelable.ClassLoaderCreator<AbsSavedState>() { // from class: androidx.customview.view.AbsSavedState.2 | ||||
|         /* JADX WARN: Can't rename method to resolve collision */ | ||||
|         @Override // android.os.Parcelable.ClassLoaderCreator | ||||
|         public AbsSavedState createFromParcel(Parcel parcel, ClassLoader classLoader) { | ||||
|             if (parcel.readParcelable(classLoader) != null) { | ||||
|                 throw new IllegalStateException("superState must be null"); | ||||
|             } | ||||
|             return AbsSavedState.EMPTY_STATE; | ||||
|         } | ||||
|  | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public AbsSavedState createFromParcel(Parcel parcel) { | ||||
|             return createFromParcel(parcel, (ClassLoader) null); | ||||
|         } | ||||
|  | ||||
|         @Override // android.os.Parcelable.Creator | ||||
|         public AbsSavedState[] newArray(int i) { | ||||
|             return new AbsSavedState[i]; | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public int describeContents() { | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     public final Parcelable getSuperState() { | ||||
|         return this.mSuperState; | ||||
|     } | ||||
|  | ||||
|     private AbsSavedState() { | ||||
|         this.mSuperState = null; | ||||
|     } | ||||
|  | ||||
|     protected AbsSavedState(Parcelable parcelable) { | ||||
|         if (parcelable == null) { | ||||
|             throw new IllegalArgumentException("superState must not be null"); | ||||
|         } | ||||
|         this.mSuperState = parcelable == EMPTY_STATE ? null : parcelable; | ||||
|     } | ||||
|  | ||||
|     protected AbsSavedState(Parcel parcel) { | ||||
|         this(parcel, null); | ||||
|     } | ||||
|  | ||||
|     protected AbsSavedState(Parcel parcel, ClassLoader classLoader) { | ||||
|         Parcelable readParcelable = parcel.readParcelable(classLoader); | ||||
|         this.mSuperState = readParcelable == null ? EMPTY_STATE : readParcelable; | ||||
|     } | ||||
|  | ||||
|     @Override // android.os.Parcelable | ||||
|     public void writeToParcel(Parcel parcel, int i) { | ||||
|         parcel.writeParcelable(this.mSuperState, i); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,538 @@ | ||||
| package androidx.customview.widget; | ||||
|  | ||||
| import android.graphics.Rect; | ||||
| import android.os.Bundle; | ||||
| import android.view.KeyEvent; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.view.ViewParent; | ||||
| import android.view.accessibility.AccessibilityEvent; | ||||
| import android.view.accessibility.AccessibilityManager; | ||||
| import androidx.collection.SparseArrayCompat; | ||||
| import androidx.core.view.AccessibilityDelegateCompat; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityEventCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityNodeProviderCompat; | ||||
| import androidx.core.view.accessibility.AccessibilityRecordCompat; | ||||
| import androidx.customview.widget.FocusStrategy; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public abstract class ExploreByTouchHelper extends AccessibilityDelegateCompat { | ||||
|     private static final String DEFAULT_CLASS_NAME = "android.view.View"; | ||||
|     public static final int HOST_ID = -1; | ||||
|     public static final int INVALID_ID = Integer.MIN_VALUE; | ||||
|     private static final Rect INVALID_PARENT_BOUNDS = new Rect(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); | ||||
|     private static final FocusStrategy.BoundsAdapter<AccessibilityNodeInfoCompat> NODE_ADAPTER = new FocusStrategy.BoundsAdapter<AccessibilityNodeInfoCompat>() { // from class: androidx.customview.widget.ExploreByTouchHelper.1 | ||||
|         @Override // androidx.customview.widget.FocusStrategy.BoundsAdapter | ||||
|         public void obtainBounds(AccessibilityNodeInfoCompat accessibilityNodeInfoCompat, Rect rect) { | ||||
|             accessibilityNodeInfoCompat.getBoundsInParent(rect); | ||||
|         } | ||||
|     }; | ||||
|     private static final FocusStrategy.CollectionAdapter<SparseArrayCompat<AccessibilityNodeInfoCompat>, AccessibilityNodeInfoCompat> SPARSE_VALUES_ADAPTER = new FocusStrategy.CollectionAdapter<SparseArrayCompat<AccessibilityNodeInfoCompat>, AccessibilityNodeInfoCompat>() { // from class: androidx.customview.widget.ExploreByTouchHelper.2 | ||||
|         @Override // androidx.customview.widget.FocusStrategy.CollectionAdapter | ||||
|         public AccessibilityNodeInfoCompat get(SparseArrayCompat<AccessibilityNodeInfoCompat> sparseArrayCompat, int i) { | ||||
|             return sparseArrayCompat.valueAt(i); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.customview.widget.FocusStrategy.CollectionAdapter | ||||
|         public int size(SparseArrayCompat<AccessibilityNodeInfoCompat> sparseArrayCompat) { | ||||
|             return sparseArrayCompat.size(); | ||||
|         } | ||||
|     }; | ||||
|     private final View mHost; | ||||
|     private final AccessibilityManager mManager; | ||||
|     private MyNodeProvider mNodeProvider; | ||||
|     private final Rect mTempScreenRect = new Rect(); | ||||
|     private final Rect mTempParentRect = new Rect(); | ||||
|     private final Rect mTempVisibleRect = new Rect(); | ||||
|     private final int[] mTempGlobalRect = new int[2]; | ||||
|     int mAccessibilityFocusedVirtualViewId = Integer.MIN_VALUE; | ||||
|     int mKeyboardFocusedVirtualViewId = Integer.MIN_VALUE; | ||||
|     private int mHoveredVirtualViewId = Integer.MIN_VALUE; | ||||
|  | ||||
|     private static int keyToDirection(int i) { | ||||
|         if (i == 19) { | ||||
|             return 33; | ||||
|         } | ||||
|         if (i != 21) { | ||||
|             return i != 22 ? 130 : 66; | ||||
|         } | ||||
|         return 17; | ||||
|     } | ||||
|  | ||||
|     public final int getAccessibilityFocusedVirtualViewId() { | ||||
|         return this.mAccessibilityFocusedVirtualViewId; | ||||
|     } | ||||
|  | ||||
|     public final int getKeyboardFocusedVirtualViewId() { | ||||
|         return this.mKeyboardFocusedVirtualViewId; | ||||
|     } | ||||
|  | ||||
|     protected abstract int getVirtualViewAt(float f, float f2); | ||||
|  | ||||
|     protected abstract void getVisibleVirtualViews(List<Integer> list); | ||||
|  | ||||
|     protected abstract boolean onPerformActionForVirtualView(int i, int i2, Bundle bundle); | ||||
|  | ||||
|     protected void onPopulateEventForHost(AccessibilityEvent accessibilityEvent) { | ||||
|     } | ||||
|  | ||||
|     protected void onPopulateEventForVirtualView(int i, AccessibilityEvent accessibilityEvent) { | ||||
|     } | ||||
|  | ||||
|     protected void onPopulateNodeForHost(AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) { | ||||
|     } | ||||
|  | ||||
|     protected abstract void onPopulateNodeForVirtualView(int i, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat); | ||||
|  | ||||
|     protected void onVirtualViewKeyboardFocusChanged(int i, boolean z) { | ||||
|     } | ||||
|  | ||||
|     public ExploreByTouchHelper(View view) { | ||||
|         if (view == null) { | ||||
|             throw new IllegalArgumentException("View may not be null"); | ||||
|         } | ||||
|         this.mHost = view; | ||||
|         this.mManager = (AccessibilityManager) view.getContext().getSystemService("accessibility"); | ||||
|         view.setFocusable(true); | ||||
|         if (ViewCompat.getImportantForAccessibility(view) == 0) { | ||||
|             ViewCompat.setImportantForAccessibility(view, 1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|     public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View view) { | ||||
|         if (this.mNodeProvider == null) { | ||||
|             this.mNodeProvider = new MyNodeProvider(); | ||||
|         } | ||||
|         return this.mNodeProvider; | ||||
|     } | ||||
|  | ||||
|     public final boolean dispatchHoverEvent(MotionEvent motionEvent) { | ||||
|         if (!this.mManager.isEnabled() || !this.mManager.isTouchExplorationEnabled()) { | ||||
|             return false; | ||||
|         } | ||||
|         int action = motionEvent.getAction(); | ||||
|         if (action == 7 || action == 9) { | ||||
|             int virtualViewAt = getVirtualViewAt(motionEvent.getX(), motionEvent.getY()); | ||||
|             updateHoveredVirtualView(virtualViewAt); | ||||
|             return virtualViewAt != Integer.MIN_VALUE; | ||||
|         } | ||||
|         if (action != 10 || this.mHoveredVirtualViewId == Integer.MIN_VALUE) { | ||||
|             return false; | ||||
|         } | ||||
|         updateHoveredVirtualView(Integer.MIN_VALUE); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public final boolean dispatchKeyEvent(KeyEvent keyEvent) { | ||||
|         int i = 0; | ||||
|         if (keyEvent.getAction() == 1) { | ||||
|             return false; | ||||
|         } | ||||
|         int keyCode = keyEvent.getKeyCode(); | ||||
|         if (keyCode != 61) { | ||||
|             if (keyCode != 66) { | ||||
|                 switch (keyCode) { | ||||
|                     case 19: | ||||
|                     case 20: | ||||
|                     case 21: | ||||
|                     case 22: | ||||
|                         if (!keyEvent.hasNoModifiers()) { | ||||
|                             return false; | ||||
|                         } | ||||
|                         int keyToDirection = keyToDirection(keyCode); | ||||
|                         int repeatCount = keyEvent.getRepeatCount() + 1; | ||||
|                         boolean z = false; | ||||
|                         while (i < repeatCount && moveFocus(keyToDirection, null)) { | ||||
|                             i++; | ||||
|                             z = true; | ||||
|                         } | ||||
|                         return z; | ||||
|                     case 23: | ||||
|                         break; | ||||
|                     default: | ||||
|                         return false; | ||||
|                 } | ||||
|             } | ||||
|             if (!keyEvent.hasNoModifiers() || keyEvent.getRepeatCount() != 0) { | ||||
|                 return false; | ||||
|             } | ||||
|             clickKeyboardFocusedVirtualView(); | ||||
|             return true; | ||||
|         } | ||||
|         if (keyEvent.hasNoModifiers()) { | ||||
|             return moveFocus(2, null); | ||||
|         } | ||||
|         if (keyEvent.hasModifiers(1)) { | ||||
|             return moveFocus(1, null); | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public final void onFocusChanged(boolean z, int i, Rect rect) { | ||||
|         int i2 = this.mKeyboardFocusedVirtualViewId; | ||||
|         if (i2 != Integer.MIN_VALUE) { | ||||
|             clearKeyboardFocusForVirtualView(i2); | ||||
|         } | ||||
|         if (z) { | ||||
|             moveFocus(i, rect); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void getBoundsInParent(int i, Rect rect) { | ||||
|         obtainAccessibilityNodeInfo(i).getBoundsInParent(rect); | ||||
|     } | ||||
|  | ||||
|     private boolean moveFocus(int i, Rect rect) { | ||||
|         AccessibilityNodeInfoCompat accessibilityNodeInfoCompat; | ||||
|         SparseArrayCompat<AccessibilityNodeInfoCompat> allNodes = getAllNodes(); | ||||
|         int i2 = this.mKeyboardFocusedVirtualViewId; | ||||
|         AccessibilityNodeInfoCompat accessibilityNodeInfoCompat2 = i2 == Integer.MIN_VALUE ? null : allNodes.get(i2); | ||||
|         if (i == 1 || i == 2) { | ||||
|             accessibilityNodeInfoCompat = (AccessibilityNodeInfoCompat) FocusStrategy.findNextFocusInRelativeDirection(allNodes, SPARSE_VALUES_ADAPTER, NODE_ADAPTER, accessibilityNodeInfoCompat2, i, ViewCompat.getLayoutDirection(this.mHost) == 1, false); | ||||
|         } else if (i == 17 || i == 33 || i == 66 || i == 130) { | ||||
|             Rect rect2 = new Rect(); | ||||
|             int i3 = this.mKeyboardFocusedVirtualViewId; | ||||
|             if (i3 != Integer.MIN_VALUE) { | ||||
|                 getBoundsInParent(i3, rect2); | ||||
|             } else if (rect != null) { | ||||
|                 rect2.set(rect); | ||||
|             } else { | ||||
|                 guessPreviouslyFocusedRect(this.mHost, i, rect2); | ||||
|             } | ||||
|             accessibilityNodeInfoCompat = (AccessibilityNodeInfoCompat) FocusStrategy.findNextFocusInAbsoluteDirection(allNodes, SPARSE_VALUES_ADAPTER, NODE_ADAPTER, accessibilityNodeInfoCompat2, rect2, i); | ||||
|         } else { | ||||
|             throw new IllegalArgumentException("direction must be one of {FOCUS_FORWARD, FOCUS_BACKWARD, FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|         } | ||||
|         return requestKeyboardFocusForVirtualView(accessibilityNodeInfoCompat != null ? allNodes.keyAt(allNodes.indexOfValue(accessibilityNodeInfoCompat)) : Integer.MIN_VALUE); | ||||
|     } | ||||
|  | ||||
|     private SparseArrayCompat<AccessibilityNodeInfoCompat> getAllNodes() { | ||||
|         ArrayList arrayList = new ArrayList(); | ||||
|         getVisibleVirtualViews(arrayList); | ||||
|         SparseArrayCompat<AccessibilityNodeInfoCompat> sparseArrayCompat = new SparseArrayCompat<>(); | ||||
|         for (int i = 0; i < arrayList.size(); i++) { | ||||
|             sparseArrayCompat.put(arrayList.get(i).intValue(), createNodeForChild(arrayList.get(i).intValue())); | ||||
|         } | ||||
|         return sparseArrayCompat; | ||||
|     } | ||||
|  | ||||
|     private static Rect guessPreviouslyFocusedRect(View view, int i, Rect rect) { | ||||
|         int width = view.getWidth(); | ||||
|         int height = view.getHeight(); | ||||
|         if (i == 17) { | ||||
|             rect.set(width, 0, width, height); | ||||
|         } else if (i == 33) { | ||||
|             rect.set(0, height, width, height); | ||||
|         } else if (i == 66) { | ||||
|             rect.set(-1, 0, -1, height); | ||||
|         } else if (i == 130) { | ||||
|             rect.set(0, -1, width, -1); | ||||
|         } else { | ||||
|             throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|         } | ||||
|         return rect; | ||||
|     } | ||||
|  | ||||
|     private boolean clickKeyboardFocusedVirtualView() { | ||||
|         int i = this.mKeyboardFocusedVirtualViewId; | ||||
|         return i != Integer.MIN_VALUE && onPerformActionForVirtualView(i, 16, null); | ||||
|     } | ||||
|  | ||||
|     public final boolean sendEventForVirtualView(int i, int i2) { | ||||
|         ViewParent parent; | ||||
|         if (i == Integer.MIN_VALUE || !this.mManager.isEnabled() || (parent = this.mHost.getParent()) == null) { | ||||
|             return false; | ||||
|         } | ||||
|         return parent.requestSendAccessibilityEvent(this.mHost, createEvent(i, i2)); | ||||
|     } | ||||
|  | ||||
|     public final void invalidateRoot() { | ||||
|         invalidateVirtualView(-1, 1); | ||||
|     } | ||||
|  | ||||
|     public final void invalidateVirtualView(int i) { | ||||
|         invalidateVirtualView(i, 0); | ||||
|     } | ||||
|  | ||||
|     public final void invalidateVirtualView(int i, int i2) { | ||||
|         ViewParent parent; | ||||
|         if (i == Integer.MIN_VALUE || !this.mManager.isEnabled() || (parent = this.mHost.getParent()) == null) { | ||||
|             return; | ||||
|         } | ||||
|         AccessibilityEvent createEvent = createEvent(i, 2048); | ||||
|         AccessibilityEventCompat.setContentChangeTypes(createEvent, i2); | ||||
|         parent.requestSendAccessibilityEvent(this.mHost, createEvent); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public int getFocusedVirtualView() { | ||||
|         return getAccessibilityFocusedVirtualViewId(); | ||||
|     } | ||||
|  | ||||
|     private void updateHoveredVirtualView(int i) { | ||||
|         int i2 = this.mHoveredVirtualViewId; | ||||
|         if (i2 == i) { | ||||
|             return; | ||||
|         } | ||||
|         this.mHoveredVirtualViewId = i; | ||||
|         sendEventForVirtualView(i, 128); | ||||
|         sendEventForVirtualView(i2, 256); | ||||
|     } | ||||
|  | ||||
|     private AccessibilityEvent createEvent(int i, int i2) { | ||||
|         if (i == -1) { | ||||
|             return createEventForHost(i2); | ||||
|         } | ||||
|         return createEventForChild(i, i2); | ||||
|     } | ||||
|  | ||||
|     private AccessibilityEvent createEventForHost(int i) { | ||||
|         AccessibilityEvent obtain = AccessibilityEvent.obtain(i); | ||||
|         this.mHost.onInitializeAccessibilityEvent(obtain); | ||||
|         return obtain; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|     public void onInitializeAccessibilityEvent(View view, AccessibilityEvent accessibilityEvent) { | ||||
|         super.onInitializeAccessibilityEvent(view, accessibilityEvent); | ||||
|         onPopulateEventForHost(accessibilityEvent); | ||||
|     } | ||||
|  | ||||
|     private AccessibilityEvent createEventForChild(int i, int i2) { | ||||
|         AccessibilityEvent obtain = AccessibilityEvent.obtain(i2); | ||||
|         AccessibilityNodeInfoCompat obtainAccessibilityNodeInfo = obtainAccessibilityNodeInfo(i); | ||||
|         obtain.getText().add(obtainAccessibilityNodeInfo.getText()); | ||||
|         obtain.setContentDescription(obtainAccessibilityNodeInfo.getContentDescription()); | ||||
|         obtain.setScrollable(obtainAccessibilityNodeInfo.isScrollable()); | ||||
|         obtain.setPassword(obtainAccessibilityNodeInfo.isPassword()); | ||||
|         obtain.setEnabled(obtainAccessibilityNodeInfo.isEnabled()); | ||||
|         obtain.setChecked(obtainAccessibilityNodeInfo.isChecked()); | ||||
|         onPopulateEventForVirtualView(i, obtain); | ||||
|         if (obtain.getText().isEmpty() && obtain.getContentDescription() == null) { | ||||
|             throw new RuntimeException("Callbacks must add text or a content description in populateEventForVirtualViewId()"); | ||||
|         } | ||||
|         obtain.setClassName(obtainAccessibilityNodeInfo.getClassName()); | ||||
|         AccessibilityRecordCompat.setSource(obtain, this.mHost, i); | ||||
|         obtain.setPackageName(this.mHost.getContext().getPackageName()); | ||||
|         return obtain; | ||||
|     } | ||||
|  | ||||
|     AccessibilityNodeInfoCompat obtainAccessibilityNodeInfo(int i) { | ||||
|         if (i == -1) { | ||||
|             return createNodeForHost(); | ||||
|         } | ||||
|         return createNodeForChild(i); | ||||
|     } | ||||
|  | ||||
|     private AccessibilityNodeInfoCompat createNodeForHost() { | ||||
|         AccessibilityNodeInfoCompat obtain = AccessibilityNodeInfoCompat.obtain(this.mHost); | ||||
|         ViewCompat.onInitializeAccessibilityNodeInfo(this.mHost, obtain); | ||||
|         ArrayList arrayList = new ArrayList(); | ||||
|         getVisibleVirtualViews(arrayList); | ||||
|         if (obtain.getChildCount() > 0 && arrayList.size() > 0) { | ||||
|             throw new RuntimeException("Views cannot have both real and virtual children"); | ||||
|         } | ||||
|         int size = arrayList.size(); | ||||
|         for (int i = 0; i < size; i++) { | ||||
|             obtain.addChild(this.mHost, ((Integer) arrayList.get(i)).intValue()); | ||||
|         } | ||||
|         return obtain; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.core.view.AccessibilityDelegateCompat | ||||
|     public void onInitializeAccessibilityNodeInfo(View view, AccessibilityNodeInfoCompat accessibilityNodeInfoCompat) { | ||||
|         super.onInitializeAccessibilityNodeInfo(view, accessibilityNodeInfoCompat); | ||||
|         onPopulateNodeForHost(accessibilityNodeInfoCompat); | ||||
|     } | ||||
|  | ||||
|     private AccessibilityNodeInfoCompat createNodeForChild(int i) { | ||||
|         AccessibilityNodeInfoCompat obtain = AccessibilityNodeInfoCompat.obtain(); | ||||
|         obtain.setEnabled(true); | ||||
|         obtain.setFocusable(true); | ||||
|         obtain.setClassName(DEFAULT_CLASS_NAME); | ||||
|         Rect rect = INVALID_PARENT_BOUNDS; | ||||
|         obtain.setBoundsInParent(rect); | ||||
|         obtain.setBoundsInScreen(rect); | ||||
|         obtain.setParent(this.mHost); | ||||
|         onPopulateNodeForVirtualView(i, obtain); | ||||
|         if (obtain.getText() == null && obtain.getContentDescription() == null) { | ||||
|             throw new RuntimeException("Callbacks must add text or a content description in populateNodeForVirtualViewId()"); | ||||
|         } | ||||
|         obtain.getBoundsInParent(this.mTempParentRect); | ||||
|         if (this.mTempParentRect.equals(rect)) { | ||||
|             throw new RuntimeException("Callbacks must set parent bounds in populateNodeForVirtualViewId()"); | ||||
|         } | ||||
|         int actions = obtain.getActions(); | ||||
|         if ((actions & 64) != 0) { | ||||
|             throw new RuntimeException("Callbacks must not add ACTION_ACCESSIBILITY_FOCUS in populateNodeForVirtualViewId()"); | ||||
|         } | ||||
|         if ((actions & 128) != 0) { | ||||
|             throw new RuntimeException("Callbacks must not add ACTION_CLEAR_ACCESSIBILITY_FOCUS in populateNodeForVirtualViewId()"); | ||||
|         } | ||||
|         obtain.setPackageName(this.mHost.getContext().getPackageName()); | ||||
|         obtain.setSource(this.mHost, i); | ||||
|         if (this.mAccessibilityFocusedVirtualViewId == i) { | ||||
|             obtain.setAccessibilityFocused(true); | ||||
|             obtain.addAction(128); | ||||
|         } else { | ||||
|             obtain.setAccessibilityFocused(false); | ||||
|             obtain.addAction(64); | ||||
|         } | ||||
|         boolean z = this.mKeyboardFocusedVirtualViewId == i; | ||||
|         if (z) { | ||||
|             obtain.addAction(2); | ||||
|         } else if (obtain.isFocusable()) { | ||||
|             obtain.addAction(1); | ||||
|         } | ||||
|         obtain.setFocused(z); | ||||
|         this.mHost.getLocationOnScreen(this.mTempGlobalRect); | ||||
|         obtain.getBoundsInScreen(this.mTempScreenRect); | ||||
|         if (this.mTempScreenRect.equals(rect)) { | ||||
|             obtain.getBoundsInParent(this.mTempScreenRect); | ||||
|             if (obtain.mParentVirtualDescendantId != -1) { | ||||
|                 AccessibilityNodeInfoCompat obtain2 = AccessibilityNodeInfoCompat.obtain(); | ||||
|                 for (int i2 = obtain.mParentVirtualDescendantId; i2 != -1; i2 = obtain2.mParentVirtualDescendantId) { | ||||
|                     obtain2.setParent(this.mHost, -1); | ||||
|                     obtain2.setBoundsInParent(INVALID_PARENT_BOUNDS); | ||||
|                     onPopulateNodeForVirtualView(i2, obtain2); | ||||
|                     obtain2.getBoundsInParent(this.mTempParentRect); | ||||
|                     this.mTempScreenRect.offset(this.mTempParentRect.left, this.mTempParentRect.top); | ||||
|                 } | ||||
|                 obtain2.recycle(); | ||||
|             } | ||||
|             this.mTempScreenRect.offset(this.mTempGlobalRect[0] - this.mHost.getScrollX(), this.mTempGlobalRect[1] - this.mHost.getScrollY()); | ||||
|         } | ||||
|         if (this.mHost.getLocalVisibleRect(this.mTempVisibleRect)) { | ||||
|             this.mTempVisibleRect.offset(this.mTempGlobalRect[0] - this.mHost.getScrollX(), this.mTempGlobalRect[1] - this.mHost.getScrollY()); | ||||
|             if (this.mTempScreenRect.intersect(this.mTempVisibleRect)) { | ||||
|                 obtain.setBoundsInScreen(this.mTempScreenRect); | ||||
|                 if (isVisibleToUser(this.mTempScreenRect)) { | ||||
|                     obtain.setVisibleToUser(true); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return obtain; | ||||
|     } | ||||
|  | ||||
|     boolean performAction(int i, int i2, Bundle bundle) { | ||||
|         if (i == -1) { | ||||
|             return performActionForHost(i2, bundle); | ||||
|         } | ||||
|         return performActionForChild(i, i2, bundle); | ||||
|     } | ||||
|  | ||||
|     private boolean performActionForHost(int i, Bundle bundle) { | ||||
|         return ViewCompat.performAccessibilityAction(this.mHost, i, bundle); | ||||
|     } | ||||
|  | ||||
|     private boolean performActionForChild(int i, int i2, Bundle bundle) { | ||||
|         if (i2 == 1) { | ||||
|             return requestKeyboardFocusForVirtualView(i); | ||||
|         } | ||||
|         if (i2 == 2) { | ||||
|             return clearKeyboardFocusForVirtualView(i); | ||||
|         } | ||||
|         if (i2 == 64) { | ||||
|             return requestAccessibilityFocus(i); | ||||
|         } | ||||
|         if (i2 == 128) { | ||||
|             return clearAccessibilityFocus(i); | ||||
|         } | ||||
|         return onPerformActionForVirtualView(i, i2, bundle); | ||||
|     } | ||||
|  | ||||
|     private boolean isVisibleToUser(Rect rect) { | ||||
|         if (rect == null || rect.isEmpty() || this.mHost.getWindowVisibility() != 0) { | ||||
|             return false; | ||||
|         } | ||||
|         Object parent = this.mHost.getParent(); | ||||
|         while (parent instanceof View) { | ||||
|             View view = (View) parent; | ||||
|             if (view.getAlpha() <= 0.0f || view.getVisibility() != 0) { | ||||
|                 return false; | ||||
|             } | ||||
|             parent = view.getParent(); | ||||
|         } | ||||
|         return parent != null; | ||||
|     } | ||||
|  | ||||
|     private boolean requestAccessibilityFocus(int i) { | ||||
|         int i2; | ||||
|         if (!this.mManager.isEnabled() || !this.mManager.isTouchExplorationEnabled() || (i2 = this.mAccessibilityFocusedVirtualViewId) == i) { | ||||
|             return false; | ||||
|         } | ||||
|         if (i2 != Integer.MIN_VALUE) { | ||||
|             clearAccessibilityFocus(i2); | ||||
|         } | ||||
|         this.mAccessibilityFocusedVirtualViewId = i; | ||||
|         this.mHost.invalidate(); | ||||
|         sendEventForVirtualView(i, 32768); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private boolean clearAccessibilityFocus(int i) { | ||||
|         if (this.mAccessibilityFocusedVirtualViewId != i) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mAccessibilityFocusedVirtualViewId = Integer.MIN_VALUE; | ||||
|         this.mHost.invalidate(); | ||||
|         sendEventForVirtualView(i, 65536); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public final boolean requestKeyboardFocusForVirtualView(int i) { | ||||
|         int i2; | ||||
|         if ((!this.mHost.isFocused() && !this.mHost.requestFocus()) || (i2 = this.mKeyboardFocusedVirtualViewId) == i) { | ||||
|             return false; | ||||
|         } | ||||
|         if (i2 != Integer.MIN_VALUE) { | ||||
|             clearKeyboardFocusForVirtualView(i2); | ||||
|         } | ||||
|         if (i == Integer.MIN_VALUE) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mKeyboardFocusedVirtualViewId = i; | ||||
|         onVirtualViewKeyboardFocusChanged(i, true); | ||||
|         sendEventForVirtualView(i, 8); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public final boolean clearKeyboardFocusForVirtualView(int i) { | ||||
|         if (this.mKeyboardFocusedVirtualViewId != i) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mKeyboardFocusedVirtualViewId = Integer.MIN_VALUE; | ||||
|         onVirtualViewKeyboardFocusChanged(i, false); | ||||
|         sendEventForVirtualView(i, 8); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private class MyNodeProvider extends AccessibilityNodeProviderCompat { | ||||
|         MyNodeProvider() { | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.core.view.accessibility.AccessibilityNodeProviderCompat | ||||
|         public AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int i) { | ||||
|             return AccessibilityNodeInfoCompat.obtain(ExploreByTouchHelper.this.obtainAccessibilityNodeInfo(i)); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.core.view.accessibility.AccessibilityNodeProviderCompat | ||||
|         public boolean performAction(int i, int i2, Bundle bundle) { | ||||
|             return ExploreByTouchHelper.this.performAction(i, i2, bundle); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.core.view.accessibility.AccessibilityNodeProviderCompat | ||||
|         public AccessibilityNodeInfoCompat findFocus(int i) { | ||||
|             int i2 = i == 2 ? ExploreByTouchHelper.this.mAccessibilityFocusedVirtualViewId : ExploreByTouchHelper.this.mKeyboardFocusedVirtualViewId; | ||||
|             if (i2 == Integer.MIN_VALUE) { | ||||
|                 return null; | ||||
|             } | ||||
|             return createAccessibilityNodeInfo(i2); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,269 @@ | ||||
| package androidx.customview.widget; | ||||
|  | ||||
| import android.graphics.Rect; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.Comparator; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class FocusStrategy { | ||||
|  | ||||
|     public interface BoundsAdapter<T> { | ||||
|         void obtainBounds(T t, Rect rect); | ||||
|     } | ||||
|  | ||||
|     public interface CollectionAdapter<T, V> { | ||||
|         V get(T t, int i); | ||||
|  | ||||
|         int size(T t); | ||||
|     } | ||||
|  | ||||
|     private static int getWeightedDistanceFor(int i, int i2) { | ||||
|         return (i * 13 * i) + (i2 * i2); | ||||
|     } | ||||
|  | ||||
|     public static <L, T> T findNextFocusInRelativeDirection(L l, CollectionAdapter<L, T> collectionAdapter, BoundsAdapter<T> boundsAdapter, T t, int i, boolean z, boolean z2) { | ||||
|         int size = collectionAdapter.size(l); | ||||
|         ArrayList arrayList = new ArrayList(size); | ||||
|         for (int i2 = 0; i2 < size; i2++) { | ||||
|             arrayList.add(collectionAdapter.get(l, i2)); | ||||
|         } | ||||
|         Collections.sort(arrayList, new SequentialComparator(z, boundsAdapter)); | ||||
|         if (i == 1) { | ||||
|             return (T) getPreviousFocusable(t, arrayList, z2); | ||||
|         } | ||||
|         if (i == 2) { | ||||
|             return (T) getNextFocusable(t, arrayList, z2); | ||||
|         } | ||||
|         throw new IllegalArgumentException("direction must be one of {FOCUS_FORWARD, FOCUS_BACKWARD}."); | ||||
|     } | ||||
|  | ||||
|     private static <T> T getNextFocusable(T t, ArrayList<T> arrayList, boolean z) { | ||||
|         int size = arrayList.size(); | ||||
|         int lastIndexOf = (t == null ? -1 : arrayList.lastIndexOf(t)) + 1; | ||||
|         if (lastIndexOf < size) { | ||||
|             return arrayList.get(lastIndexOf); | ||||
|         } | ||||
|         if (!z || size <= 0) { | ||||
|             return null; | ||||
|         } | ||||
|         return arrayList.get(0); | ||||
|     } | ||||
|  | ||||
|     private static <T> T getPreviousFocusable(T t, ArrayList<T> arrayList, boolean z) { | ||||
|         int size = arrayList.size(); | ||||
|         int indexOf = (t == null ? size : arrayList.indexOf(t)) - 1; | ||||
|         if (indexOf >= 0) { | ||||
|             return arrayList.get(indexOf); | ||||
|         } | ||||
|         if (!z || size <= 0) { | ||||
|             return null; | ||||
|         } | ||||
|         return arrayList.get(size - 1); | ||||
|     } | ||||
|  | ||||
|     private static class SequentialComparator<T> implements Comparator<T> { | ||||
|         private final BoundsAdapter<T> mAdapter; | ||||
|         private final boolean mIsLayoutRtl; | ||||
|         private final Rect mTemp1 = new Rect(); | ||||
|         private final Rect mTemp2 = new Rect(); | ||||
|  | ||||
|         SequentialComparator(boolean z, BoundsAdapter<T> boundsAdapter) { | ||||
|             this.mIsLayoutRtl = z; | ||||
|             this.mAdapter = boundsAdapter; | ||||
|         } | ||||
|  | ||||
|         @Override // java.util.Comparator | ||||
|         public int compare(T t, T t2) { | ||||
|             Rect rect = this.mTemp1; | ||||
|             Rect rect2 = this.mTemp2; | ||||
|             this.mAdapter.obtainBounds(t, rect); | ||||
|             this.mAdapter.obtainBounds(t2, rect2); | ||||
|             if (rect.top < rect2.top) { | ||||
|                 return -1; | ||||
|             } | ||||
|             if (rect.top > rect2.top) { | ||||
|                 return 1; | ||||
|             } | ||||
|             if (rect.left < rect2.left) { | ||||
|                 return this.mIsLayoutRtl ? 1 : -1; | ||||
|             } | ||||
|             if (rect.left > rect2.left) { | ||||
|                 return this.mIsLayoutRtl ? -1 : 1; | ||||
|             } | ||||
|             if (rect.bottom < rect2.bottom) { | ||||
|                 return -1; | ||||
|             } | ||||
|             if (rect.bottom > rect2.bottom) { | ||||
|                 return 1; | ||||
|             } | ||||
|             if (rect.right < rect2.right) { | ||||
|                 return this.mIsLayoutRtl ? 1 : -1; | ||||
|             } | ||||
|             if (rect.right > rect2.right) { | ||||
|                 return this.mIsLayoutRtl ? -1 : 1; | ||||
|             } | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static <L, T> T findNextFocusInAbsoluteDirection(L l, CollectionAdapter<L, T> collectionAdapter, BoundsAdapter<T> boundsAdapter, T t, Rect rect, int i) { | ||||
|         Rect rect2 = new Rect(rect); | ||||
|         if (i == 17) { | ||||
|             rect2.offset(rect.width() + 1, 0); | ||||
|         } else if (i == 33) { | ||||
|             rect2.offset(0, rect.height() + 1); | ||||
|         } else if (i == 66) { | ||||
|             rect2.offset(-(rect.width() + 1), 0); | ||||
|         } else if (i == 130) { | ||||
|             rect2.offset(0, -(rect.height() + 1)); | ||||
|         } else { | ||||
|             throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|         } | ||||
|         int size = collectionAdapter.size(l); | ||||
|         Rect rect3 = new Rect(); | ||||
|         T t2 = null; | ||||
|         for (int i2 = 0; i2 < size; i2++) { | ||||
|             T t3 = collectionAdapter.get(l, i2); | ||||
|             if (t3 != t) { | ||||
|                 boundsAdapter.obtainBounds(t3, rect3); | ||||
|                 if (isBetterCandidate(i, rect, rect3, rect2)) { | ||||
|                     rect2.set(rect3); | ||||
|                     t2 = t3; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return t2; | ||||
|     } | ||||
|  | ||||
|     private static boolean isBetterCandidate(int i, Rect rect, Rect rect2, Rect rect3) { | ||||
|         if (!isCandidate(rect, rect2, i)) { | ||||
|             return false; | ||||
|         } | ||||
|         if (isCandidate(rect, rect3, i) && !beamBeats(i, rect, rect2, rect3)) { | ||||
|             return !beamBeats(i, rect, rect3, rect2) && getWeightedDistanceFor(majorAxisDistance(i, rect, rect2), minorAxisDistance(i, rect, rect2)) < getWeightedDistanceFor(majorAxisDistance(i, rect, rect3), minorAxisDistance(i, rect, rect3)); | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private static boolean beamBeats(int i, Rect rect, Rect rect2, Rect rect3) { | ||||
|         boolean beamsOverlap = beamsOverlap(i, rect, rect2); | ||||
|         if (beamsOverlap(i, rect, rect3) || !beamsOverlap) { | ||||
|             return false; | ||||
|         } | ||||
|         return !isToDirectionOf(i, rect, rect3) || i == 17 || i == 66 || majorAxisDistance(i, rect, rect2) < majorAxisDistanceToFarEdge(i, rect, rect3); | ||||
|     } | ||||
|  | ||||
|     private static boolean isCandidate(Rect rect, Rect rect2, int i) { | ||||
|         if (i == 17) { | ||||
|             return (rect.right > rect2.right || rect.left >= rect2.right) && rect.left > rect2.left; | ||||
|         } | ||||
|         if (i == 33) { | ||||
|             return (rect.bottom > rect2.bottom || rect.top >= rect2.bottom) && rect.top > rect2.top; | ||||
|         } | ||||
|         if (i == 66) { | ||||
|             return (rect.left < rect2.left || rect.right <= rect2.left) && rect.right < rect2.right; | ||||
|         } | ||||
|         if (i == 130) { | ||||
|             return (rect.top < rect2.top || rect.bottom <= rect2.top) && rect.bottom < rect2.bottom; | ||||
|         } | ||||
|         throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|     } | ||||
|  | ||||
|     private static boolean beamsOverlap(int i, Rect rect, Rect rect2) { | ||||
|         if (i != 17) { | ||||
|             if (i != 33) { | ||||
|                 if (i != 66) { | ||||
|                     if (i != 130) { | ||||
|                         throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             return rect2.right >= rect.left && rect2.left <= rect.right; | ||||
|         } | ||||
|         return rect2.bottom >= rect.top && rect2.top <= rect.bottom; | ||||
|     } | ||||
|  | ||||
|     private static boolean isToDirectionOf(int i, Rect rect, Rect rect2) { | ||||
|         if (i == 17) { | ||||
|             return rect.left >= rect2.right; | ||||
|         } | ||||
|         if (i == 33) { | ||||
|             return rect.top >= rect2.bottom; | ||||
|         } | ||||
|         if (i == 66) { | ||||
|             return rect.right <= rect2.left; | ||||
|         } | ||||
|         if (i == 130) { | ||||
|             return rect.bottom <= rect2.top; | ||||
|         } | ||||
|         throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|     } | ||||
|  | ||||
|     private static int majorAxisDistance(int i, Rect rect, Rect rect2) { | ||||
|         return Math.max(0, majorAxisDistanceRaw(i, rect, rect2)); | ||||
|     } | ||||
|  | ||||
|     private static int majorAxisDistanceRaw(int i, Rect rect, Rect rect2) { | ||||
|         int i2; | ||||
|         int i3; | ||||
|         if (i == 17) { | ||||
|             i2 = rect.left; | ||||
|             i3 = rect2.right; | ||||
|         } else if (i == 33) { | ||||
|             i2 = rect.top; | ||||
|             i3 = rect2.bottom; | ||||
|         } else if (i == 66) { | ||||
|             i2 = rect2.left; | ||||
|             i3 = rect.right; | ||||
|         } else if (i == 130) { | ||||
|             i2 = rect2.top; | ||||
|             i3 = rect.bottom; | ||||
|         } else { | ||||
|             throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|         } | ||||
|         return i2 - i3; | ||||
|     } | ||||
|  | ||||
|     private static int majorAxisDistanceToFarEdge(int i, Rect rect, Rect rect2) { | ||||
|         return Math.max(1, majorAxisDistanceToFarEdgeRaw(i, rect, rect2)); | ||||
|     } | ||||
|  | ||||
|     private static int majorAxisDistanceToFarEdgeRaw(int i, Rect rect, Rect rect2) { | ||||
|         int i2; | ||||
|         int i3; | ||||
|         if (i == 17) { | ||||
|             i2 = rect.left; | ||||
|             i3 = rect2.left; | ||||
|         } else if (i == 33) { | ||||
|             i2 = rect.top; | ||||
|             i3 = rect2.top; | ||||
|         } else if (i == 66) { | ||||
|             i2 = rect2.right; | ||||
|             i3 = rect.right; | ||||
|         } else if (i == 130) { | ||||
|             i2 = rect2.bottom; | ||||
|             i3 = rect.bottom; | ||||
|         } else { | ||||
|             throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|         } | ||||
|         return i2 - i3; | ||||
|     } | ||||
|  | ||||
|     private static int minorAxisDistance(int i, Rect rect, Rect rect2) { | ||||
|         if (i != 17) { | ||||
|             if (i != 33) { | ||||
|                 if (i != 66) { | ||||
|                     if (i != 130) { | ||||
|                         throw new IllegalArgumentException("direction must be one of {FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT}."); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             return Math.abs((rect.left + (rect.width() / 2)) - (rect2.left + (rect2.width() / 2))); | ||||
|         } | ||||
|         return Math.abs((rect.top + (rect.height() / 2)) - (rect2.top + (rect2.height() / 2))); | ||||
|     } | ||||
|  | ||||
|     private FocusStrategy() { | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								02-Easy5/E5/sources/androidx/customview/widget/Openable.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								02-Easy5/E5/sources/androidx/customview/widget/Openable.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package androidx.customview.widget; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public interface Openable { | ||||
|     void close(); | ||||
|  | ||||
|     boolean isOpen(); | ||||
|  | ||||
|     void open(); | ||||
| } | ||||
| @@ -0,0 +1,738 @@ | ||||
| package androidx.customview.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.Log; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.VelocityTracker; | ||||
| import android.view.View; | ||||
| import android.view.ViewConfiguration; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.animation.Interpolator; | ||||
| import android.widget.OverScroller; | ||||
| import androidx.core.view.ViewCompat; | ||||
| import java.util.Arrays; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ViewDragHelper { | ||||
|     private static final int BASE_SETTLE_DURATION = 256; | ||||
|     public static final int DIRECTION_ALL = 3; | ||||
|     public static final int DIRECTION_HORIZONTAL = 1; | ||||
|     public static final int DIRECTION_VERTICAL = 2; | ||||
|     public static final int EDGE_ALL = 15; | ||||
|     public static final int EDGE_BOTTOM = 8; | ||||
|     public static final int EDGE_LEFT = 1; | ||||
|     public static final int EDGE_RIGHT = 2; | ||||
|     private static final int EDGE_SIZE = 20; | ||||
|     public static final int EDGE_TOP = 4; | ||||
|     public static final int INVALID_POINTER = -1; | ||||
|     private static final int MAX_SETTLE_DURATION = 600; | ||||
|     public static final int STATE_DRAGGING = 1; | ||||
|     public static final int STATE_IDLE = 0; | ||||
|     public static final int STATE_SETTLING = 2; | ||||
|     private static final String TAG = "ViewDragHelper"; | ||||
|     private static final Interpolator sInterpolator = new Interpolator() { // from class: androidx.customview.widget.ViewDragHelper.1 | ||||
|         @Override // android.animation.TimeInterpolator | ||||
|         public float getInterpolation(float f) { | ||||
|             float f2 = f - 1.0f; | ||||
|             return (f2 * f2 * f2 * f2 * f2) + 1.0f; | ||||
|         } | ||||
|     }; | ||||
|     private final Callback mCallback; | ||||
|     private View mCapturedView; | ||||
|     private final int mDefaultEdgeSize; | ||||
|     private int mDragState; | ||||
|     private int[] mEdgeDragsInProgress; | ||||
|     private int[] mEdgeDragsLocked; | ||||
|     private int mEdgeSize; | ||||
|     private int[] mInitialEdgesTouched; | ||||
|     private float[] mInitialMotionX; | ||||
|     private float[] mInitialMotionY; | ||||
|     private float[] mLastMotionX; | ||||
|     private float[] mLastMotionY; | ||||
|     private float mMaxVelocity; | ||||
|     private float mMinVelocity; | ||||
|     private final ViewGroup mParentView; | ||||
|     private int mPointersDown; | ||||
|     private boolean mReleaseInProgress; | ||||
|     private OverScroller mScroller; | ||||
|     private int mTouchSlop; | ||||
|     private int mTrackingEdges; | ||||
|     private VelocityTracker mVelocityTracker; | ||||
|     private int mActivePointerId = -1; | ||||
|     private final Runnable mSetIdleRunnable = new Runnable() { // from class: androidx.customview.widget.ViewDragHelper.2 | ||||
|         @Override // java.lang.Runnable | ||||
|         public void run() { | ||||
|             ViewDragHelper.this.setDragState(0); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     public static abstract class Callback { | ||||
|         public int clampViewPositionHorizontal(View view, int i, int i2) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         public int clampViewPositionVertical(View view, int i, int i2) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         public int getOrderedChildIndex(int i) { | ||||
|             return i; | ||||
|         } | ||||
|  | ||||
|         public int getViewHorizontalDragRange(View view) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         public int getViewVerticalDragRange(View view) { | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         public void onEdgeDragStarted(int i, int i2) { | ||||
|         } | ||||
|  | ||||
|         public boolean onEdgeLock(int i) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         public void onEdgeTouched(int i, int i2) { | ||||
|         } | ||||
|  | ||||
|         public void onViewCaptured(View view, int i) { | ||||
|         } | ||||
|  | ||||
|         public void onViewDragStateChanged(int i) { | ||||
|         } | ||||
|  | ||||
|         public void onViewPositionChanged(View view, int i, int i2, int i3, int i4) { | ||||
|         } | ||||
|  | ||||
|         public void onViewReleased(View view, float f, float f2) { | ||||
|         } | ||||
|  | ||||
|         public abstract boolean tryCaptureView(View view, int i); | ||||
|     } | ||||
|  | ||||
|     public int getActivePointerId() { | ||||
|         return this.mActivePointerId; | ||||
|     } | ||||
|  | ||||
|     public View getCapturedView() { | ||||
|         return this.mCapturedView; | ||||
|     } | ||||
|  | ||||
|     public int getDefaultEdgeSize() { | ||||
|         return this.mDefaultEdgeSize; | ||||
|     } | ||||
|  | ||||
|     public int getEdgeSize() { | ||||
|         return this.mEdgeSize; | ||||
|     } | ||||
|  | ||||
|     public float getMinVelocity() { | ||||
|         return this.mMinVelocity; | ||||
|     } | ||||
|  | ||||
|     public int getTouchSlop() { | ||||
|         return this.mTouchSlop; | ||||
|     } | ||||
|  | ||||
|     public int getViewDragState() { | ||||
|         return this.mDragState; | ||||
|     } | ||||
|  | ||||
|     public boolean isPointerDown(int i) { | ||||
|         return ((1 << i) & this.mPointersDown) != 0; | ||||
|     } | ||||
|  | ||||
|     public void setEdgeSize(int i) { | ||||
|         this.mEdgeSize = i; | ||||
|     } | ||||
|  | ||||
|     public void setEdgeTrackingEnabled(int i) { | ||||
|         this.mTrackingEdges = i; | ||||
|     } | ||||
|  | ||||
|     public void setMinVelocity(float f) { | ||||
|         this.mMinVelocity = f; | ||||
|     } | ||||
|  | ||||
|     public static ViewDragHelper create(ViewGroup viewGroup, Callback callback) { | ||||
|         return new ViewDragHelper(viewGroup.getContext(), viewGroup, callback); | ||||
|     } | ||||
|  | ||||
|     public static ViewDragHelper create(ViewGroup viewGroup, float f, Callback callback) { | ||||
|         ViewDragHelper create = create(viewGroup, callback); | ||||
|         create.mTouchSlop = (int) (create.mTouchSlop * (1.0f / f)); | ||||
|         return create; | ||||
|     } | ||||
|  | ||||
|     private ViewDragHelper(Context context, ViewGroup viewGroup, Callback callback) { | ||||
|         if (viewGroup == null) { | ||||
|             throw new IllegalArgumentException("Parent view may not be null"); | ||||
|         } | ||||
|         if (callback == null) { | ||||
|             throw new IllegalArgumentException("Callback may not be null"); | ||||
|         } | ||||
|         this.mParentView = viewGroup; | ||||
|         this.mCallback = callback; | ||||
|         ViewConfiguration viewConfiguration = ViewConfiguration.get(context); | ||||
|         int i = (int) ((context.getResources().getDisplayMetrics().density * 20.0f) + 0.5f); | ||||
|         this.mDefaultEdgeSize = i; | ||||
|         this.mEdgeSize = i; | ||||
|         this.mTouchSlop = viewConfiguration.getScaledTouchSlop(); | ||||
|         this.mMaxVelocity = viewConfiguration.getScaledMaximumFlingVelocity(); | ||||
|         this.mMinVelocity = viewConfiguration.getScaledMinimumFlingVelocity(); | ||||
|         this.mScroller = new OverScroller(context, sInterpolator); | ||||
|     } | ||||
|  | ||||
|     public void captureChildView(View view, int i) { | ||||
|         if (view.getParent() != this.mParentView) { | ||||
|             throw new IllegalArgumentException("captureChildView: parameter must be a descendant of the ViewDragHelper's tracked parent view (" + this.mParentView + ")"); | ||||
|         } | ||||
|         this.mCapturedView = view; | ||||
|         this.mActivePointerId = i; | ||||
|         this.mCallback.onViewCaptured(view, i); | ||||
|         setDragState(1); | ||||
|     } | ||||
|  | ||||
|     public void cancel() { | ||||
|         this.mActivePointerId = -1; | ||||
|         clearMotionHistory(); | ||||
|         VelocityTracker velocityTracker = this.mVelocityTracker; | ||||
|         if (velocityTracker != null) { | ||||
|             velocityTracker.recycle(); | ||||
|             this.mVelocityTracker = null; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void abort() { | ||||
|         cancel(); | ||||
|         if (this.mDragState == 2) { | ||||
|             int currX = this.mScroller.getCurrX(); | ||||
|             int currY = this.mScroller.getCurrY(); | ||||
|             this.mScroller.abortAnimation(); | ||||
|             int currX2 = this.mScroller.getCurrX(); | ||||
|             int currY2 = this.mScroller.getCurrY(); | ||||
|             this.mCallback.onViewPositionChanged(this.mCapturedView, currX2, currY2, currX2 - currX, currY2 - currY); | ||||
|         } | ||||
|         setDragState(0); | ||||
|     } | ||||
|  | ||||
|     public boolean smoothSlideViewTo(View view, int i, int i2) { | ||||
|         this.mCapturedView = view; | ||||
|         this.mActivePointerId = -1; | ||||
|         boolean forceSettleCapturedViewAt = forceSettleCapturedViewAt(i, i2, 0, 0); | ||||
|         if (!forceSettleCapturedViewAt && this.mDragState == 0 && this.mCapturedView != null) { | ||||
|             this.mCapturedView = null; | ||||
|         } | ||||
|         return forceSettleCapturedViewAt; | ||||
|     } | ||||
|  | ||||
|     public boolean settleCapturedViewAt(int i, int i2) { | ||||
|         if (!this.mReleaseInProgress) { | ||||
|             throw new IllegalStateException("Cannot settleCapturedViewAt outside of a call to Callback#onViewReleased"); | ||||
|         } | ||||
|         return forceSettleCapturedViewAt(i, i2, (int) this.mVelocityTracker.getXVelocity(this.mActivePointerId), (int) this.mVelocityTracker.getYVelocity(this.mActivePointerId)); | ||||
|     } | ||||
|  | ||||
|     private boolean forceSettleCapturedViewAt(int i, int i2, int i3, int i4) { | ||||
|         int left = this.mCapturedView.getLeft(); | ||||
|         int top = this.mCapturedView.getTop(); | ||||
|         int i5 = i - left; | ||||
|         int i6 = i2 - top; | ||||
|         if (i5 == 0 && i6 == 0) { | ||||
|             this.mScroller.abortAnimation(); | ||||
|             setDragState(0); | ||||
|             return false; | ||||
|         } | ||||
|         this.mScroller.startScroll(left, top, i5, i6, computeSettleDuration(this.mCapturedView, i5, i6, i3, i4)); | ||||
|         setDragState(2); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     private int computeSettleDuration(View view, int i, int i2, int i3, int i4) { | ||||
|         float f; | ||||
|         float f2; | ||||
|         float f3; | ||||
|         float f4; | ||||
|         int clampMag = clampMag(i3, (int) this.mMinVelocity, (int) this.mMaxVelocity); | ||||
|         int clampMag2 = clampMag(i4, (int) this.mMinVelocity, (int) this.mMaxVelocity); | ||||
|         int abs = Math.abs(i); | ||||
|         int abs2 = Math.abs(i2); | ||||
|         int abs3 = Math.abs(clampMag); | ||||
|         int abs4 = Math.abs(clampMag2); | ||||
|         int i5 = abs3 + abs4; | ||||
|         int i6 = abs + abs2; | ||||
|         if (clampMag != 0) { | ||||
|             f = abs3; | ||||
|             f2 = i5; | ||||
|         } else { | ||||
|             f = abs; | ||||
|             f2 = i6; | ||||
|         } | ||||
|         float f5 = f / f2; | ||||
|         if (clampMag2 != 0) { | ||||
|             f3 = abs4; | ||||
|             f4 = i5; | ||||
|         } else { | ||||
|             f3 = abs2; | ||||
|             f4 = i6; | ||||
|         } | ||||
|         return (int) ((computeAxisDuration(i, clampMag, this.mCallback.getViewHorizontalDragRange(view)) * f5) + (computeAxisDuration(i2, clampMag2, this.mCallback.getViewVerticalDragRange(view)) * (f3 / f4))); | ||||
|     } | ||||
|  | ||||
|     private int computeAxisDuration(int i, int i2, int i3) { | ||||
|         int abs; | ||||
|         if (i == 0) { | ||||
|             return 0; | ||||
|         } | ||||
|         int width = this.mParentView.getWidth(); | ||||
|         float f = width / 2; | ||||
|         float distanceInfluenceForSnapDuration = f + (distanceInfluenceForSnapDuration(Math.min(1.0f, Math.abs(i) / width)) * f); | ||||
|         int abs2 = Math.abs(i2); | ||||
|         if (abs2 > 0) { | ||||
|             abs = Math.round(Math.abs(distanceInfluenceForSnapDuration / abs2) * 1000.0f) * 4; | ||||
|         } else { | ||||
|             abs = (int) (((Math.abs(i) / i3) + 1.0f) * 256.0f); | ||||
|         } | ||||
|         return Math.min(abs, 600); | ||||
|     } | ||||
|  | ||||
|     private int clampMag(int i, int i2, int i3) { | ||||
|         int abs = Math.abs(i); | ||||
|         if (abs < i2) { | ||||
|             return 0; | ||||
|         } | ||||
|         return abs > i3 ? i > 0 ? i3 : -i3 : i; | ||||
|     } | ||||
|  | ||||
|     private float clampMag(float f, float f2, float f3) { | ||||
|         float abs = Math.abs(f); | ||||
|         if (abs < f2) { | ||||
|             return 0.0f; | ||||
|         } | ||||
|         return abs > f3 ? f > 0.0f ? f3 : -f3 : f; | ||||
|     } | ||||
|  | ||||
|     private float distanceInfluenceForSnapDuration(float f) { | ||||
|         return (float) Math.sin((f - 0.5f) * 0.47123894f); | ||||
|     } | ||||
|  | ||||
|     public void flingCapturedView(int i, int i2, int i3, int i4) { | ||||
|         if (!this.mReleaseInProgress) { | ||||
|             throw new IllegalStateException("Cannot flingCapturedView outside of a call to Callback#onViewReleased"); | ||||
|         } | ||||
|         this.mScroller.fling(this.mCapturedView.getLeft(), this.mCapturedView.getTop(), (int) this.mVelocityTracker.getXVelocity(this.mActivePointerId), (int) this.mVelocityTracker.getYVelocity(this.mActivePointerId), i, i3, i2, i4); | ||||
|         setDragState(2); | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:19:0x005b, code lost: | ||||
|      | ||||
|         if (r0 == false) goto L19; | ||||
|      */ | ||||
|     /* | ||||
|         Code decompiled incorrectly, please refer to instructions dump. | ||||
|         To view partially-correct add '--show-bad-code' argument | ||||
|     */ | ||||
|     public boolean continueSettling(boolean r12) { | ||||
|         /* | ||||
|             r11 = this; | ||||
|             int r0 = r11.mDragState | ||||
|             r1 = 0 | ||||
|             r2 = 2 | ||||
|             if (r0 != r2) goto L6a | ||||
|             android.widget.OverScroller r0 = r11.mScroller | ||||
|             boolean r0 = r0.computeScrollOffset() | ||||
|             android.widget.OverScroller r3 = r11.mScroller | ||||
|             int r3 = r3.getCurrX() | ||||
|             android.widget.OverScroller r4 = r11.mScroller | ||||
|             int r10 = r4.getCurrY() | ||||
|             android.view.View r4 = r11.mCapturedView | ||||
|             int r4 = r4.getLeft() | ||||
|             int r8 = r3 - r4 | ||||
|             android.view.View r4 = r11.mCapturedView | ||||
|             int r4 = r4.getTop() | ||||
|             int r9 = r10 - r4 | ||||
|             if (r8 == 0) goto L2f | ||||
|             android.view.View r4 = r11.mCapturedView | ||||
|             androidx.core.view.ViewCompat.offsetLeftAndRight(r4, r8) | ||||
|         L2f: | ||||
|             if (r9 == 0) goto L36 | ||||
|             android.view.View r4 = r11.mCapturedView | ||||
|             androidx.core.view.ViewCompat.offsetTopAndBottom(r4, r9) | ||||
|         L36: | ||||
|             if (r8 != 0) goto L3a | ||||
|             if (r9 == 0) goto L43 | ||||
|         L3a: | ||||
|             androidx.customview.widget.ViewDragHelper$Callback r4 = r11.mCallback | ||||
|             android.view.View r5 = r11.mCapturedView | ||||
|             r6 = r3 | ||||
|             r7 = r10 | ||||
|             r4.onViewPositionChanged(r5, r6, r7, r8, r9) | ||||
|         L43: | ||||
|             if (r0 == 0) goto L5b | ||||
|             android.widget.OverScroller r4 = r11.mScroller | ||||
|             int r4 = r4.getFinalX() | ||||
|             if (r3 != r4) goto L5b | ||||
|             android.widget.OverScroller r3 = r11.mScroller | ||||
|             int r3 = r3.getFinalY() | ||||
|             if (r10 != r3) goto L5b | ||||
|             android.widget.OverScroller r0 = r11.mScroller | ||||
|             r0.abortAnimation() | ||||
|             goto L5d | ||||
|         L5b: | ||||
|             if (r0 != 0) goto L6a | ||||
|         L5d: | ||||
|             if (r12 == 0) goto L67 | ||||
|             android.view.ViewGroup r12 = r11.mParentView | ||||
|             java.lang.Runnable r0 = r11.mSetIdleRunnable | ||||
|             r12.post(r0) | ||||
|             goto L6a | ||||
|         L67: | ||||
|             r11.setDragState(r1) | ||||
|         L6a: | ||||
|             int r12 = r11.mDragState | ||||
|             if (r12 != r2) goto L6f | ||||
|             r1 = 1 | ||||
|         L6f: | ||||
|             return r1 | ||||
|         */ | ||||
|         throw new UnsupportedOperationException("Method not decompiled: androidx.customview.widget.ViewDragHelper.continueSettling(boolean):boolean"); | ||||
|     } | ||||
|  | ||||
|     private void dispatchViewReleased(float f, float f2) { | ||||
|         this.mReleaseInProgress = true; | ||||
|         this.mCallback.onViewReleased(this.mCapturedView, f, f2); | ||||
|         this.mReleaseInProgress = false; | ||||
|         if (this.mDragState == 1) { | ||||
|             setDragState(0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void clearMotionHistory() { | ||||
|         float[] fArr = this.mInitialMotionX; | ||||
|         if (fArr == null) { | ||||
|             return; | ||||
|         } | ||||
|         Arrays.fill(fArr, 0.0f); | ||||
|         Arrays.fill(this.mInitialMotionY, 0.0f); | ||||
|         Arrays.fill(this.mLastMotionX, 0.0f); | ||||
|         Arrays.fill(this.mLastMotionY, 0.0f); | ||||
|         Arrays.fill(this.mInitialEdgesTouched, 0); | ||||
|         Arrays.fill(this.mEdgeDragsInProgress, 0); | ||||
|         Arrays.fill(this.mEdgeDragsLocked, 0); | ||||
|         this.mPointersDown = 0; | ||||
|     } | ||||
|  | ||||
|     private void clearMotionHistory(int i) { | ||||
|         if (this.mInitialMotionX == null || !isPointerDown(i)) { | ||||
|             return; | ||||
|         } | ||||
|         this.mInitialMotionX[i] = 0.0f; | ||||
|         this.mInitialMotionY[i] = 0.0f; | ||||
|         this.mLastMotionX[i] = 0.0f; | ||||
|         this.mLastMotionY[i] = 0.0f; | ||||
|         this.mInitialEdgesTouched[i] = 0; | ||||
|         this.mEdgeDragsInProgress[i] = 0; | ||||
|         this.mEdgeDragsLocked[i] = 0; | ||||
|         this.mPointersDown = (~(1 << i)) & this.mPointersDown; | ||||
|     } | ||||
|  | ||||
|     private void ensureMotionHistorySizeForId(int i) { | ||||
|         float[] fArr = this.mInitialMotionX; | ||||
|         if (fArr == null || fArr.length <= i) { | ||||
|             int i2 = i + 1; | ||||
|             float[] fArr2 = new float[i2]; | ||||
|             float[] fArr3 = new float[i2]; | ||||
|             float[] fArr4 = new float[i2]; | ||||
|             float[] fArr5 = new float[i2]; | ||||
|             int[] iArr = new int[i2]; | ||||
|             int[] iArr2 = new int[i2]; | ||||
|             int[] iArr3 = new int[i2]; | ||||
|             if (fArr != null) { | ||||
|                 System.arraycopy(fArr, 0, fArr2, 0, fArr.length); | ||||
|                 float[] fArr6 = this.mInitialMotionY; | ||||
|                 System.arraycopy(fArr6, 0, fArr3, 0, fArr6.length); | ||||
|                 float[] fArr7 = this.mLastMotionX; | ||||
|                 System.arraycopy(fArr7, 0, fArr4, 0, fArr7.length); | ||||
|                 float[] fArr8 = this.mLastMotionY; | ||||
|                 System.arraycopy(fArr8, 0, fArr5, 0, fArr8.length); | ||||
|                 int[] iArr4 = this.mInitialEdgesTouched; | ||||
|                 System.arraycopy(iArr4, 0, iArr, 0, iArr4.length); | ||||
|                 int[] iArr5 = this.mEdgeDragsInProgress; | ||||
|                 System.arraycopy(iArr5, 0, iArr2, 0, iArr5.length); | ||||
|                 int[] iArr6 = this.mEdgeDragsLocked; | ||||
|                 System.arraycopy(iArr6, 0, iArr3, 0, iArr6.length); | ||||
|             } | ||||
|             this.mInitialMotionX = fArr2; | ||||
|             this.mInitialMotionY = fArr3; | ||||
|             this.mLastMotionX = fArr4; | ||||
|             this.mLastMotionY = fArr5; | ||||
|             this.mInitialEdgesTouched = iArr; | ||||
|             this.mEdgeDragsInProgress = iArr2; | ||||
|             this.mEdgeDragsLocked = iArr3; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void saveInitialMotion(float f, float f2, int i) { | ||||
|         ensureMotionHistorySizeForId(i); | ||||
|         float[] fArr = this.mInitialMotionX; | ||||
|         this.mLastMotionX[i] = f; | ||||
|         fArr[i] = f; | ||||
|         float[] fArr2 = this.mInitialMotionY; | ||||
|         this.mLastMotionY[i] = f2; | ||||
|         fArr2[i] = f2; | ||||
|         this.mInitialEdgesTouched[i] = getEdgesTouched((int) f, (int) f2); | ||||
|         this.mPointersDown |= 1 << i; | ||||
|     } | ||||
|  | ||||
|     private void saveLastMotion(MotionEvent motionEvent) { | ||||
|         int pointerCount = motionEvent.getPointerCount(); | ||||
|         for (int i = 0; i < pointerCount; i++) { | ||||
|             int pointerId = motionEvent.getPointerId(i); | ||||
|             if (isValidPointerForActionMove(pointerId)) { | ||||
|                 float x = motionEvent.getX(i); | ||||
|                 float y = motionEvent.getY(i); | ||||
|                 this.mLastMotionX[pointerId] = x; | ||||
|                 this.mLastMotionY[pointerId] = y; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     void setDragState(int i) { | ||||
|         this.mParentView.removeCallbacks(this.mSetIdleRunnable); | ||||
|         if (this.mDragState != i) { | ||||
|             this.mDragState = i; | ||||
|             this.mCallback.onViewDragStateChanged(i); | ||||
|             if (this.mDragState == 0) { | ||||
|                 this.mCapturedView = null; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     boolean tryCaptureViewForDrag(View view, int i) { | ||||
|         if (view == this.mCapturedView && this.mActivePointerId == i) { | ||||
|             return true; | ||||
|         } | ||||
|         if (view == null || !this.mCallback.tryCaptureView(view, i)) { | ||||
|             return false; | ||||
|         } | ||||
|         this.mActivePointerId = i; | ||||
|         captureChildView(view, i); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     protected boolean canScroll(View view, boolean z, int i, int i2, int i3, int i4) { | ||||
|         int i5; | ||||
|         if (view instanceof ViewGroup) { | ||||
|             ViewGroup viewGroup = (ViewGroup) view; | ||||
|             int scrollX = view.getScrollX(); | ||||
|             int scrollY = view.getScrollY(); | ||||
|             for (int childCount = viewGroup.getChildCount() - 1; childCount >= 0; childCount--) { | ||||
|                 View childAt = viewGroup.getChildAt(childCount); | ||||
|                 int i6 = i3 + scrollX; | ||||
|                 if (i6 >= childAt.getLeft() && i6 < childAt.getRight() && (i5 = i4 + scrollY) >= childAt.getTop() && i5 < childAt.getBottom() && canScroll(childAt, true, i, i2, i6 - childAt.getLeft(), i5 - childAt.getTop())) { | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return z && (view.canScrollHorizontally(-i) || view.canScrollVertically(-i2)); | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:50:0x00dd, code lost: | ||||
|      | ||||
|         if (r12 != r11) goto L54; | ||||
|      */ | ||||
|     /* | ||||
|         Code decompiled incorrectly, please refer to instructions dump. | ||||
|         To view partially-correct add '--show-bad-code' argument | ||||
|     */ | ||||
|     public boolean shouldInterceptTouchEvent(android.view.MotionEvent r17) { | ||||
|         /* | ||||
|             Method dump skipped, instructions count: 315 | ||||
|             To view this dump add '--comments-level debug' option | ||||
|         */ | ||||
|         throw new UnsupportedOperationException("Method not decompiled: androidx.customview.widget.ViewDragHelper.shouldInterceptTouchEvent(android.view.MotionEvent):boolean"); | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:33:0x0066, code lost: | ||||
|      | ||||
|         if (r9.mActivePointerId == (-1)) goto L38; | ||||
|      */ | ||||
|     /* JADX WARN: Code restructure failed: missing block: B:34:0x006c, code lost: | ||||
|      | ||||
|         releaseViewForPointerUp(); | ||||
|      */ | ||||
|     /* | ||||
|         Code decompiled incorrectly, please refer to instructions dump. | ||||
|         To view partially-correct add '--show-bad-code' argument | ||||
|     */ | ||||
|     public void processTouchEvent(android.view.MotionEvent r10) { | ||||
|         /* | ||||
|             Method dump skipped, instructions count: 377 | ||||
|             To view this dump add '--comments-level debug' option | ||||
|         */ | ||||
|         throw new UnsupportedOperationException("Method not decompiled: androidx.customview.widget.ViewDragHelper.processTouchEvent(android.view.MotionEvent):void"); | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     /* JADX WARN: Type inference failed for: r0v15 */ | ||||
|     /* JADX WARN: Type inference failed for: r0v16 */ | ||||
|     /* JADX WARN: Type inference failed for: r0v4, types: [int] */ | ||||
|     /* JADX WARN: Type inference failed for: r0v6 */ | ||||
|     /* JADX WARN: Type inference failed for: r0v7 */ | ||||
|     /* JADX WARN: Type inference failed for: r3v3, types: [androidx.customview.widget.ViewDragHelper$Callback] */ | ||||
|     private void reportNewEdgeDrags(float f, float f2, int i) { | ||||
|         boolean checkNewEdgeDrag = checkNewEdgeDrag(f, f2, i, 1); | ||||
|         boolean z = checkNewEdgeDrag; | ||||
|         if (checkNewEdgeDrag(f2, f, i, 4)) { | ||||
|             z = (checkNewEdgeDrag ? 1 : 0) | 4; | ||||
|         } | ||||
|         boolean z2 = z; | ||||
|         if (checkNewEdgeDrag(f, f2, i, 2)) { | ||||
|             z2 = (z ? 1 : 0) | 2; | ||||
|         } | ||||
|         ?? r0 = z2; | ||||
|         if (checkNewEdgeDrag(f2, f, i, 8)) { | ||||
|             r0 = (z2 ? 1 : 0) | 8; | ||||
|         } | ||||
|         if (r0 != 0) { | ||||
|             int[] iArr = this.mEdgeDragsInProgress; | ||||
|             iArr[i] = iArr[i] | r0; | ||||
|             this.mCallback.onEdgeDragStarted(r0, i); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private boolean checkNewEdgeDrag(float f, float f2, int i, int i2) { | ||||
|         float abs = Math.abs(f); | ||||
|         float abs2 = Math.abs(f2); | ||||
|         if ((this.mInitialEdgesTouched[i] & i2) != i2 || (this.mTrackingEdges & i2) == 0 || (this.mEdgeDragsLocked[i] & i2) == i2 || (this.mEdgeDragsInProgress[i] & i2) == i2) { | ||||
|             return false; | ||||
|         } | ||||
|         int i3 = this.mTouchSlop; | ||||
|         if (abs <= i3 && abs2 <= i3) { | ||||
|             return false; | ||||
|         } | ||||
|         if (abs >= abs2 * 0.5f || !this.mCallback.onEdgeLock(i2)) { | ||||
|             return (this.mEdgeDragsInProgress[i] & i2) == 0 && abs > ((float) this.mTouchSlop); | ||||
|         } | ||||
|         int[] iArr = this.mEdgeDragsLocked; | ||||
|         iArr[i] = iArr[i] | i2; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     private boolean checkTouchSlop(View view, float f, float f2) { | ||||
|         if (view == null) { | ||||
|             return false; | ||||
|         } | ||||
|         boolean z = this.mCallback.getViewHorizontalDragRange(view) > 0; | ||||
|         boolean z2 = this.mCallback.getViewVerticalDragRange(view) > 0; | ||||
|         if (!z || !z2) { | ||||
|             return z ? Math.abs(f) > ((float) this.mTouchSlop) : z2 && Math.abs(f2) > ((float) this.mTouchSlop); | ||||
|         } | ||||
|         float f3 = (f * f) + (f2 * f2); | ||||
|         int i = this.mTouchSlop; | ||||
|         return f3 > ((float) (i * i)); | ||||
|     } | ||||
|  | ||||
|     public boolean checkTouchSlop(int i) { | ||||
|         int length = this.mInitialMotionX.length; | ||||
|         for (int i2 = 0; i2 < length; i2++) { | ||||
|             if (checkTouchSlop(i, i2)) { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public boolean checkTouchSlop(int i, int i2) { | ||||
|         if (!isPointerDown(i2)) { | ||||
|             return false; | ||||
|         } | ||||
|         boolean z = (i & 1) == 1; | ||||
|         boolean z2 = (i & 2) == 2; | ||||
|         float f = this.mLastMotionX[i2] - this.mInitialMotionX[i2]; | ||||
|         float f2 = this.mLastMotionY[i2] - this.mInitialMotionY[i2]; | ||||
|         if (!z || !z2) { | ||||
|             return z ? Math.abs(f) > ((float) this.mTouchSlop) : z2 && Math.abs(f2) > ((float) this.mTouchSlop); | ||||
|         } | ||||
|         float f3 = (f * f) + (f2 * f2); | ||||
|         int i3 = this.mTouchSlop; | ||||
|         return f3 > ((float) (i3 * i3)); | ||||
|     } | ||||
|  | ||||
|     public boolean isEdgeTouched(int i) { | ||||
|         int length = this.mInitialEdgesTouched.length; | ||||
|         for (int i2 = 0; i2 < length; i2++) { | ||||
|             if (isEdgeTouched(i, i2)) { | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public boolean isEdgeTouched(int i, int i2) { | ||||
|         return isPointerDown(i2) && (i & this.mInitialEdgesTouched[i2]) != 0; | ||||
|     } | ||||
|  | ||||
|     private void releaseViewForPointerUp() { | ||||
|         this.mVelocityTracker.computeCurrentVelocity(1000, this.mMaxVelocity); | ||||
|         dispatchViewReleased(clampMag(this.mVelocityTracker.getXVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity), clampMag(this.mVelocityTracker.getYVelocity(this.mActivePointerId), this.mMinVelocity, this.mMaxVelocity)); | ||||
|     } | ||||
|  | ||||
|     private void dragTo(int i, int i2, int i3, int i4) { | ||||
|         int left = this.mCapturedView.getLeft(); | ||||
|         int top = this.mCapturedView.getTop(); | ||||
|         if (i3 != 0) { | ||||
|             i = this.mCallback.clampViewPositionHorizontal(this.mCapturedView, i, i3); | ||||
|             ViewCompat.offsetLeftAndRight(this.mCapturedView, i - left); | ||||
|         } | ||||
|         int i5 = i; | ||||
|         if (i4 != 0) { | ||||
|             i2 = this.mCallback.clampViewPositionVertical(this.mCapturedView, i2, i4); | ||||
|             ViewCompat.offsetTopAndBottom(this.mCapturedView, i2 - top); | ||||
|         } | ||||
|         int i6 = i2; | ||||
|         if (i3 == 0 && i4 == 0) { | ||||
|             return; | ||||
|         } | ||||
|         this.mCallback.onViewPositionChanged(this.mCapturedView, i5, i6, i5 - left, i6 - top); | ||||
|     } | ||||
|  | ||||
|     public boolean isCapturedViewUnder(int i, int i2) { | ||||
|         return isViewUnder(this.mCapturedView, i, i2); | ||||
|     } | ||||
|  | ||||
|     public boolean isViewUnder(View view, int i, int i2) { | ||||
|         return view != null && i >= view.getLeft() && i < view.getRight() && i2 >= view.getTop() && i2 < view.getBottom(); | ||||
|     } | ||||
|  | ||||
|     public View findTopChildUnder(int i, int i2) { | ||||
|         for (int childCount = this.mParentView.getChildCount() - 1; childCount >= 0; childCount--) { | ||||
|             View childAt = this.mParentView.getChildAt(this.mCallback.getOrderedChildIndex(childCount)); | ||||
|             if (i >= childAt.getLeft() && i < childAt.getRight() && i2 >= childAt.getTop() && i2 < childAt.getBottom()) { | ||||
|                 return childAt; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private int getEdgesTouched(int i, int i2) { | ||||
|         int i3 = i < this.mParentView.getLeft() + this.mEdgeSize ? 1 : 0; | ||||
|         if (i2 < this.mParentView.getTop() + this.mEdgeSize) { | ||||
|             i3 |= 4; | ||||
|         } | ||||
|         if (i > this.mParentView.getRight() - this.mEdgeSize) { | ||||
|             i3 |= 2; | ||||
|         } | ||||
|         return i2 > this.mParentView.getBottom() - this.mEdgeSize ? i3 | 8 : i3; | ||||
|     } | ||||
|  | ||||
|     private boolean isValidPointerForActionMove(int i) { | ||||
|         if (isPointerDown(i)) { | ||||
|             return true; | ||||
|         } | ||||
|         Log.e(TAG, "Ignoring pointerId=" + i + " because ACTION_DOWN was not received for this pointer before ACTION_MOVE. It likely happened because  ViewDragHelper did not receive all the events in the event stream."); | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user