140dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak/* 240dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * Copyright 2016, The Android Open Source Project 340dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * 440dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * Licensed under the Apache License, Version 2.0 (the "License"); 540dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * you may not use this file except in compliance with the License. 640dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * You may obtain a copy of the License at 740dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * 840dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * http://www.apache.org/licenses/LICENSE-2.0 940dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * 1040dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * Unless required by applicable law or agreed to in writing, software 1140dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * distributed under the License is distributed on an "AS IS" BASIS, 1240dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * See the License for the specific language governing permissions and 1440dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak * limitations under the License. 1540dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak */ 1640dca92b53c864672d9defd0fb4007266f45e540Jakub Gielzak 1775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzpackage com.android.managedprovisioning.task; 1875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 1975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzimport android.app.AlarmManager; 2075fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzimport android.content.Context; 2175fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 2275fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzimport com.android.internal.app.LocalePicker; 23f7a9eea8fe577f2f5edbbe6e73891a54351286c6Benjamin Franzimport com.android.managedprovisioning.common.ProvisionLogger; 2475fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzimport com.android.managedprovisioning.R; 2575fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams; 2675fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 2775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzimport java.util.Locale; 2875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 2975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz/** 3020444af851c6374473223e4a3f6c31e98fa87f49Benjamin Franz * Initialization of locale and timezone. 3175fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz */ 3275fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franzpublic class DeviceOwnerInitializeProvisioningTask extends AbstractProvisioningTask { 3375fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 3475fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz public DeviceOwnerInitializeProvisioningTask(Context context, ProvisioningParams params, 3575fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz Callback callback) { 3675fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz super(context, params, callback); 3775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 3875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 3975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz @Override 4075fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz public int getStatusMsgId() { 4175fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz return R.string.progress_initialize; 4275fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 4375fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 4475fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz @Override 4575fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz public void run(int userId) { 4675fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz setTimeAndTimezone(mProvisioningParams.timeZone, mProvisioningParams.localTime); 4775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz setLocale(mProvisioningParams.locale); 4875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 4975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz success(); 5075fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 5175fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 5275fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz private void setTimeAndTimezone(String timeZone, long localTime) { 5375fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz try { 5475fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz final AlarmManager alarmManager = mContext.getSystemService(AlarmManager.class); 5575fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz if (timeZone != null) { 5675fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz alarmManager.setTimeZone(timeZone); 5775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 5875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz if (localTime > 0) { 5975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz alarmManager.setTime(localTime); 6075fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 6175fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } catch (Exception e) { 6275fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz ProvisionLogger.loge("Alarm manager failed to set the system time/timezone.", e); 6375fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz // Do not stop provisioning process, but ignore this error. 6475fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 6575fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 6675fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz 6775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz private void setLocale(Locale locale) { 6875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz if (locale == null || locale.equals(Locale.getDefault())) { 6975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz return; 7075fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 7175fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz try { 7275fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz // If locale is different from current locale this results in a configuration change, 7375fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz // which will trigger the restarting of the activity. 7475fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz LocalePicker.updateLocale(locale); 7575fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } catch (Exception e) { 7675fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz ProvisionLogger.loge("Failed to set the system locale.", e); 7775fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz // Do not stop provisioning process, but ignore this error. 7875fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 7975fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz } 8075fa7df02a3832f7ab99545ccd81cec9129ddf3dBenjamin Franz} 81