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 import android.content.ContentResolver; 20 import android.os.Handler; 21 import android.provider.Settings; 22 import android.util.KeyValueListParser; 23 import android.util.KeyValueSettingObserver; 24 import android.util.Slog; 25 import com.android.internal.annotations.GuardedBy; 26 import com.android.internal.annotations.VisibleForTesting; 27 28 /** 29 * Configure backup and restore agent timeouts. 30 * 31 * <p>These timeout parameters are stored in Settings.Global to be configurable flags with P/H. They 32 * are represented as a comma-delimited key value list. 33 */ 34 public class BackupAgentTimeoutParameters extends KeyValueSettingObserver { 35 private static final String TAG = "BackupAgentTimeout"; 36 37 @VisibleForTesting 38 public static final String SETTING = Settings.Global.BACKUP_AGENT_TIMEOUT_PARAMETERS; 39 40 @VisibleForTesting 41 public static final String SETTING_KV_BACKUP_AGENT_TIMEOUT_MILLIS = 42 "kv_backup_agent_timeout_millis"; 43 44 @VisibleForTesting 45 public static final String SETTING_FULL_BACKUP_AGENT_TIMEOUT_MILLIS = 46 "full_backup_agent_timeout_millis"; 47 48 @VisibleForTesting 49 public static final String SETTING_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS = 50 "shared_backup_agent_timeout_millis"; 51 52 @VisibleForTesting 53 public static final String SETTING_RESTORE_AGENT_TIMEOUT_MILLIS = 54 "restore_agent_timeout_millis"; 55 56 @VisibleForTesting 57 public static final String SETTING_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS = 58 "restore_agent_finished_timeout_millis"; 59 60 // Default values 61 @VisibleForTesting public static final long DEFAULT_KV_BACKUP_AGENT_TIMEOUT_MILLIS = 30 * 1000; 62 63 @VisibleForTesting 64 public static final long DEFAULT_FULL_BACKUP_AGENT_TIMEOUT_MILLIS = 5 * 60 * 1000; 65 66 @VisibleForTesting 67 public static final long DEFAULT_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS = 30 * 60 * 1000; 68 69 @VisibleForTesting public static final long DEFAULT_RESTORE_AGENT_TIMEOUT_MILLIS = 60 * 1000; 70 71 @VisibleForTesting 72 public static final long DEFAULT_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS = 30 * 1000; 73 74 @GuardedBy("mLock") 75 private long mKvBackupAgentTimeoutMillis; 76 77 @GuardedBy("mLock") 78 private long mFullBackupAgentTimeoutMillis; 79 80 @GuardedBy("mLock") 81 private long mSharedBackupAgentTimeoutMillis; 82 83 @GuardedBy("mLock") 84 private long mRestoreAgentTimeoutMillis; 85 86 @GuardedBy("mLock") 87 private long mRestoreAgentFinishedTimeoutMillis; 88 89 private final Object mLock = new Object(); 90 91 public BackupAgentTimeoutParameters(Handler handler, ContentResolver resolver) { 92 super(handler, resolver, Settings.Global.getUriFor(SETTING)); 93 } 94 95 public String getSettingValue(ContentResolver resolver) { 96 return Settings.Global.getString(resolver, SETTING); 97 } 98 99 public void update(KeyValueListParser parser) { 100 synchronized (mLock) { 101 mKvBackupAgentTimeoutMillis = 102 parser.getLong( 103 SETTING_KV_BACKUP_AGENT_TIMEOUT_MILLIS, 104 DEFAULT_KV_BACKUP_AGENT_TIMEOUT_MILLIS); 105 mFullBackupAgentTimeoutMillis = 106 parser.getLong( 107 SETTING_FULL_BACKUP_AGENT_TIMEOUT_MILLIS, 108 DEFAULT_FULL_BACKUP_AGENT_TIMEOUT_MILLIS); 109 mSharedBackupAgentTimeoutMillis = 110 parser.getLong( 111 SETTING_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS, 112 DEFAULT_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS); 113 mRestoreAgentTimeoutMillis = 114 parser.getLong( 115 SETTING_RESTORE_AGENT_TIMEOUT_MILLIS, 116 DEFAULT_RESTORE_AGENT_TIMEOUT_MILLIS); 117 mRestoreAgentFinishedTimeoutMillis = 118 parser.getLong( 119 SETTING_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS, 120 DEFAULT_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS); 121 } 122 } 123 124 public long getKvBackupAgentTimeoutMillis() { 125 synchronized (mLock) { 126 if (BackupManagerService.DEBUG_SCHEDULING) { 127 Slog.v(TAG, "getKvBackupAgentTimeoutMillis(): " + mKvBackupAgentTimeoutMillis); 128 } 129 return mKvBackupAgentTimeoutMillis; 130 } 131 } 132 133 public long getFullBackupAgentTimeoutMillis() { 134 synchronized (mLock) { 135 if (BackupManagerService.DEBUG_SCHEDULING) { 136 Slog.v(TAG, "getFullBackupAgentTimeoutMillis(): " + mFullBackupAgentTimeoutMillis); 137 } 138 return mFullBackupAgentTimeoutMillis; 139 } 140 } 141 142 public long getSharedBackupAgentTimeoutMillis() { 143 synchronized (mLock) { 144 if (BackupManagerService.DEBUG_SCHEDULING) { 145 Slog.v( 146 TAG, 147 "getSharedBackupAgentTimeoutMillis(): " + mSharedBackupAgentTimeoutMillis); 148 } 149 return mSharedBackupAgentTimeoutMillis; 150 } 151 } 152 153 public long getRestoreAgentTimeoutMillis() { 154 synchronized (mLock) { 155 if (BackupManagerService.DEBUG_SCHEDULING) { 156 Slog.v(TAG, "getRestoreAgentTimeoutMillis(): " + mRestoreAgentTimeoutMillis); 157 } 158 return mRestoreAgentTimeoutMillis; 159 } 160 } 161 162 public long getRestoreAgentFinishedTimeoutMillis() { 163 synchronized (mLock) { 164 if (BackupManagerService.DEBUG_SCHEDULING) { 165 Slog.v( 166 TAG, 167 "getRestoreAgentFinishedTimeoutMillis(): " 168 + mRestoreAgentFinishedTimeoutMillis); 169 } 170 return mRestoreAgentFinishedTimeoutMillis; 171 } 172 } 173 } 174