Merge "Log dream_setting_changed to statsd" into udc-qpr-dev
This commit is contained in:
@@ -28,6 +28,7 @@ import android.content.res.Resources;
|
|||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.service.dreams.DreamService;
|
import android.service.dreams.DreamService;
|
||||||
import android.service.dreams.IDreamManager;
|
import android.service.dreams.IDreamManager;
|
||||||
@@ -35,6 +36,7 @@ import android.util.ArraySet;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
import com.android.internal.util.FrameworkStatsLog;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
@@ -114,6 +116,26 @@ public class DreamBackend {
|
|||||||
private static final int SCREENSAVER_HOME_CONTROLS_ENABLED_DEFAULT = 1;
|
private static final int SCREENSAVER_HOME_CONTROLS_ENABLED_DEFAULT = 1;
|
||||||
private static final int LOCKSCREEN_SHOW_CONTROLS_DEFAULT = 0;
|
private static final int LOCKSCREEN_SHOW_CONTROLS_DEFAULT = 0;
|
||||||
|
|
||||||
|
private static final int DS_TYPE_ENABLED = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__DREAM_SETTING_TYPE__DREAM_SETTING_TYPE_ENABLED;
|
||||||
|
private static final int DS_TYPE_WHEN_TO_DREAM = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__DREAM_SETTING_TYPE__DREAM_SETTING_TYPE_WHEN_TO_DREAM;
|
||||||
|
private static final int DS_TYPE_DREAM_COMPONENT = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__DREAM_SETTING_TYPE__DREAM_SETTING_TYPE_DREAM_COMPONENT;
|
||||||
|
private static final int DS_TYPE_SHOW_ADDITIONAL_INFO = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__DREAM_SETTING_TYPE__DREAM_SETTING_TYPE_SHOW_ADDITIONAL_INFO;
|
||||||
|
private static final int DS_TYPE_SHOW_HOME_CONTROLS = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__DREAM_SETTING_TYPE__DREAM_SETTING_TYPE_SHOW_HOME_CONTROLS;
|
||||||
|
|
||||||
|
private static final int WHEN_TO_DREAM_UNSPECIFIED = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_UNSPECIFIED;
|
||||||
|
private static final int WHEN_TO_DREAM_CHARGING = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_WHILE_CHARGING_ONLY;
|
||||||
|
private static final int WHEN_TO_DREAM_DOCKED = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_WHILE_DOCKED_ONLY;
|
||||||
|
private static final int WHEN_TO_DREAM_CHARGING_OR_DOCKED = FrameworkStatsLog
|
||||||
|
.DREAM_SETTING_CHANGED__WHEN_TO_DREAM__WHEN_TO_DREAM_EITHER_CHARGING_OR_DOCKED;
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final IDreamManager mDreamManager;
|
private final IDreamManager mDreamManager;
|
||||||
private final DreamInfoComparator mComparator;
|
private final DreamInfoComparator mComparator;
|
||||||
@@ -121,6 +143,7 @@ public class DreamBackend {
|
|||||||
private final boolean mDreamsActivatedOnSleepByDefault;
|
private final boolean mDreamsActivatedOnSleepByDefault;
|
||||||
private final boolean mDreamsActivatedOnDockByDefault;
|
private final boolean mDreamsActivatedOnDockByDefault;
|
||||||
private final Set<ComponentName> mDisabledDreams;
|
private final Set<ComponentName> mDisabledDreams;
|
||||||
|
private final List<String> mLoggableDreamPrefixes;
|
||||||
private Set<Integer> mSupportedComplications;
|
private Set<Integer> mSupportedComplications;
|
||||||
private static DreamBackend sInstance;
|
private static DreamBackend sInstance;
|
||||||
|
|
||||||
@@ -148,6 +171,8 @@ public class DreamBackend {
|
|||||||
com.android.internal.R.array.config_disabledDreamComponents))
|
com.android.internal.R.array.config_disabledDreamComponents))
|
||||||
.map(ComponentName::unflattenFromString)
|
.map(ComponentName::unflattenFromString)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
mLoggableDreamPrefixes = Arrays.stream(resources.getStringArray(
|
||||||
|
com.android.internal.R.array.config_loggable_dream_prefixes)).toList();
|
||||||
|
|
||||||
mSupportedComplications = Arrays.stream(resources.getIntArray(
|
mSupportedComplications = Arrays.stream(resources.getIntArray(
|
||||||
com.android.internal.R.array.config_supportedDreamComplications))
|
com.android.internal.R.array.config_supportedDreamComplications))
|
||||||
@@ -282,6 +307,8 @@ public class DreamBackend {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logDreamSettingChangeToStatsd(DS_TYPE_WHEN_TO_DREAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets all complications which have been enabled by the user. */
|
/** Gets all complications which have been enabled by the user. */
|
||||||
@@ -304,12 +331,14 @@ public class DreamBackend {
|
|||||||
public void setComplicationsEnabled(boolean enabled) {
|
public void setComplicationsEnabled(boolean enabled) {
|
||||||
Settings.Secure.putInt(mContext.getContentResolver(),
|
Settings.Secure.putInt(mContext.getContentResolver(),
|
||||||
Settings.Secure.SCREENSAVER_COMPLICATIONS_ENABLED, enabled ? 1 : 0);
|
Settings.Secure.SCREENSAVER_COMPLICATIONS_ENABLED, enabled ? 1 : 0);
|
||||||
|
logDreamSettingChangeToStatsd(DS_TYPE_SHOW_ADDITIONAL_INFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets whether home controls are enabled by the user on the dream */
|
/** Sets whether home controls are enabled by the user on the dream */
|
||||||
public void setHomeControlsEnabled(boolean enabled) {
|
public void setHomeControlsEnabled(boolean enabled) {
|
||||||
Settings.Secure.putInt(mContext.getContentResolver(),
|
Settings.Secure.putInt(mContext.getContentResolver(),
|
||||||
Settings.Secure.SCREENSAVER_HOME_CONTROLS_ENABLED, enabled ? 1 : 0);
|
Settings.Secure.SCREENSAVER_HOME_CONTROLS_ENABLED, enabled ? 1 : 0);
|
||||||
|
logDreamSettingChangeToStatsd(DS_TYPE_SHOW_HOME_CONTROLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets whether home controls button is enabled on the dream */
|
/** Gets whether home controls button is enabled on the dream */
|
||||||
@@ -353,6 +382,7 @@ public class DreamBackend {
|
|||||||
public void setEnabled(boolean value) {
|
public void setEnabled(boolean value) {
|
||||||
logd("setEnabled(%s)", value);
|
logd("setEnabled(%s)", value);
|
||||||
setBoolean(Settings.Secure.SCREENSAVER_ENABLED, value);
|
setBoolean(Settings.Secure.SCREENSAVER_ENABLED, value);
|
||||||
|
logDreamSettingChangeToStatsd(DS_TYPE_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isActivatedOnDock() {
|
public boolean isActivatedOnDock() {
|
||||||
@@ -391,6 +421,7 @@ public class DreamBackend {
|
|||||||
try {
|
try {
|
||||||
ComponentName[] dreams = {dream};
|
ComponentName[] dreams = {dream};
|
||||||
mDreamManager.setDreamComponents(dream == null ? null : dreams);
|
mDreamManager.setDreamComponents(dream == null ? null : dreams);
|
||||||
|
logDreamSettingChangeToStatsd(DS_TYPE_DREAM_COMPONENT);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.w(TAG, "Failed to set active dream to " + dream, e);
|
Log.w(TAG, "Failed to set active dream to " + dream, e);
|
||||||
}
|
}
|
||||||
@@ -461,6 +492,68 @@ public class DreamBackend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void logDreamSettingChangeToStatsd(int dreamSettingType) {
|
||||||
|
FrameworkStatsLog.write(
|
||||||
|
FrameworkStatsLog.DREAM_SETTING_CHANGED, /*atom_tag*/
|
||||||
|
UserHandle.myUserId(), /*uid*/
|
||||||
|
isEnabled(), /*enabled*/
|
||||||
|
getActiveDreamComponentForStatsd(), /*dream_component*/
|
||||||
|
getWhenToDreamForStatsd(), /*when_to_dream*/
|
||||||
|
getComplicationsEnabled(), /*show_additional_info*/
|
||||||
|
getHomeControlsEnabled(), /*show_home_controls*/
|
||||||
|
dreamSettingType /*dream_setting_type*/
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the user selected dream component in string format for stats logging. If the dream
|
||||||
|
* component is not loggable, returns "other".
|
||||||
|
*/
|
||||||
|
private String getActiveDreamComponentForStatsd() {
|
||||||
|
final ComponentName activeDream = getActiveDream();
|
||||||
|
if (activeDream == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
final String component = activeDream.flattenToShortString();
|
||||||
|
if (isLoggableDreamComponentForStatsd(component)) {
|
||||||
|
return component;
|
||||||
|
} else {
|
||||||
|
return "other";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the dream component is loggable. Only components from the predefined packages are
|
||||||
|
* allowed to be logged for privacy.
|
||||||
|
*/
|
||||||
|
private boolean isLoggableDreamComponentForStatsd(String component) {
|
||||||
|
for (int i = 0; i < mLoggableDreamPrefixes.size(); i++) {
|
||||||
|
if (component.startsWith(mLoggableDreamPrefixes.get(i))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the enum of "when to dream" setting for statsd logging.
|
||||||
|
*/
|
||||||
|
private int getWhenToDreamForStatsd() {
|
||||||
|
switch (getWhenToDreamSetting()) {
|
||||||
|
case WHILE_CHARGING:
|
||||||
|
return WHEN_TO_DREAM_CHARGING;
|
||||||
|
case WHILE_DOCKED:
|
||||||
|
return WHEN_TO_DREAM_DOCKED;
|
||||||
|
case EITHER:
|
||||||
|
return WHEN_TO_DREAM_CHARGING_OR_DOCKED;
|
||||||
|
case NEVER:
|
||||||
|
default:
|
||||||
|
return WHEN_TO_DREAM_UNSPECIFIED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class DreamInfoComparator implements Comparator<DreamInfo> {
|
private static class DreamInfoComparator implements Comparator<DreamInfo> {
|
||||||
private final ComponentName mDefaultDream;
|
private final ComponentName mDefaultDream;
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,9 @@ public final class DreamBackendTest {
|
|||||||
when(res.getStringArray(
|
when(res.getStringArray(
|
||||||
com.android.internal.R.array.config_disabledDreamComponents)).thenReturn(
|
com.android.internal.R.array.config_disabledDreamComponents)).thenReturn(
|
||||||
new String[]{});
|
new String[]{});
|
||||||
|
when(res.getStringArray(
|
||||||
|
com.android.internal.R.array.config_loggable_dream_prefixes)).thenReturn(
|
||||||
|
new String[]{});
|
||||||
mBackend = new DreamBackend(mContext);
|
mBackend = new DreamBackend(mContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user