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