1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14 
15 package com.android.systemui.statusbar.phone;
16 
17 import android.content.Context;
18 import android.graphics.drawable.AnimatedVectorDrawable;
19 import android.util.AttributeSet;
20 import android.widget.ImageView;
21 
22 import com.android.systemui.res.R;
23 
24 public class ExpandableIndicator extends ImageView {
25 
26     private boolean mExpanded;
27     private boolean mIsDefaultDirection = true;
28 
ExpandableIndicator(Context context, AttributeSet attrs)29     public ExpandableIndicator(Context context, AttributeSet attrs) {
30         super(context, attrs);
31     }
32 
33     @Override
onFinishInflate()34     protected void onFinishInflate() {
35         super.onFinishInflate();
36         updateIndicatorDrawable();
37         setContentDescription(getContentDescription(mExpanded));
38     }
39 
setExpanded(boolean expanded)40     public void setExpanded(boolean expanded) {
41         if (expanded == mExpanded) return;
42         mExpanded = expanded;
43         final int res = getDrawableResourceId(!mExpanded);
44         // workaround to reset drawable
45         final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) getContext()
46                 .getDrawable(res).getConstantState().newDrawable();
47         setImageDrawable(avd);
48         avd.forceAnimationOnUI();
49         avd.start();
50         setContentDescription(getContentDescription(expanded));
51     }
52 
53     /** Whether the icons are using the default direction or the opposite */
setDefaultDirection(boolean isDefaultDirection)54     public void setDefaultDirection(boolean isDefaultDirection) {
55         mIsDefaultDirection = isDefaultDirection;
56         updateIndicatorDrawable();
57     }
58 
getDrawableResourceId(boolean expanded)59     private int getDrawableResourceId(boolean expanded) {
60         if (mIsDefaultDirection) {
61             return expanded ? R.drawable.ic_volume_collapse_animation
62                     : R.drawable.ic_volume_expand_animation;
63         } else {
64             return expanded ? R.drawable.ic_volume_expand_animation
65                     : R.drawable.ic_volume_collapse_animation;
66         }
67     }
68 
getContentDescription(boolean expanded)69     private String getContentDescription(boolean expanded) {
70         return expanded ? mContext.getString(R.string.accessibility_quick_settings_collapse)
71                 : mContext.getString(R.string.accessibility_quick_settings_expand);
72     }
73 
updateIndicatorDrawable()74     private void updateIndicatorDrawable() {
75         final int res = getDrawableResourceId(mExpanded);
76         setImageResource(res);
77     }
78 }
79