content: /*
   * Copyright (C) 2017 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.internal.widget.helper;
  
  import android.graphics.Canvas;
  import android.view.View;
  
  import com.android.internal.R;
  import com.android.internal.widget.RecyclerView;
  
  /**
   * Package private class to keep implementations. Putting them inside ItemTouchUIUtil makes them
   * public API, which is not desired in this case.
   */
  class ItemTouchUIUtilImpl implements ItemTouchUIUtil {
      @Override
      public void onDraw(Canvas c, RecyclerView recyclerView, View view,
              float dX, float dY, int actionState, boolean isCurrentlyActive) {
          if (isCurrentlyActive) {
              Object originalElevation = view.getTag(
                      R.id.item_touch_helper_previous_elevation);
              if (originalElevation == null) {
                  originalElevation = view.getElevation();
                  float newElevation = 1f + findMaxElevation(recyclerView, view);
                  view.setElevation(newElevation);
                  view.setTag(R.id.item_touch_helper_previous_elevation,
                          originalElevation);
              }
          }
          view.setTranslationX(dX);
          view.setTranslationY(dY);
      }
  
      private float findMaxElevation(RecyclerView recyclerView, View itemView) {
          final int childCount = recyclerView.getChildCount();
          float max = 0;
          for (int i = 0; i < childCount; i++) {
              final View child = recyclerView.getChildAt(i);
              if (child == itemView) {
                  continue;
              }
              final float elevation = child.getElevation();
              if (elevation > max) {
                  max = elevation;
              }
          }
          return max;
      }
  
      @Override
      public void clearView(View view) {
          final Object tag = view.getTag(
                  R.id.item_touch_helper_previous_elevation);
          if (tag != null && tag instanceof Float) {
              view.setElevation((Float) tag);
          }
          view.setTag(R.id.item_touch_helper_previous_elevation, null);
          view.setTranslationX(0f);
          view.setTranslationY(0f);
      }
  
      @Override
      public void onSelected(View view) {
      }
  
      @Override
      public void onDrawOver(Canvas c, RecyclerView recyclerView,
              View view, float dX, float dY, int actionState, boolean isCurrentlyActive) {
      }
  }
  