1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17 package com.android.server.backup; 18 19 20 import android.content.ContentResolver; 21 import android.os.Handler; 22 import android.provider.Settings; 23 import android.util.KeyValueListParser; 24 import android.util.KeyValueSettingObserver; 25 26 import com.android.internal.annotations.GuardedBy; 27 import com.android.internal.annotations.VisibleForTesting; 28 29 /** 30 * Configure backup and restore agent timeouts. 31 * 32 * <p>These timeout parameters are stored in Settings.Global to be configurable flags with P/H. They 33 * are represented as a comma-delimited key value list. 34 */ 35 public class BackupAgentTimeoutParameters extends KeyValueSettingObserver { 36 @VisibleForTesting 37 public static final String SETTING = Settings.Global.BACKUP_AGENT_TIMEOUT_PARAMETERS; 38 39 @VisibleForTesting 40 public static final String SETTING_KV_BACKUP_AGENT_TIMEOUT_MILLIS = 41 "kv_backup_agent_timeout_millis"; 42 43 @VisibleForTesting 44 public static final String SETTING_FULL_BACKUP_AGENT_TIMEOUT_MILLIS = 45 "full_backup_agent_timeout_millis"; 46 47 @VisibleForTesting 48 public static final String SETTING_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS = 49 "shared_backup_agent_timeout_millis"; 50 51 @VisibleForTesting 52 public static final String SETTING_RESTORE_AGENT_TIMEOUT_MILLIS = 53 "restore_agent_timeout_millis"; 54 55 @VisibleForTesting 56 public static final String SETTING_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS = 57 "restore_agent_finished_timeout_millis"; 58 59 @VisibleForTesting 60 public static final String SETTING_QUOTA_EXCEEDED_TIMEOUT_MILLIS = 61 "quota_exceeded_timeout_millis"; 62 63 // Default values 64 @VisibleForTesting public static final long DEFAULT_KV_BACKUP_AGENT_TIMEOUT_MILLIS = 30 * 1000; 65 66 @VisibleForTesting 67 public static final long DEFAULT_FULL_BACKUP_AGENT_TIMEOUT_MILLIS = 5 * 60 * 1000; 68 69 @VisibleForTesting 70 public static final long DEFAULT_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS = 30 * 60 * 1000; 71 72 @VisibleForTesting public static final long DEFAULT_RESTORE_AGENT_TIMEOUT_MILLIS = 60 * 1000; 73 74 @VisibleForTesting 75 public static final long DEFAULT_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS = 30 * 1000; 76 77 @VisibleForTesting 78 public static final long DEFAULT_QUOTA_EXCEEDED_TIMEOUT_MILLIS = 3 * 1000; 79 80 @GuardedBy("mLock") 81 private long mKvBackupAgentTimeoutMillis; 82 83 @GuardedBy("mLock") 84 private long mFullBackupAgentTimeoutMillis; 85 86 @GuardedBy("mLock") 87 private long mSharedBackupAgentTimeoutMillis; 88 89 @GuardedBy("mLock") 90 private long mRestoreAgentTimeoutMillis; 91 92 @GuardedBy("mLock") 93 private long mRestoreAgentFinishedTimeoutMillis; 94 95 @GuardedBy("mLock") 96 private long mQuotaExceededTimeoutMillis; 97 98 private final Object mLock = new Object(); 99 BackupAgentTimeoutParameters(Handler handler, ContentResolver resolver)100 public BackupAgentTimeoutParameters(Handler handler, ContentResolver resolver) { 101 super(handler, resolver, Settings.Global.getUriFor(SETTING)); 102 } 103 getSettingValue(ContentResolver resolver)104 public String getSettingValue(ContentResolver resolver) { 105 return Settings.Global.getString(resolver, SETTING); 106 } 107 update(KeyValueListParser parser)108 public void update(KeyValueListParser parser) { 109 synchronized (mLock) { 110 mKvBackupAgentTimeoutMillis = 111 parser.getLong( 112 SETTING_KV_BACKUP_AGENT_TIMEOUT_MILLIS, 113 DEFAULT_KV_BACKUP_AGENT_TIMEOUT_MILLIS); 114 mFullBackupAgentTimeoutMillis = 115 parser.getLong( 116 SETTING_FULL_BACKUP_AGENT_TIMEOUT_MILLIS, 117 DEFAULT_FULL_BACKUP_AGENT_TIMEOUT_MILLIS); 118 mSharedBackupAgentTimeoutMillis = 119 parser.getLong( 120 SETTING_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS, 121 DEFAULT_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS); 122 mRestoreAgentTimeoutMillis = 123 parser.getLong( 124 SETTING_RESTORE_AGENT_TIMEOUT_MILLIS, 125 DEFAULT_RESTORE_AGENT_TIMEOUT_MILLIS); 126 mRestoreAgentFinishedTimeoutMillis = 127 parser.getLong( 128 SETTING_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS, 129 DEFAULT_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS); 130 mQuotaExceededTimeoutMillis = 131 parser.getLong( 132 SETTING_QUOTA_EXCEEDED_TIMEOUT_MILLIS, 133 DEFAULT_QUOTA_EXCEEDED_TIMEOUT_MILLIS); 134 } 135 } 136 getKvBackupAgentTimeoutMillis()137 public long getKvBackupAgentTimeoutMillis() { 138 synchronized (mLock) { 139 return mKvBackupAgentTimeoutMillis; 140 } 141 } 142 getFullBackupAgentTimeoutMillis()143 public long getFullBackupAgentTimeoutMillis() { 144 synchronized (mLock) { 145 return mFullBackupAgentTimeoutMillis; 146 } 147 } 148 getSharedBackupAgentTimeoutMillis()149 public long getSharedBackupAgentTimeoutMillis() { 150 synchronized (mLock) { 151 return mSharedBackupAgentTimeoutMillis; 152 } 153 } 154 getRestoreAgentTimeoutMillis()155 public long getRestoreAgentTimeoutMillis() { 156 synchronized (mLock) { 157 return mRestoreAgentTimeoutMillis; 158 } 159 } 160 getRestoreAgentFinishedTimeoutMillis()161 public long getRestoreAgentFinishedTimeoutMillis() { 162 synchronized (mLock) { 163 return mRestoreAgentFinishedTimeoutMillis; 164 } 165 } 166 getQuotaExceededTimeoutMillis()167 public long getQuotaExceededTimeoutMillis() { 168 synchronized (mLock) { 169 return mQuotaExceededTimeoutMillis; 170 } 171 } 172 } 173