Refine metrics log in infrastructure
- Add interfaces to set/get metrics category in BasePreferenceController for descendants having a chance to get it. - Set metrics category in DashboardFragment - Automatically log metrics in onPreferenceChange of TogglePreferenceController - Add support for TwoStateButtonPreference in TogglePreferenceController to make the preference generic Bug: 137559984 Test: robotest Change-Id: Ia7e0d24a3db1991b18e0286d9894570fa71247a3
This commit is contained in:
@@ -124,6 +124,7 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
|
||||
private boolean mIsForWork;
|
||||
@Nullable
|
||||
private UserHandle mWorkProfileUser;
|
||||
private int mMetricsCategory;
|
||||
|
||||
/**
|
||||
* Instantiate a controller as specified controller type and user-defined key.
|
||||
@@ -398,11 +399,27 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
|
||||
* This won't block UI thread however has similar side effect. Please use it if you
|
||||
* want to avoid janky animation(i.e. new preference is added in the middle of page).
|
||||
*
|
||||
* This music be used in {@link BasePreferenceController}
|
||||
* This must be used in {@link BasePreferenceController}
|
||||
*/
|
||||
public interface UiBlocker {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the metrics category of the parent fragment.
|
||||
*
|
||||
* Called by DashboardFragment#onAttach
|
||||
*/
|
||||
public void setMetricsCategory(int metricsCategory) {
|
||||
mMetricsCategory = metricsCategory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the metrics category of the parent fragment.
|
||||
*/
|
||||
protected int getMetricsCategory() {
|
||||
return mMetricsCategory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Non-{@code null} {@link UserHandle} when a work profile is enabled.
|
||||
* Otherwise {@code null}.
|
||||
|
@@ -18,8 +18,10 @@ import android.content.Context;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.slices.SliceData;
|
||||
import com.android.settings.widget.MasterSwitchPreference;
|
||||
import com.android.settings.widget.TwoStateButtonPreference;
|
||||
|
||||
/**
|
||||
* Abstract class that consolidates logic for updating toggle controllers.
|
||||
@@ -54,6 +56,8 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle
|
||||
((TwoStatePreference) preference).setChecked(isChecked());
|
||||
} else if (preference instanceof MasterSwitchPreference) {
|
||||
((MasterSwitchPreference) preference).setChecked(isChecked());
|
||||
} else if (preference instanceof TwoStateButtonPreference) {
|
||||
((TwoStateButtonPreference) preference).setChecked(isChecked());
|
||||
} else {
|
||||
refreshSummary(preference);
|
||||
}
|
||||
@@ -61,6 +65,12 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle
|
||||
|
||||
@Override
|
||||
public final boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
// TwoStatePreference is a regular preference and can be handled by DashboardFragment
|
||||
if (preference instanceof MasterSwitchPreference
|
||||
|| preference instanceof TwoStateButtonPreference) {
|
||||
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
|
||||
.logClickedPreference(preference, getMetricsCategory());
|
||||
}
|
||||
return setChecked((boolean) newValue);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user