blob: 7f9d505573ce38fac0019207759bff0ad8f43457 [file] [log] [blame]
package com.android.nfc;
import android.app.KeyguardManager;
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.PowerManager;
import android.view.Display;
import androidx.annotation.VisibleForTesting;
/**
* Helper class for determining the current screen state for NFC activities.
*/
class ScreenStateHelper {
static final int SCREEN_STATE_UNKNOWN = 0x00;
static final int SCREEN_STATE_OFF_UNLOCKED = 0x01;
static final int SCREEN_STATE_OFF_LOCKED = 0x02;
static final int SCREEN_STATE_ON_LOCKED = 0x04;
static final int SCREEN_STATE_ON_UNLOCKED = 0x08;
//Polling mask
static final int SCREEN_POLLING_TAG_MASK = 0x10;
static final int SCREEN_POLLING_READER_MASK = 0x40;
private final PowerManager mPowerManager;
private final KeyguardManager mKeyguardManager;
private final DisplayManager mDisplayManager;
ScreenStateHelper(Context context) {
this(context.getSystemService(KeyguardManager.class),
context.getSystemService(PowerManager.class),
context.getSystemService(DisplayManager.class));
}
private boolean isDisplayOn() {
Display display = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
return display.getState() == Display.STATE_ON;
}
int checkScreenState(boolean checkDisplayState) {
if (!mPowerManager.isInteractive() || (checkDisplayState && !isDisplayOn())) {
if (NfcInjector.getInstance().isDeviceLocked()) {
return SCREEN_STATE_OFF_LOCKED;
} else {
return SCREEN_STATE_OFF_UNLOCKED;
}
} else if (NfcInjector.getInstance().isDeviceLocked()) {
return SCREEN_STATE_ON_LOCKED;
} else {
return SCREEN_STATE_ON_UNLOCKED;
}
}
int checkScreenStateProvisionMode() {
if (!mPowerManager.isInteractive()) {
if (NfcInjector.getInstance().isDeviceLocked()) {
return SCREEN_STATE_OFF_LOCKED;
} else {
return SCREEN_STATE_OFF_UNLOCKED;
}
} else if (NfcInjector.getInstance().isDeviceLocked()) {
return SCREEN_STATE_ON_LOCKED;
} else {
return SCREEN_STATE_ON_UNLOCKED;
}
}
/**
* For debugging only - no i18n
*/
static String screenStateToString(int screenState) {
switch (screenState) {
case SCREEN_STATE_OFF_LOCKED:
return "OFF_LOCKED";
case SCREEN_STATE_ON_LOCKED:
return "ON_LOCKED";
case SCREEN_STATE_ON_UNLOCKED:
return "ON_UNLOCKED";
case SCREEN_STATE_OFF_UNLOCKED:
return "OFF_UNLOCKED";
default:
return "UNKNOWN";
}
}
static int screenStateToProtoEnum(int screenState) {
switch (screenState) {
case SCREEN_STATE_OFF_LOCKED:
return NfcServiceDumpProto.SCREEN_STATE_OFF_LOCKED;
case SCREEN_STATE_ON_LOCKED:
return NfcServiceDumpProto.SCREEN_STATE_ON_LOCKED;
case SCREEN_STATE_ON_UNLOCKED:
return NfcServiceDumpProto.SCREEN_STATE_ON_UNLOCKED;
case SCREEN_STATE_OFF_UNLOCKED:
return NfcServiceDumpProto.SCREEN_STATE_OFF_UNLOCKED;
default:
return NfcServiceDumpProto.SCREEN_STATE_UNKNOWN;
}
}
@VisibleForTesting
ScreenStateHelper(KeyguardManager keyguardManager, PowerManager powerManager,
DisplayManager displayManager) {
mKeyguardManager = keyguardManager;
mPowerManager = powerManager;
mDisplayManager = displayManager;
}
}