Android Open Source - android-tetheringfixer Drawable State






From Project

Back to project page android-tetheringfixer.

License

The source code is released under:

MIT License

If you think the Android project android-tetheringfixer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * The MIT License (MIT)//from ww  w .ja  v  a  2 s. co  m
 *
 * Copyright (c) 2014 Eugenio Marletti
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package me.eugeniomarletti.tetheringfixer.android;

import android.view.View;
import me.eugeniomarletti.tetheringfixer.R;

public final class DrawableState
{
    public interface StateHolderProvider
    {
        public StateHolder[] getStateHolders();
    }

    public static int[] getAdditionalState(StateHolderProvider obj)
    {
        if (obj == null) return new int[0];
        final StateHolder[] holders = obj.getStateHolders();
        if (holders == null) return new int[0];
        final int holdersLength = holders.length;
        final int[] states = new int[holdersLength];
        int j = 0;
        for (StateHolder holder : holders) if (holder.isState()) states[j++] = holder.getStateAttribute();
        if (j == holdersLength) return states;
        final int[] statesShort = new int[j];
        System.arraycopy(states, 0, statesShort, 0, j);
        return statesShort;
    }

    public static class StateHolder
    {
        private final int     stateAttribute;
        private final View    view;
        private       boolean state;

        public StateHolder(int stateAttribute, View view)
        {
            this.stateAttribute = stateAttribute;
            this.view = view;
        }

        public int getStateAttribute()
        {
            return stateAttribute;
        }

        public View getView()
        {
            return view;
        }

        public boolean isState()
        {
            return state;
        }

        public void toggleState(boolean refreshDrawableState)
        {
            setState(!state, refreshDrawableState);
        }

        public void toggleState()
        {
            toggleState(true);
        }

        public void setState(boolean state, boolean refreshDrawableState)
        {
            if (this.state != state)
            {
                this.state = state;
                if (refreshDrawableState)
                {
                    final View view = getView();
                    if (view != null) view.refreshDrawableState();
                }
            }
        }

        public void setState(boolean state)
        {
            setState(state, true);
        }
    }

    public static final class StateErrorHolder extends StateHolder
    {
        public static final int STATE_ERROR = R.attr.state_error;

        public StateErrorHolder(View view)
        {
            super(STATE_ERROR, view);
        }

        public interface StateError
        {
            public boolean isError();
            public void setError(boolean error);
            public void toggleError();
        }
    }

    public static final class StateWorkingHolder extends StateHolder
    {
        public static final int STATE_WORKING = R.attr.state_working;

        public StateWorkingHolder(View view)
        {
            super(STATE_WORKING, view);
        }

        public interface StateWorking
        {
            public boolean isWorking();
            public void setWorking(boolean working);
            public void toggleWorking();
        }
    }

    public static final class StateCheckedHolder extends StateHolder
    {
        public static final int STATE_CHECKED = android.R.attr.state_checked;

        public StateCheckedHolder(View view)
        {
            super(STATE_CHECKED, view);
        }
    }

    //public static class WeakStateHolder extends StateHolder
    //{
    //    private final WeakReference<View> viewWeakReference;
    //
    //    public WeakStateHolder(int stateAttribute, View view)
    //    {
    //        super(stateAttribute, null);
    //        viewWeakReference = view == null ? null : new WeakReference<>(view);
    //    }
    //
    //    @Override
    //    public View getView()
    //    {
    //        return viewWeakReference == null ? null : viewWeakReference.get();
    //    }
    //}
}




Java Source Code List

me.eugeniomarletti.tetheringfixer.Async.java
me.eugeniomarletti.tetheringfixer.Fixer.java
me.eugeniomarletti.tetheringfixer.Steps.java
me.eugeniomarletti.tetheringfixer.Utils.java
me.eugeniomarletti.tetheringfixer.android.Application.java
me.eugeniomarletti.tetheringfixer.android.BootBroadcastReceiver.java
me.eugeniomarletti.tetheringfixer.android.BulletExpandEffect.java
me.eugeniomarletti.tetheringfixer.android.Bullet.java
me.eugeniomarletti.tetheringfixer.android.DrawableState.java
me.eugeniomarletti.tetheringfixer.android.PackageManager.java
me.eugeniomarletti.tetheringfixer.android.SimpleAnimatorListener.java
me.eugeniomarletti.tetheringfixer.android.StepsActivity.java
me.eugeniomarletti.tetheringfixer.android.StepsService.java
me.eugeniomarletti.tetheringfixer.android.Switch.java
me.eugeniomarletti.tetheringfixer.android.TextView.java
me.eugeniomarletti.tetheringfixer.command.CommandException.java
me.eugeniomarletti.tetheringfixer.command.CommandNotFoundException.java
me.eugeniomarletti.tetheringfixer.command.CommandNotOkException.java
me.eugeniomarletti.tetheringfixer.command.CommandResult.java
me.eugeniomarletti.tetheringfixer.command.WaitCommand.java