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:
Jason Chiu
2020-04-01 15:40:47 +08:00
parent 9266fe32f7
commit 819abf7f87
10 changed files with 53 additions and 38 deletions

View File

@@ -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}.

View File

@@ -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);
}