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 -->
|
||||
<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>
|
||||
|
@@ -150,6 +150,9 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
|
||||
|
||||
@Override
|
||||
protected boolean displayTile(Tile tile) {
|
||||
if (!super.displayTile(tile)) {
|
||||
return false;
|
||||
}
|
||||
if (mAccountType == null) {
|
||||
return false;
|
||||
}
|
||||
|
@@ -24,12 +24,14 @@ import android.util.ArrayMap;
|
||||
import android.util.ArraySet;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsPreferenceFragment;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.core.PreferenceControllerListHelper;
|
||||
@@ -43,6 +45,7 @@ import com.android.settingslib.drawer.DashboardCategory;
|
||||
import com.android.settingslib.drawer.Tile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -65,12 +68,15 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
||||
private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
|
||||
private boolean mListeningToCategoryChange;
|
||||
private SummaryLoader mSummaryLoader;
|
||||
private List<String> mSuppressInjectedTileKeys;
|
||||
@VisibleForTesting
|
||||
UiBlockerController mBlockerController;
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
mSuppressInjectedTileKeys = Arrays.asList(context.getResources().getStringArray(
|
||||
R.array.config_suppress_injected_tile_keys));
|
||||
mDashboardFeatureProvider = FeatureFactory.getFactory(context).
|
||||
getDashboardFeatureProvider(context);
|
||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
@@ -283,7 +289,12 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
||||
/**
|
||||
* Returns true if this tile should be displayed
|
||||
*/
|
||||
@CallSuper
|
||||
protected boolean displayTile(Tile tile) {
|
||||
if (mSuppressInjectedTileKeys != null && tile.hasKey()) {
|
||||
// For suppressing injected tiles for OEMs.
|
||||
return !mSuppressInjectedTileKeys.contains(tile.getKey(getContext()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -88,4 +88,9 @@
|
||||
|
||||
<!-- Grayscale settings intent -->
|
||||
<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>
|
||||
|
@@ -16,6 +16,7 @@
|
||||
package com.android.settings.dashboard;
|
||||
|
||||
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;
|
||||
|
||||
@@ -53,6 +54,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -79,6 +81,8 @@ public class DashboardFragmentTest {
|
||||
mActivityInfo = new ActivityInfo();
|
||||
mActivityInfo.packageName = "pkg";
|
||||
mActivityInfo.name = "class";
|
||||
mActivityInfo.metaData = new Bundle();
|
||||
mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key");
|
||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mDashboardCategory = new DashboardCategory("key");
|
||||
mDashboardCategory.addTile(new Tile(mActivityInfo, mDashboardCategory.key));
|
||||
@@ -143,6 +147,20 @@ public class DashboardFragmentTest {
|
||||
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
|
||||
public void onAttach_shouldCreatePlaceholderPreferenceController() {
|
||||
final AbstractPreferenceController controller = mTestFragment.use(
|
||||
|
Reference in New Issue
Block a user