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