| /* |
| * Copyright (C) 2014 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.android.settings.notification; |
| |
| import android.content.Context; |
| import android.util.SparseBooleanArray; |
| import android.view.LayoutInflater; |
| import android.widget.CheckBox; |
| import android.widget.CompoundButton; |
| import android.widget.CompoundButton.OnCheckedChangeListener; |
| import android.widget.LinearLayout; |
| import android.widget.ScrollView; |
| |
| import com.android.settings.R; |
| |
| import java.text.SimpleDateFormat; |
| import java.util.Arrays; |
| import java.util.Calendar; |
| |
| public class ZenModeScheduleDaysSelection extends ScrollView { |
| // per-instance to ensure we're always using the current locale |
| private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEEE"); |
| private final SparseBooleanArray mDays = new SparseBooleanArray(); |
| private final LinearLayout mLayout; |
| |
| public ZenModeScheduleDaysSelection(Context context, int[] days) { |
| super(context); |
| mLayout = new LinearLayout(mContext); |
| final int hPad = context.getResources() |
| .getDimensionPixelSize(R.dimen.zen_schedule_day_margin); |
| mLayout.setPadding(hPad, 0, hPad, 0); |
| addView(mLayout); |
| if (days != null) { |
| for (int i = 0; i < days.length; i++) { |
| mDays.put(days[i], true); |
| } |
| } |
| mLayout.setOrientation(LinearLayout.VERTICAL); |
| final Calendar c = Calendar.getInstance(); |
| int[] daysOfWeek = getDaysOfWeekForLocale(c); |
| final LayoutInflater inflater = LayoutInflater.from(context); |
| for (int i = 0; i < daysOfWeek.length; i++) { |
| final int day = daysOfWeek[i]; |
| final CheckBox checkBox = (CheckBox) inflater.inflate(R.layout.zen_schedule_rule_day, |
| this, false); |
| c.set(Calendar.DAY_OF_WEEK, day); |
| checkBox.setText(mDayFormat.format(c.getTime())); |
| checkBox.setChecked(mDays.get(day)); |
| checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { |
| @Override |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| mDays.put(day, isChecked); |
| onChanged(getDays()); |
| } |
| }); |
| mLayout.addView(checkBox); |
| } |
| } |
| |
| private int[] getDays() { |
| final SparseBooleanArray rt = new SparseBooleanArray(mDays.size()); |
| for (int i = 0; i < mDays.size(); i++) { |
| final int day = mDays.keyAt(i); |
| if (!mDays.valueAt(i)) continue; |
| rt.put(day, true); |
| } |
| final int[] rta = new int[rt.size()]; |
| for (int i = 0; i < rta.length; i++) { |
| rta[i] = rt.keyAt(i); |
| } |
| Arrays.sort(rta); |
| return rta; |
| } |
| |
| protected static int[] getDaysOfWeekForLocale(Calendar c) { |
| int[] daysOfWeek = new int[7]; |
| int currentDay = c.getFirstDayOfWeek(); |
| for (int i = 0; i < daysOfWeek.length; i++) { |
| if (currentDay > 7) currentDay = 1; |
| daysOfWeek[i] = currentDay; |
| currentDay++; |
| } |
| return daysOfWeek; |
| } |
| |
| protected void onChanged(int[] days) { |
| // event hook for subclasses |
| } |
| } |