Home | History | Annotate | Download | only in impl
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package com.android.incallui.answer.impl;
     18 
     19 import android.content.Context;
     20 import android.content.res.Configuration;
     21 import android.support.annotation.Nullable;
     22 import android.util.AttributeSet;
     23 import android.view.MotionEvent;
     24 import android.view.View;
     25 import android.widget.FrameLayout;
     26 import com.android.incallui.answer.impl.affordance.SwipeButtonHelper;
     27 import com.android.incallui.answer.impl.affordance.SwipeButtonHelper.Callback;
     28 import com.android.incallui.answer.impl.affordance.SwipeButtonView;
     29 import com.android.incallui.util.AccessibilityUtil;
     30 
     31 /** Layout that delegates touches to its SwipeButtonHelper */
     32 public class AffordanceHolderLayout extends FrameLayout {
     33 
     34   private SwipeButtonHelper affordanceHelper;
     35 
     36   private Callback affordanceCallback;
     37 
     38   public AffordanceHolderLayout(Context context) {
     39     this(context, null);
     40   }
     41 
     42   public AffordanceHolderLayout(Context context, AttributeSet attrs) {
     43     this(context, attrs, 0);
     44   }
     45 
     46   public AffordanceHolderLayout(Context context, AttributeSet attrs, int defStyleAttr) {
     47     super(context, attrs, defStyleAttr);
     48 
     49     affordanceHelper =
     50         new SwipeButtonHelper(
     51             new Callback() {
     52               @Override
     53               public void onAnimationToSideStarted(
     54                   boolean rightPage, float translation, float vel) {
     55                 if (affordanceCallback != null) {
     56                   affordanceCallback.onAnimationToSideStarted(rightPage, translation, vel);
     57                 }
     58               }
     59 
     60               @Override
     61               public void onAnimationToSideEnded(boolean rightPage) {
     62                 if (affordanceCallback != null) {
     63                   affordanceCallback.onAnimationToSideEnded(rightPage);
     64                 }
     65               }
     66 
     67               @Override
     68               public float getMaxTranslationDistance() {
     69                 if (affordanceCallback != null) {
     70                   return affordanceCallback.getMaxTranslationDistance();
     71                 }
     72                 return 0;
     73               }
     74 
     75               @Override
     76               public void onSwipingStarted(boolean rightIcon) {
     77                 if (affordanceCallback != null) {
     78                   affordanceCallback.onSwipingStarted(rightIcon);
     79                 }
     80               }
     81 
     82               @Override
     83               public void onSwipingAborted() {
     84                 if (affordanceCallback != null) {
     85                   affordanceCallback.onSwipingAborted();
     86                 }
     87               }
     88 
     89               @Override
     90               public void onIconClicked(boolean rightIcon) {
     91                 if (affordanceCallback != null) {
     92                   affordanceCallback.onIconClicked(rightIcon);
     93                 }
     94               }
     95 
     96               @Nullable
     97               @Override
     98               public SwipeButtonView getLeftIcon() {
     99                 if (affordanceCallback != null) {
    100                   return affordanceCallback.getLeftIcon();
    101                 }
    102                 return null;
    103               }
    104 
    105               @Nullable
    106               @Override
    107               public SwipeButtonView getRightIcon() {
    108                 if (affordanceCallback != null) {
    109                   return affordanceCallback.getRightIcon();
    110                 }
    111                 return null;
    112               }
    113 
    114               @Nullable
    115               @Override
    116               public View getLeftPreview() {
    117                 if (affordanceCallback != null) {
    118                   return affordanceCallback.getLeftPreview();
    119                 }
    120                 return null;
    121               }
    122 
    123               @Nullable
    124               @Override
    125               public View getRightPreview() {
    126                 if (affordanceCallback != null) {
    127                   affordanceCallback.getRightPreview();
    128                 }
    129                 return null;
    130               }
    131 
    132               @Override
    133               public float getAffordanceFalsingFactor() {
    134                 if (affordanceCallback != null) {
    135                   return affordanceCallback.getAffordanceFalsingFactor();
    136                 }
    137                 return 1.0f;
    138               }
    139             },
    140             context);
    141   }
    142 
    143   public void setAffordanceCallback(@Nullable Callback callback) {
    144     affordanceCallback = callback;
    145     affordanceHelper.init();
    146   }
    147 
    148   public void startHintAnimation(boolean rightIcon, @Nullable Runnable onFinishListener) {
    149     affordanceHelper.startHintAnimation(rightIcon, onFinishListener);
    150   }
    151 
    152   public void animateHideLeftRightIcon() {
    153     affordanceHelper.animateHideLeftRightIcon();
    154   }
    155 
    156   public void reset(boolean animate) {
    157     affordanceHelper.reset(animate);
    158   }
    159 
    160   @Override
    161   public boolean onInterceptTouchEvent(MotionEvent event) {
    162     if (AccessibilityUtil.isTouchExplorationEnabled(getContext())) {
    163       return false;
    164     }
    165     return affordanceHelper.onTouchEvent(event) || super.onInterceptTouchEvent(event);
    166   }
    167 
    168   @Override
    169   public boolean onTouchEvent(MotionEvent event) {
    170     return affordanceHelper.onTouchEvent(event) || super.onTouchEvent(event);
    171   }
    172 
    173   @Override
    174   protected void onConfigurationChanged(Configuration newConfig) {
    175     super.onConfigurationChanged(newConfig);
    176     affordanceHelper.onConfigurationChanged();
    177   }
    178 }
    179