1e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova/*
2e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * Copyright (C) 2015 The Android Open Source Project
3e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova *
4e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * Licensed under the Apache License, Version 2.0 (the "License");
5e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * you may not use this file except in compliance with the License.
6e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * You may obtain a copy of the License at
7e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova *
8e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova *      http://www.apache.org/licenses/LICENSE-2.0
9e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova *
10e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * Unless required by applicable law or agreed to in writing, software
11e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * distributed under the License is distributed on an "AS IS" BASIS,
12e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * See the License for the specific language governing permissions and
14e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova * limitations under the License.
15e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova */
16e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovapackage com.android.deskclock;
17e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
1897149ea89a5c0e057f25b89b87eef6224b82a777Daria Evdokimovaimport android.app.Activity;
19e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.app.ListActivity;
20e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.content.Context;
21e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.content.Intent;
22e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.os.AsyncTask;
23e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.os.Bundle;
24e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.os.Parcelable;
25e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.view.View;
26e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.widget.Button;
27e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport android.widget.ListView;
28e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
29e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport com.android.deskclock.provider.Alarm;
30e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport com.android.deskclock.widget.selector.AlarmSelection;
31e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport com.android.deskclock.widget.selector.AlarmSelectionAdapter;
32e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
33e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport java.util.ArrayList;
34e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovaimport java.util.List;
35e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
36e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimovapublic class AlarmSelectionActivity extends ListActivity {
37e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
38e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    public static final String EXTRA_ALARMS = "com.android.deskclock.EXTRA_ALARMS";
39e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
40e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    private final List<AlarmSelection> mSelections = new ArrayList<>();
41e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
42e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    @Override
43e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    protected void onCreate(Bundle savedInstanceState) {
44e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // this activity is shown if:
45e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // a) no search mode was specified in which case we show all
46e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // enabled alarms
47e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // b) if search mode was next and there was multiple alarms firing next
48e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // (at the same time) then we only show those alarms firing at the same time
49e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // c) if search mode was time and there are multiple alarms with that time
50e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // then we only show those alarms with that time
51e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
52e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        super.onCreate(savedInstanceState);
53e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        setContentView(R.layout.selection_layout);
54e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
55e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        final Button cancelButton = (Button) findViewById(R.id.cancel_button);
56e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        cancelButton.setOnClickListener(new View.OnClickListener() {
57e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            @Override
58e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            public void onClick(View v) {
59e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova                finish();
60e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            }
61e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        });
62e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
63e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        final Intent intent = getIntent();
64e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        final Parcelable[] alarmsFromIntent = intent.getParcelableArrayExtra(EXTRA_ALARMS);
65e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
66e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // reading alarms from intent
67e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // PickSelection is started only if there are more than 1 relevant alarm
68e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // so no need to check if alarmsFromIntent is empty
69e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        for (Parcelable parcelable : alarmsFromIntent) {
70e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            final Alarm alarm = (Alarm) parcelable;
71e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
72e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            // filling mSelections that go into the UI picker list
73e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            final String label = String.format("%d %02d", alarm.hour, alarm.minutes);
74e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            mSelections.add(new AlarmSelection(label, alarm));
75e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        }
76e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
77e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        setListAdapter(new AlarmSelectionAdapter(this, R.layout.alarm_row, mSelections));
78e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    }
79e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
80e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    @Override
81e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    public void onListItemClick(ListView l, View v, int position, long id) {
82e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        super.onListItemClick(l, v, position, id);
83e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        // id corresponds to mSelections id because the view adapter used mSelections
84e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        final AlarmSelection selection = mSelections.get((int) id);
85e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        final Alarm alarm = selection.getAlarm();
86e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        if (alarm != null) {
8797149ea89a5c0e057f25b89b87eef6224b82a777Daria Evdokimova            new ProcessAlarmActionAsync(this, alarm, this).execute();
88e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        }
89e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        finish();
90e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    }
91e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
92e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    private static class ProcessAlarmActionAsync extends AsyncTask<Void, Void, Void> {
93e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
94e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        private final Context mContext;
95e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        private final Alarm mAlarm;
9697149ea89a5c0e057f25b89b87eef6224b82a777Daria Evdokimova        private final Activity mActivity;
97e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
9897149ea89a5c0e057f25b89b87eef6224b82a777Daria Evdokimova        public ProcessAlarmActionAsync(Context context, Alarm alarm, Activity activity) {
99e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            mContext = context;
100e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            mAlarm = alarm;
10197149ea89a5c0e057f25b89b87eef6224b82a777Daria Evdokimova            mActivity = activity;
102e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        }
103e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova
104e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        @Override
105e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        protected Void doInBackground(Void... parameters) {
10697149ea89a5c0e057f25b89b87eef6224b82a777Daria Evdokimova            HandleApiCalls.dismissAlarm(mAlarm, mContext, mActivity);
107e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova            return null;
108e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova        }
109e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova    }
110e6f73547d9fed9f9e0a44e6baf2894d317e6ef78Daria Evdokimova}
111