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 import com.android.systemui.R;
22 
23 public class ExpandableIndicator extends ImageView {
24 
25     private boolean mExpanded;
26     private boolean mIsDefaultDirection = true;
27 
ExpandableIndicator(Context context, AttributeSet attrs)28     public ExpandableIndicator(Context context, AttributeSet attrs) {
29         super(context, attrs);
30     }
31 
32     @Override
onFinishInflate()33     protected void onFinishInflate() {
34         super.onFinishInflate();
35         updateIndicatorDrawable();
36         setContentDescription(getContentDescription(mExpanded));
37     }
38 
setExpanded(boolean expanded)39     public void setExpanded(boolean expanded) {
40         if (expanded == mExpanded) return;
41         mExpanded = expanded;
42         final int res = getDrawableResourceId(!mExpanded);
43         // workaround to reset drawable
44         final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) getContext()
45                 .getDrawable(res).getConstantState().newDrawable();
46         setImageDrawable(avd);
47         avd.forceAnimationOnUI();
48         avd.start();
49         setContentDescription(getContentDescription(expanded));
50     }
51 
52     /** Whether the icons are using the default direction or the opposite */
setDefaultDirection(boolean isDefaultDirection)53     public void setDefaultDirection(boolean isDefaultDirection) {
54         mIsDefaultDirection = isDefaultDirection;
55         updateIndicatorDrawable();
56     }
57 
getDrawableResourceId(boolean expanded)58     private int getDrawableResourceId(boolean expanded) {
59         if (mIsDefaultDirection) {
60             return expanded ? R.drawable.ic_volume_collapse_animation
61                     : R.drawable.ic_volume_expand_animation;
62         } else {
63             return expanded ? R.drawable.ic_volume_expand_animation
64                     : R.drawable.ic_volume_collapse_animation;
65         }
66     }
67 
getContentDescription(boolean expanded)68     private String getContentDescription(boolean expanded) {
69         return expanded ? mContext.getString(R.string.accessibility_quick_settings_collapse)
70                 : mContext.getString(R.string.accessibility_quick_settings_expand);
71     }
72 
updateIndicatorDrawable()73     private void updateIndicatorDrawable() {
74         final int res = getDrawableResourceId(mExpanded);
75         setImageResource(res);
76     }
77 }
78