19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.app.activity;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.AlarmManager;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.TimeZone;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SetTimeZonePermissionsTest extends AndroidTestCase {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String[] mZones;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String mCurrentZone;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private AlarmManager mAlarm;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mZones = TimeZone.getAvailableIDs();
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCurrentZone = TimeZone.getDefault().getID();
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAlarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Verify that non-system processes cannot set the time zone.
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSetTimeZonePermissions() {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Attempt to set several predefined time zones, verifying that the system
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * system default time zone has not actually changed from its prior state
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * after each attempt.
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int max = (mZones.length > 10) ? mZones.length : 10;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("No system-defined time zones - test invalid", max > 0);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < max; i++) {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String tz = mZones[i];
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mAlarm.setTimeZone(tz);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (SecurityException se) {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Expected failure; no need to handle specially since we're
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // about to assert that the test invariant holds: no change
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // to the system time zone.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String newZone = TimeZone.getDefault().getID();
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals("AlarmManager.setTimeZone() succeeded despite lack of permission",
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    mCurrentZone,
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    newZone);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
71