1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.android.tv.common.feature;
18
19import android.content.Context;
20
21import java.util.Arrays;
22
23/**
24 * Static utilities for features.
25 */
26public class FeatureUtils {
27
28    /**
29     * Returns a feature that is enabled if any of {@code features} is enabled.
30     *
31     * @param features the features to or
32     */
33    public static Feature OR(final Feature... features) {
34        return new Feature() {
35            @Override
36            public boolean isEnabled(Context context) {
37                for (Feature f : features) {
38                    if (f.isEnabled(context)) {
39                        return true;
40                    }
41                }
42                return false;
43            }
44
45            @Override
46            public String toString() {
47                return "or(" + Arrays.asList(features) + ")";
48            }
49        };
50
51    }
52
53    /**
54     * Returns a feature that is enabled if all of {@code features} is enabled.
55     *
56     * @param features the features to and
57     */
58    public static Feature AND(final Feature... features) {
59        return new Feature() {
60            @Override
61            public boolean isEnabled(Context context) {
62                for (Feature f : features) {
63                    if (!f.isEnabled(context)) {
64                        return false;
65                    }
66                }
67                return true;
68            }
69
70            @Override
71            public String toString() {
72                return "and(" + Arrays.asList(features) + ")";
73            }
74        };
75    }
76
77    /**
78     * A feature that is always enabled.
79     */
80    public static final Feature ON = new Feature() {
81        @Override
82        public boolean isEnabled(Context context) {
83            return true;
84        }
85
86        @Override
87        public String toString() {
88            return "on";
89        }
90    };
91
92    /**
93     * A feature that is always disabled.
94     */
95    public static final Feature OFF = new Feature() {
96        @Override
97        public boolean isEnabled(Context context) {
98            return false;
99        }
100
101        @Override
102        public String toString() {
103            return "off";
104        }
105    };
106
107    private FeatureUtils() {
108    }
109}
110