1/*
2 * Copyright (C) 2014 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.settings.notification;
18
19import android.content.Context;
20import android.util.SparseBooleanArray;
21import android.view.LayoutInflater;
22import android.widget.CheckBox;
23import android.widget.CompoundButton;
24import android.widget.CompoundButton.OnCheckedChangeListener;
25import android.widget.LinearLayout;
26import android.widget.ScrollView;
27
28import com.android.settings.R;
29
30import java.text.SimpleDateFormat;
31import java.util.Arrays;
32import java.util.Calendar;
33
34public class ZenModeScheduleDaysSelection extends ScrollView {
35    public static final int[] DAYS = {
36        Calendar.SUNDAY,
37        Calendar.MONDAY,
38        Calendar.TUESDAY,
39        Calendar.WEDNESDAY,
40        Calendar.THURSDAY,
41        Calendar.FRIDAY,
42        Calendar.SATURDAY,
43    };
44
45    // per-instance to ensure we're always using the current locale
46    private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEEE");
47    private final SparseBooleanArray mDays = new SparseBooleanArray();
48    private final LinearLayout mLayout;
49
50    public ZenModeScheduleDaysSelection(Context context, int[] days) {
51        super(context);
52        mLayout = new LinearLayout(mContext);
53        final int hPad = context.getResources()
54                .getDimensionPixelSize(R.dimen.zen_schedule_day_margin);
55        mLayout.setPadding(hPad, 0, hPad, 0);
56        addView(mLayout);
57        if (days != null) {
58            for (int i = 0; i < days.length; i++) {
59                mDays.put(days[i], true);
60            }
61        }
62        mLayout.setOrientation(LinearLayout.VERTICAL);
63        final Calendar c = Calendar.getInstance();
64        final LayoutInflater inflater = LayoutInflater.from(context);
65        for (int i = 0; i < DAYS.length; i++) {
66            final int day = DAYS[i];
67            final CheckBox checkBox = (CheckBox) inflater.inflate(R.layout.zen_schedule_rule_day,
68                    this, false);
69            c.set(Calendar.DAY_OF_WEEK, day);
70            checkBox.setText(mDayFormat.format(c.getTime()));
71            checkBox.setChecked(mDays.get(day));
72            checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
73                @Override
74                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
75                    mDays.put(day, isChecked);
76                    onChanged(getDays());
77                }
78            });
79            mLayout.addView(checkBox);
80        }
81    }
82
83    private int[] getDays() {
84        final SparseBooleanArray rt = new SparseBooleanArray(mDays.size());
85        for (int i = 0; i < mDays.size(); i++) {
86            final int day = mDays.keyAt(i);
87            if (!mDays.valueAt(i)) continue;
88            rt.put(day, true);
89        }
90        final int[] rta = new int[rt.size()];
91        for (int i = 0; i < rta.length; i++) {
92            rta[i] = rt.keyAt(i);
93        }
94        Arrays.sort(rta);
95        return rta;
96    }
97
98    protected void onChanged(int[] days) {
99        // event hook for subclasses
100    }
101}
102