Merge "Remove the disableSelf() api" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-16 00:49:21 +00:00
committed by Android (Google) Code Review
7 changed files with 69 additions and 45 deletions

View File

@@ -6267,7 +6267,6 @@ package android.service.attention {
public abstract class AttentionService extends android.app.Service {
ctor public AttentionService();
method public final void disableSelf();
method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
method public abstract void onCancelAttentionCheck(@NonNull android.service.attention.AttentionService.AttentionCallback);
method public abstract void onCheckAttention(@NonNull android.service.attention.AttentionService.AttentionCallback);

View File

@@ -46,13 +46,6 @@ public abstract class AttentionManagerInternal {
*/
public abstract void cancelAttentionCheck(AttentionCallbackInternal callback);
/**
* Disables the dependants.
*
* Example: called if the service does not have sufficient permissions to perform the task.
*/
public abstract void disableSelf();
/** Internal interface for attention callback. */
public abstract static class AttentionCallbackInternal {
/**

View File

@@ -21,13 +21,11 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.Service;
import android.attention.AttentionManagerInternal;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import com.android.internal.util.Preconditions;
import com.android.server.LocalServices;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -131,19 +129,6 @@ public abstract class AttentionService extends Service {
return null;
}
/**
* Disables the dependants.
*
* Example: called if the service does not have sufficient permissions to perform the task.
*/
public final void disableSelf() {
AttentionManagerInternal attentionManager = LocalServices.getService(
AttentionManagerInternal.class);
if (attentionManager != null) {
attentionManager.disableSelf();
}
}
/**
* Checks the user attention and calls into the provided callback.
*

View File

@@ -17,7 +17,6 @@
package com.android.server.attention;
import static android.provider.DeviceConfig.NAMESPACE_ATTENTION_MANAGER_SERVICE;
import static android.provider.Settings.System.ADAPTIVE_SLEEP;
import static android.service.attention.AttentionService.ATTENTION_FAILURE_CANCELLED;
import static android.service.attention.AttentionService.ATTENTION_FAILURE_UNKNOWN;
@@ -47,7 +46,6 @@ import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.service.attention.AttentionService;
import android.service.attention.AttentionService.AttentionFailureCodes;
import android.service.attention.AttentionService.AttentionSuccessCodes;
@@ -275,19 +273,6 @@ public class AttentionManagerService extends SystemService {
}
}
/** Disables service dependants. */
private void disableSelf() {
final long identity = Binder.clearCallingIdentity();
try {
if (DEBUG) {
Slog.d(LOG_TAG, "Disabling self.");
}
Settings.System.putInt(mContext.getContentResolver(), ADAPTIVE_SLEEP, 0);
} finally {
Binder.restoreCallingIdentity(identity);
}
}
@GuardedBy("mLock")
private void freeIfInactiveLocked() {
// If we are called here, it means someone used the API again - reset the timer then.
@@ -418,11 +403,6 @@ public class AttentionManagerService extends SystemService {
public void cancelAttentionCheck(AttentionCallbackInternal callbackInternal) {
AttentionManagerService.this.cancelAttentionCheck(callbackInternal);
}
@Override
public void disableSelf() {
AttentionManagerService.this.disableSelf();
}
}
private static final class AttentionCheckCache {

View File

@@ -20752,8 +20752,16 @@ public class PackageManagerService extends IPackageManager.Stub
}
@Override
public String getAttentionServicePackageName() {
return mContext.getString(R.string.config_defaultAttentionService);
public @Nullable String getAttentionServicePackageName() {
final String flattenedComponentName =
mContext.getString(R.string.config_defaultAttentionService);
if (flattenedComponentName != null) {
ComponentName componentName = ComponentName.unflattenFromString(flattenedComponentName);
if (componentName != null && componentName.getPackageName() != null) {
return componentName.getPackageName();
}
}
return null;
}
private @Nullable String getDocumenterPackageName() {

View File

@@ -16,9 +16,14 @@
package com.android.server.power;
import static android.provider.Settings.System.ADAPTIVE_SLEEP;
import android.Manifest;
import android.attention.AttentionManagerInternal;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.os.Handler;
import android.os.PowerManager;
@@ -83,6 +88,12 @@ public class AttentionDetector {
@VisibleForTesting
protected AttentionManagerInternal mAttentionManager;
@VisibleForTesting
protected PackageManager mPackageManager;
@VisibleForTesting
protected ContentResolver mContentResolver;
/**
* Current wakefulness of the device. {@see PowerManagerInternal}
*/
@@ -137,6 +148,8 @@ public class AttentionDetector {
public void systemReady(Context context) {
updateEnabledFromSettings(context);
mPackageManager = context.getPackageManager();
mContentResolver = context.getContentResolver();
mAttentionManager = LocalServices.getService(AttentionManagerInternal.class);
mMaximumExtensionMillis = context.getResources().getInteger(
com.android.internal.R.integer.config_attentionMaximumExtension);
@@ -162,6 +175,11 @@ public class AttentionDetector {
return nextScreenDimming;
}
if (!serviceHasSufficientPermissions()) {
Settings.System.putInt(mContentResolver, ADAPTIVE_SLEEP, 0);
return nextScreenDimming;
}
final long now = SystemClock.uptimeMillis();
final long whenToCheck = nextScreenDimming - getAttentionTimeout();
final long whenToStopExtending = mLastUserActivityTime + mMaximumExtensionMillis;
@@ -263,6 +281,18 @@ public class AttentionDetector {
return mAttentionManager != null && mAttentionManager.isAttentionServiceSupported();
}
/**
* Returns {@code true} if the attention service has sufficient permissions, disables the
* depending features otherwise.
*/
@VisibleForTesting
boolean serviceHasSufficientPermissions() {
final String attentionPackage = mPackageManager.getAttentionServicePackageName();
return attentionPackage != null && mPackageManager.checkPermission(
Manifest.permission.CAMERA, attentionPackage)
== PackageManager.PERMISSION_GRANTED;
}
public void dump(PrintWriter pw) {
pw.print("AttentionDetector:");
pw.print(" mMaximumExtensionMillis=" + mMaximumExtensionMillis);

View File

@@ -29,6 +29,7 @@ import static org.mockito.Mockito.when;
import android.attention.AttentionManagerInternal;
import android.attention.AttentionManagerInternal.AttentionCallbackInternal;
import android.content.pm.PackageManager;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.SystemClock;
@@ -48,6 +49,8 @@ import org.mockito.MockitoAnnotations;
@SmallTest
public class AttentionDetectorTest extends AndroidTestCase {
@Mock
private PackageManager mPackageManager;
@Mock
private AttentionManagerInternal mAttentionManagerInternal;
@Mock
@@ -60,6 +63,9 @@ public class AttentionDetectorTest extends AndroidTestCase {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mPackageManager.getAttentionServicePackageName()).thenReturn("com.google.android.as");
when(mPackageManager.checkPermission(any(), any())).thenReturn(
PackageManager.PERMISSION_GRANTED);
when(mAttentionManagerInternal.checkAttention(anyLong(), any()))
.thenReturn(true);
mAttentionDetector = new TestableAttentionDetector();
@@ -107,6 +113,27 @@ public class AttentionDetectorTest extends AndroidTestCase {
assertThat(mNextDimming).isEqualTo(when);
}
@Test
public void testOnUserActivity_doesntCheckIfNotSufficientPermissions() {
when(mPackageManager.checkPermission(any(), any())).thenReturn(
PackageManager.PERMISSION_DENIED);
long when = registerAttention();
verify(mAttentionManagerInternal, never()).checkAttention(anyLong(), any());
assertThat(mNextDimming).isEqualTo(when);
}
@Test
public void testOnUserActivity_disablesSettingIfNotSufficientPermissions() {
when(mPackageManager.checkPermission(any(), any())).thenReturn(
PackageManager.PERMISSION_DENIED);
registerAttention();
boolean enabled = Settings.System.getIntForUser(getContext().getContentResolver(),
Settings.System.ADAPTIVE_SLEEP, 0, UserHandle.USER_CURRENT) == 1;
assertFalse(enabled);
}
@Test
public void testOnUserActivity_doesntCrashIfNoAttentionService() {
mAttentionManagerInternal = null;
@@ -211,6 +238,8 @@ public class AttentionDetectorTest extends AndroidTestCase {
TestableAttentionDetector() {
super(AttentionDetectorTest.this.mOnUserAttention, new Object());
mAttentionManager = mAttentionManagerInternal;
mPackageManager = AttentionDetectorTest.this.mPackageManager;
mContentResolver = getContext().getContentResolver();
mMaximumExtensionMillis = 10000L;
}