1<?xml version="1.0" encoding="utf-8"?>
2<!--
3  Copyright (C) 2016 The Android Open Source Project
4
5  Licensed under the Apache License, Version 2.0 (the "License");
6  you may not use this file except in compliance with the License.
7  You may obtain a copy of the License at
8
9      http://www.apache.org/licenses/LICENSE-2.0
10
11  Unless required by applicable law or agreed to in writing, software
12  distributed under the License is distributed on an "AS IS" BASIS,
13  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  See the License for the specific language governing permissions and
15  limitations under the License.
16  -->
17
18<manifest
19    xmlns:android="http://schemas.android.com/apk/res/android"
20    package="com.android.deskclock">
21
22    <original-package android:name="com.android.alarmclock" />
23    <original-package android:name="com.android.deskclock" />
24
25    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" />
26
27    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
28    <uses-permission android:name="android.permission.WAKE_LOCK" />
29    <uses-permission android:name="android.permission.VIBRATE" />
30    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
31    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
32    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
33    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
34
35    <!-- WRITE_SETTINGS is required to record the upcoming alarm prior to L -->
36    <uses-permission
37        android:name="android.permission.WRITE_SETTINGS"
38        android:maxSdkVersion="19" />
39    <!-- READ_PHONE_STATE is required to determine when a phone call exists prior to M -->
40    <uses-permission
41        android:name="android.permission.READ_PHONE_STATE"
42        android:maxSdkVersion="22" />
43
44    <application
45        android:name=".DeskClockApplication"
46        android:allowBackup="false"
47        android:backupAgent="DeskClockBackupAgent"
48        android:fullBackupContent="@xml/backup_scheme"
49        android:fullBackupOnly="true"
50        android:icon="@mipmap/ic_launcher_alarmclock"
51        android:label="@string/app_label"
52        android:requiredForAllUsers="true"
53        android:supportsRtl="true"
54        android:theme="@style/Theme.DeskClock">
55
56        <!-- ============================================================== -->
57        <!-- Main app components.                                           -->
58        <!-- ============================================================== -->
59
60        <activity
61            android:name=".DeskClock"
62            android:label="@string/app_label"
63            android:launchMode="singleTask"
64            android:exported="true"
65            android:windowSoftInputMode="adjustPan">
66            <intent-filter>
67                <action android:name="android.intent.action.MAIN" />
68
69                <category android:name="android.intent.category.DEFAULT" />
70                <category android:name="android.intent.category.LAUNCHER" />
71            </intent-filter>
72        </activity>
73
74        <activity
75            android:name=".ringtone.RingtonePickerActivity"
76            android:excludeFromRecents="true"
77            android:taskAffinity=""
78            android:theme="@style/Theme.DeskClock.RingtonePicker" />
79
80        <activity
81            android:name=".worldclock.CitySelectionActivity"
82            android:excludeFromRecents="true"
83            android:label="@string/cities_activity_title"
84            android:parentActivityName=".DeskClock"
85            android:taskAffinity=""
86            android:theme="@style/Theme.DeskClock.CitySelection" />
87
88        <activity
89            android:name=".settings.SettingsActivity"
90            android:excludeFromRecents="true"
91            android:label="@string/settings"
92            android:parentActivityName=".DeskClock"
93            android:taskAffinity=""
94            android:theme="@style/Theme.DeskClock.Settings" />
95
96        <activity
97            android:name=".HandleShortcuts"
98            android:excludeFromRecents="true"
99            android:launchMode="singleInstance"
100            android:taskAffinity=""
101            android:theme="@android:style/Theme.NoDisplay" />
102
103        <!-- ============================================================== -->
104        <!-- AlarmClock API components.                                     -->
105        <!-- ============================================================== -->
106
107        <activity
108            android:name="com.android.deskclock.HandleApiCalls"
109            android:permission="com.android.alarm.permission.SET_ALARM"
110            android:directBootAware="true"
111            android:excludeFromRecents="true"
112            android:launchMode="singleInstance"
113            android:showWhenLocked="true"
114            android:taskAffinity=""
115            android:exported="true"
116            android:theme="@android:style/Theme.NoDisplay">
117            <intent-filter>
118                <action android:name="android.intent.action.DISMISS_ALARM" />
119                <action android:name="android.intent.action.DISMISS_TIMER" />
120                <action android:name="android.intent.action.SHOW_ALARMS" />
121                <action android:name="android.intent.action.SHOW_TIMERS" />
122                <action android:name="android.intent.action.SNOOZE_ALARM" />
123
124                <category android:name="android.intent.category.DEFAULT" />
125                <category android:name="android.intent.category.VOICE" />
126            </intent-filter>
127        </activity>
128
129        <activity-alias
130            android:name="com.android.deskclock.HandleSetAlarmApiCalls"
131            android:permission="com.android.alarm.permission.SET_ALARM"
132            android:exported="true"
133            android:targetActivity="com.android.deskclock.HandleApiCalls">
134            <intent-filter>
135                <action android:name="android.intent.action.SET_ALARM" />
136                <action android:name="android.intent.action.SET_TIMER" />
137
138                <category android:name="android.intent.category.DEFAULT" />
139                <category android:name="android.intent.category.VOICE" />
140            </intent-filter>
141        </activity-alias>
142
143        <!-- ============================================================== -->
144        <!-- Alarm components.                                              -->
145        <!-- ============================================================== -->
146
147        <activity
148            android:name=".alarms.AlarmActivity"
149            android:directBootAware="true"
150            android:excludeFromRecents="true"
151            android:resizeableActivity="false"
152            android:showOnLockScreen="true"
153	    android:showWhenLocked="true"
154            android:taskAffinity=""
155            android:windowSoftInputMode="stateAlwaysHidden" />
156
157        <activity
158            android:name=".AlarmSelectionActivity"
159            android:label="@string/dismiss_alarm"
160            android:theme="@android:style/Theme.Holo.Light.Dialog.NoActionBar" />
161
162        <provider
163            android:name=".provider.ClockProvider"
164            android:authorities="com.android.deskclock"
165            android:directBootAware="true"
166            android:exported="false" />
167
168        <receiver
169            android:name=".AlarmInitReceiver"
170            android:exported="true"
171            android:directBootAware="true">
172            <intent-filter>
173                <action android:name="android.intent.action.BOOT_COMPLETED" />
174                <action android:name="android.intent.action.LOCALE_CHANGED" />
175                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
176                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
177                <action android:name="android.intent.action.TIME_SET" />
178                <action android:name="android.intent.action.TIMEZONE_CHANGED" />
179            </intent-filter>
180        </receiver>
181
182        <receiver
183            android:name=".alarms.AlarmStateManager"
184            android:directBootAware="true" />
185
186        <service
187            android:name=".alarms.AlarmService"
188            android:directBootAware="true" />
189
190        <!-- ============================================================== -->
191        <!-- Timer components.                                              -->
192        <!-- ============================================================== -->
193
194        <activity
195            android:name=".timer.ExpiredTimersActivity"
196            android:configChanges="screenSize|keyboardHidden|keyboard|navigation"
197            android:directBootAware="true"
198            android:excludeFromRecents="true"
199            android:launchMode="singleInstance"
200            android:resizeableActivity="false"
201            android:showOnLockScreen="true"
202            android:taskAffinity="" />
203
204        <!-- Legacy broadcast receiver that honors old scheduled timers across app upgrade. -->
205        <receiver
206            android:name="com.android.deskclock.timer.TimerReceiver"
207            android:exported="false">
208            <intent-filter>
209                <action android:name="times_up" />
210            </intent-filter>
211        </receiver>
212
213        <service
214            android:name=".timer.TimerService"
215            android:description="@string/timer_service_desc"
216            android:directBootAware="true" />
217
218        <!-- ============================================================== -->
219        <!-- Stopwatch components.                                          -->
220        <!-- ============================================================== -->
221
222        <service
223            android:name=".stopwatch.StopwatchService"
224            android:description="@string/stopwatch_service_desc"
225            android:directBootAware="true" />
226
227
228        <!-- ============================================================== -->
229        <!-- Screen saver components.                                       -->
230        <!-- ============================================================== -->
231
232        <activity
233            android:name=".ScreensaverActivity"
234            android:excludeFromRecents="true"
235            android:resizeableActivity="false"
236            android:taskAffinity="" />
237
238        <activity
239            android:name=".settings.ScreensaverSettingsActivity"
240            android:excludeFromRecents="true"
241            android:label="@string/screensaver_settings"
242            android:taskAffinity=""
243            android:theme="@style/Theme.DeskClock.Settings" />
244
245        <service
246            android:name=".Screensaver"
247            android:label="@string/app_label"
248            android:exported="true"
249            android:permission="android.permission.BIND_DREAM_SERVICE">
250            <intent-filter>
251                <action android:name="android.service.dreams.DreamService" />
252                <action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
253
254                <category android:name="android.intent.category.DEFAULT" />
255            </intent-filter>
256            <meta-data
257                android:name="android.service.dream"
258                android:resource="@xml/screensaver_info" />
259        </service>
260
261        <!-- ============================================================== -->
262        <!-- App widget components.                                         -->
263        <!-- ============================================================== -->
264
265        <receiver
266            android:name="com.android.alarmclock.AnalogAppWidgetProvider"
267            android:exported="true"
268            android:label="@string/analog_gadget">
269            <intent-filter>
270                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
271            </intent-filter>
272
273            <meta-data
274                android:name="android.appwidget.oldName"
275                android:value="com.android.deskclock.AnalogAppWidgetProvider" />
276            <meta-data
277                android:name="android.appwidget.provider"
278                android:resource="@xml/analog_appwidget" />
279        </receiver>
280
281        <receiver
282            android:name="com.android.alarmclock.DigitalAppWidgetProvider"
283            android:exported="true"
284            android:label="@string/digital_gadget">
285            <intent-filter>
286                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
287                <action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
288                <action android:name="android.intent.action.DATE_CHANGED" />
289                <action android:name="android.intent.action.LOCALE_CHANGED" />
290                <action android:name="android.intent.action.SCREEN_ON" />
291                <action android:name="android.intent.action.TIME_SET" />
292                <action android:name="android.intent.action.TIMEZONE_CHANGED" />
293                <action android:name="com.android.deskclock.ALARM_CHANGED" />
294                <action android:name="com.android.deskclock.ON_DAY_CHANGE" />
295                <action android:name="com.android.deskclock.WORLD_CITIES_CHANGED" />
296            </intent-filter>
297            <meta-data
298                android:name="android.appwidget.provider"
299                android:resource="@xml/digital_appwidget" />
300        </receiver>
301
302        <service
303            android:name="com.android.alarmclock.DigitalAppWidgetCityService"
304            android:permission="android.permission.BIND_REMOTEVIEWS" />
305
306    </application>
307</manifest>
308