/*
 *  Copyright (c) 2015 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov)
 *
 *  This file is part of RoboSwag library.
 *
 *  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 ru.touchin.roboswag.components.views;

import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
import android.util.TypedValue;

import ru.touchin.roboswag.components.R;
import ru.touchin.roboswag.components.utils.UiUtils;

/**
 * Created by Ilia Kurtov on 07/12/2016.
 * Simple endless progress bar view in material (round circle) style.
 * It is able to setup size, stroke width and color.
 * See MaterialLoadingBar Attributes:
 * R.styleable#MaterialLoadingBar_size
 * R.styleable#MaterialLoadingBar_strokeWidth
 * R.styleable#MaterialLoadingBar_color
 * Use
 * R.styleable#MaterialLoadingBar_materialLoadingBarStyle
 * to set default style of MaterialLoadingBar in your Theme.
 * Sample:
 * <style name="MyAppLoadingBar">
 * <item name="strokeWidth">3dp</item>
 * <item name="color">@android:color/black</item>
 * <item name="size">24dp</item>
 * </style>
 * <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
 * <item name="materialLoadingBarStyle">@style/MyAppLoadingBar</item>
 * </style>
 */
public class MaterialLoadingBar extends AppCompatImageView {

    private static int getPrimaryColor(@NonNull final Context context) {
        final int colorAttr;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            colorAttr = android.R.attr.colorPrimary;
        } else {
            colorAttr = context.getResources().getIdentifier("colorPrimary", "attr", context.getPackageName());
        }
        final TypedValue outValue = new TypedValue();
        context.getTheme().resolveAttribute(colorAttr, outValue, true);
        return outValue.data;
    }

    private MaterialProgressDrawable progressDrawable;

    public MaterialLoadingBar(@NonNull final Context context) {
        this(context, null);
    }

    public MaterialLoadingBar(@NonNull final Context context, @Nullable final AttributeSet attrs) {
        this(context, attrs, R.attr.materialLoadingBarStyle);
    }

    public MaterialLoadingBar(@NonNull final Context context, @Nullable final AttributeSet attrs, final int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MaterialLoadingBar,
                defStyleAttr,
                0);
        final int size = (int) typedArray.getDimension(R.styleable.MaterialLoadingBar_size, UiUtils.OfMetrics.dpToPixels(context, 48));
        final int color = typedArray.getColor(R.styleable.MaterialLoadingBar_color, getPrimaryColor(context));
        final float strokeWidth = typedArray.getDimension(R.styleable.MaterialLoadingBar_strokeWidth,
                UiUtils.OfMetrics.dpToPixels(context, 4));
        typedArray.recycle();

        progressDrawable = new MaterialProgressDrawable(context, size);
        progressDrawable.setColor(color);
        progressDrawable.setStrokeWidth(strokeWidth);
        setScaleType(ScaleType.CENTER);
        setImageDrawable(progressDrawable);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        progressDrawable.start();
    }

    @Override
    protected void onDetachedFromWindow() {
        progressDrawable.stop();
        super.onDetachedFromWindow();
    }

}
@@ -824,16 +824,60 @@
 .Build;%0A
+import android.support.annotation.ColorInt;%0A
 import a
@@ -4162,11 +4162,225 @@
 );%0A    %7D
+%0A    %0A    /**%0A     * Set color of loader.%0A     *%0A     * @param colorInt Color of loader to be set.%0A     */%0A    public void setColor(@ColorInt final int colorInt) %7B%0A        progressDrawable.setColor(colorInt);%0A    %7D
 %0A%0A%7D

Add to MaterialLoadingBar method setColor (#111)