Add a way to suppress injected tiles for OEMs
Create a config resource for OEMs to add suppressed tile's key, then DashboardFragment will filter related tiles out from Settings. OEMs can use this way to suppress security patch injected tile if they don't use Google OTA. Fixes: 130734771 Test: visual, robotests Change-Id: I4cab79c8672048fa543d39b2a8f38ffe338189c8
This commit is contained in:
@@ -363,4 +363,7 @@
|
|||||||
|
|
||||||
<!-- Grayscale settings intent -->
|
<!-- Grayscale settings intent -->
|
||||||
<string name="config_grayscale_settings_intent" translate="false"></string>
|
<string name="config_grayscale_settings_intent" translate="false"></string>
|
||||||
|
|
||||||
|
<!-- List containing the injected tile keys which are suppressed. -->
|
||||||
|
<string-array name="config_suppress_injected_tile_keys" translatable="false"/>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -150,6 +150,9 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean displayTile(Tile tile) {
|
protected boolean displayTile(Tile tile) {
|
||||||
|
if (!super.displayTile(tile)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (mAccountType == null) {
|
if (mAccountType == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -24,12 +24,14 @@ import android.util.ArrayMap;
|
|||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.CallSuper;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceGroup;
|
import androidx.preference.PreferenceGroup;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.PreferenceControllerListHelper;
|
import com.android.settings.core.PreferenceControllerListHelper;
|
||||||
@@ -43,6 +45,7 @@ import com.android.settingslib.drawer.DashboardCategory;
|
|||||||
import com.android.settingslib.drawer.Tile;
|
import com.android.settingslib.drawer.Tile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -65,12 +68,15 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
|
private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
|
||||||
private boolean mListeningToCategoryChange;
|
private boolean mListeningToCategoryChange;
|
||||||
private SummaryLoader mSummaryLoader;
|
private SummaryLoader mSummaryLoader;
|
||||||
|
private List<String> mSuppressInjectedTileKeys;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
UiBlockerController mBlockerController;
|
UiBlockerController mBlockerController;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
mSuppressInjectedTileKeys = Arrays.asList(context.getResources().getStringArray(
|
||||||
|
R.array.config_suppress_injected_tile_keys));
|
||||||
mDashboardFeatureProvider = FeatureFactory.getFactory(context).
|
mDashboardFeatureProvider = FeatureFactory.getFactory(context).
|
||||||
getDashboardFeatureProvider(context);
|
getDashboardFeatureProvider(context);
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
@@ -283,7 +289,12 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
/**
|
/**
|
||||||
* Returns true if this tile should be displayed
|
* Returns true if this tile should be displayed
|
||||||
*/
|
*/
|
||||||
|
@CallSuper
|
||||||
protected boolean displayTile(Tile tile) {
|
protected boolean displayTile(Tile tile) {
|
||||||
|
if (mSuppressInjectedTileKeys != null && tile.hasKey()) {
|
||||||
|
// For suppressing injected tiles for OEMs.
|
||||||
|
return !mSuppressInjectedTileKeys.contains(tile.getKey(getContext()));
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -88,4 +88,9 @@
|
|||||||
|
|
||||||
<!-- Grayscale settings intent -->
|
<!-- Grayscale settings intent -->
|
||||||
<string name="config_grayscale_settings_intent" translate="false">intent:#Intent;action=test.test;end</string>
|
<string name="config_grayscale_settings_intent" translate="false">intent:#Intent;action=test.test;end</string>
|
||||||
|
|
||||||
|
<!-- List containing the injected tile keys which are suppressed. -->
|
||||||
|
<string-array name="config_suppress_injected_tile_keys" translatable="false">
|
||||||
|
<item>injected_tile_key</item>
|
||||||
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
package com.android.settings.dashboard;
|
package com.android.settings.dashboard;
|
||||||
|
|
||||||
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.DASHBOARD_CONTAINER;
|
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.DASHBOARD_CONTAINER;
|
||||||
|
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
import org.robolectric.util.ReflectionHelpers;
|
import org.robolectric.util.ReflectionHelpers;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -79,6 +81,8 @@ public class DashboardFragmentTest {
|
|||||||
mActivityInfo = new ActivityInfo();
|
mActivityInfo = new ActivityInfo();
|
||||||
mActivityInfo.packageName = "pkg";
|
mActivityInfo.packageName = "pkg";
|
||||||
mActivityInfo.name = "class";
|
mActivityInfo.name = "class";
|
||||||
|
mActivityInfo.metaData = new Bundle();
|
||||||
|
mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key");
|
||||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mDashboardCategory = new DashboardCategory("key");
|
mDashboardCategory = new DashboardCategory("key");
|
||||||
mDashboardCategory.addTile(new Tile(mActivityInfo, mDashboardCategory.key));
|
mDashboardCategory.addTile(new Tile(mActivityInfo, mDashboardCategory.key));
|
||||||
@@ -143,6 +147,20 @@ public class DashboardFragmentTest {
|
|||||||
verify(mTestFragment.mScreen, never()).addPreference(nullable(Preference.class));
|
verify(mTestFragment.mScreen, never()).addPreference(nullable(Preference.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(qualifiers = "mcc999")
|
||||||
|
public void displayTilesAsPreference_shouldNotAddSuppressedTiles() {
|
||||||
|
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||||
|
.getTilesForCategory(nullable(String.class)))
|
||||||
|
.thenReturn(mDashboardCategory);
|
||||||
|
when(mFakeFeatureFactory.dashboardFeatureProvider
|
||||||
|
.getDashboardKeyForTile(nullable(Tile.class)))
|
||||||
|
.thenReturn("test_key");
|
||||||
|
mTestFragment.onCreatePreferences(new Bundle(), "rootKey");
|
||||||
|
|
||||||
|
verify(mTestFragment.mScreen, never()).addPreference(nullable(Preference.class));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onAttach_shouldCreatePlaceholderPreferenceController() {
|
public void onAttach_shouldCreatePlaceholderPreferenceController() {
|
||||||
final AbstractPreferenceController controller = mTestFragment.use(
|
final AbstractPreferenceController controller = mTestFragment.use(
|
||||||
|
Reference in New Issue
Block a user