/*
* Copyright (C) 2016 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.wamod.view;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import com.wamod.Resources;
public class ExpandableIndicator extends ImageView {
private boolean mExpanded;
private boolean mIsDefaultDirection = true;
public ExpandableIndicator(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
if (isInEditMode()) return;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final int res = getDrawableResourceId(mExpanded);
setImageResource(res);
} else {
setImageDrawable(getContext().getResources().getDrawable(getDrawableResourceIdLegacy(mExpanded)));
}
}
public void setExpanded(boolean expanded) {
if (expanded == mExpanded) return;
mExpanded = expanded;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final int res = getDrawableResourceId(!mExpanded);
final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) getContext().getDrawable(res).getConstantState().newDrawable();
setImageDrawable(avd);
//avd.forceAnimationOnUI();
avd.start();
} else {
setImageDrawable(getContext().getResources().getDrawable(getDrawableResourceIdLegacy(mExpanded)));
}
}
public boolean isExpanded() {
return mExpanded;
}
/** Whether the icons are using the default direction or the opposite */
public void setDefaultDirection(boolean isDefaultDirection) {
mIsDefaultDirection = isDefaultDirection;
}
private int getDrawableResourceId(boolean expanded) {
if (mIsDefaultDirection) {
return expanded ? Resources.getDrawable("ic_volume_collapse_animation")
: Resources.getDrawable("ic_volume_expand_animation");
} else {
return expanded ? Resources.getDrawable("ic_volume_expand_animation")
: Resources.getDrawable("ic_volume_collapse_animation");
}
}
private int getDrawableResourceIdLegacy(boolean expanded) {
if (mIsDefaultDirection) {
return expanded ? Resources.getDrawable("ic_volume_collapse_legacy")
: Resources.getDrawable("ic_volume_expand_legacy");
} else {
return expanded ? Resources.getDrawable("ic_volume_expand_legacy")
: Resources.getDrawable("ic_volume_collapse_legacy");
}
}
}