blob: fe5c2da4c6d1b6a0e88ce03b0487f1da63ef8217 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.content;
import android.app.usage.UsageStatsManagerInternal;
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
import android.os.UserHandle;
import com.android.server.LocalServices;
/**
* Helper to listen for app idle and charging status changes and restart backed off
* sync operations.
*/
class AppIdleMonitor extends AppIdleStateChangeListener {
private final SyncManager mSyncManager;
private final UsageStatsManagerInternal mUsageStats;
private boolean mAppIdleParoleOn;
AppIdleMonitor(SyncManager syncManager) {
mSyncManager = syncManager;
mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
mAppIdleParoleOn = mUsageStats.isAppIdleParoleOn();
mUsageStats.addAppIdleStateChangeListener(this);
}
void setAppIdleParoleOn(boolean appIdleParoleOn) {
if (mAppIdleParoleOn == appIdleParoleOn) {
return;
}
mAppIdleParoleOn = appIdleParoleOn;
if (mAppIdleParoleOn) {
mSyncManager.onAppNotIdle(null, UserHandle.USER_ALL);
}
}
boolean isAppIdle(String packageName, int userId) {
return !mAppIdleParoleOn && mUsageStats.isAppIdle(packageName, userId);
}
@Override
public void onAppIdleStateChanged(String packageName, int userId, boolean idle) {
// Don't care if the app is becoming idle
if (idle) return;
mSyncManager.onAppNotIdle(packageName, userId);
}
@Override
public void onParoleStateChanged(boolean isParoleOn) {
setAppIdleParoleOn(isParoleOn);
}
}