package com.james.status.data.icon; import android.app.AlarmManager; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Build; import android.provider.Settings; import com.james.status.R; import com.james.status.data.IconStyleData; import com.james.status.receivers.IconUpdateReceiver; import java.util.Arrays; import java.util.List; public class AlarmIconData extends IconData<AlarmIconData.AlarmReceiver> { private AlarmManager alarmManager; public AlarmIconData(Context context) { super(context); alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); } @Override public AlarmReceiver getReceiver() { return new AlarmReceiver(this); } @Override public IntentFilter getIntentFilter() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return new IntentFilter(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED); else return new IntentFilter("android.intent.action.ALARM_CHANGED"); } @Override public void register() { super.register(); Object alarm; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) alarm = alarmManager.getNextAlarmClock(); else alarm = Settings.System.getString(getContext().getContentResolver(), android.provider.Settings.System.NEXT_ALARM_FORMATTED); if (alarm != null) onDrawableUpdate(0); } @Override public String getTitle() { return getContext().getString(R.string.icon_alarm); } @Override public int getIconStyleSize() { return 1; } @Override public List<IconStyleData> getIconStyles() { List<IconStyleData> styles = super.getIconStyles(); styles.addAll( Arrays.asList( new IconStyleData( getContext().getString(R.string.icon_style_default), IconStyleData.TYPE_VECTOR, R.drawable.ic_alarm ), new IconStyleData( getContext().getString(R.string.icon_style_system), IconStyleData.TYPE_IMAGE, android.R.drawable.ic_popup_reminder ), new IconStyleData( getContext().getString(R.string.icon_style_clear), IconStyleData.TYPE_VECTOR, R.drawable.ic_alarm_clear ), new IconStyleData( getContext().getString(R.string.icon_style_school), IconStyleData.TYPE_VECTOR, R.drawable.ic_alarm_school ) ) ); return styles; } static class AlarmReceiver extends IconUpdateReceiver<AlarmIconData> { private AlarmReceiver(AlarmIconData iconData) { super(iconData); } @Override public void onReceive(AlarmIconData icon, Intent intent) { Object alarm = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) alarm = icon.alarmManager.getNextAlarmClock(); else alarm = Settings.System.getString(icon.getContext().getContentResolver(), android.provider.Settings.System.NEXT_ALARM_FORMATTED); if (alarm != null) icon.onDrawableUpdate(0); else icon.onDrawableUpdate(-1); } } }