168f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller/*
268f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * Copyright (C) 2017 The Android Open Source Project
368f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller *
468f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * Licensed under the Apache License, Version 2.0 (the "License");
568f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * you may not use this file except in compliance with the License.
668f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * You may obtain a copy of the License at
768f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller *
868f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller *      http://www.apache.org/licenses/LICENSE-2.0
968f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller *
1068f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * Unless required by applicable law or agreed to in writing, software
1168f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * distributed under the License is distributed on an "AS IS" BASIS,
1268f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1368f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * See the License for the specific language governing permissions and
1468f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * limitations under the License.
1568f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller */
1668f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
1768f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fullerpackage com.android.server.timezone;
1868f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
19a7d21f8c321ae7149b68625a5c8502abe005ed7bNeil Fullerimport com.android.internal.util.DumpUtils;
20a7d21f8c321ae7149b68625a5c8502abe005ed7bNeil Fuller
21b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fullerimport android.app.timezone.RulesManager;
2268f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fullerimport android.content.Context;
23b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fullerimport android.content.Intent;
2417ee5dbc05424b24377b3ee326de39184cfce290Neil Fullerimport android.os.AsyncTask;
25b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fullerimport android.os.UserHandle;
2668f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
2787b1128ddc44afeafb946a32d63abef68d8b3dc1Neil Fullerimport java.io.PrintWriter;
2868f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fullerimport java.util.concurrent.Executor;
2968f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
3068f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller/**
3168f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller * A single class that implements multiple helper interfaces for use by {@link RulesManagerService}.
3268f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller */
33b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fullerfinal class RulesManagerServiceHelperImpl
34b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        implements PermissionHelper, Executor, RulesManagerIntentHelper {
3568f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
3668f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    private final Context mContext;
3768f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
3868f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    RulesManagerServiceHelperImpl(Context context) {
3968f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller        mContext = context;
4068f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    }
4168f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
4268f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    @Override
4368f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    public void enforceCallerHasPermission(String requiredPermission) {
4468f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller        mContext.enforceCallingPermission(requiredPermission, null /* message */);
4568f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    }
4668f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller
4787b1128ddc44afeafb946a32d63abef68d8b3dc1Neil Fuller    @Override
4887b1128ddc44afeafb946a32d63abef68d8b3dc1Neil Fuller    public boolean checkDumpPermission(String tag, PrintWriter pw) {
49a7d21f8c321ae7149b68625a5c8502abe005ed7bNeil Fuller        return DumpUtils.checkDumpPermission(mContext, tag, pw);
5087b1128ddc44afeafb946a32d63abef68d8b3dc1Neil Fuller    }
5187b1128ddc44afeafb946a32d63abef68d8b3dc1Neil Fuller
5268f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    @Override
5368f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    public void execute(Runnable runnable) {
5417ee5dbc05424b24377b3ee326de39184cfce290Neil Fuller        AsyncTask.execute(runnable);
5568f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller    }
56b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller
57b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    @Override
58b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    public void sendTimeZoneOperationStaged() {
59b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        sendOperationIntent(true /* staged */);
60b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    }
61b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller
62b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    @Override
63b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    public void sendTimeZoneOperationUnstaged() {
64b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        sendOperationIntent(false /* staged */);
65b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    }
66b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller
67b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    private void sendOperationIntent(boolean staged) {
68b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        Intent intent = new Intent(RulesManager.ACTION_RULES_UPDATE_OPERATION);
69b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
70b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        intent.putExtra(RulesManager.EXTRA_OPERATION_STAGED, staged);
71b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller        mContext.sendBroadcastAsUser(intent, UserHandle.SYSTEM);
72b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller    }
73b144227742ada7fd693684a5bd2d53abd8e7c499Neil Fuller
7468f666693a465eb8a66d9252b7b7ac035b9f0b7bNeil Fuller}
75