From 54cfb649875047e90fe94304440d2d0646eaeaf2 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 17 Aug 2018 11:36:20 -0700 Subject: [PATCH] Use tile.getTitle(context) to get tile title. And switch to getId() instead of title when comparing 2 tiles. This is more accurate and more efficient. Bug: 77600770 Test: robotests Change-Id: I587d90702d98956bf7b420529ac3280351ca4a10 --- .../settings/dashboard/DashboardAdapter.java | 2 +- .../settings/dashboard/DashboardData.java | 11 +++++------ .../dashboard/DashboardFeatureProviderImpl.java | 2 +- .../settings/dashboard/DashboardFragment.java | 6 +++--- .../settings/dashboard/SummaryLoader.java | 7 ++++--- .../AccountDetailDashboardFragmentTest.java | 4 +++- .../settings/dashboard/DashboardAdapterTest.java | 3 +++ .../settings/dashboard/DashboardDataTest.java | 13 +++++++------ .../DashboardFeatureProviderImplTest.java | 16 +++++----------- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 488396f2a7c..abeecd97f25 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -355,7 +355,7 @@ public class DashboardAdapter extends RecyclerView.Adapter * First, try to find the exact identical instance of the tile object, if not found, - * then try to find a tile has the same title. + * then try to find a tile has the same id. * * @param tile tile that need to be found * @return position of the object, return INDEX_NOT_FOUND if object isn't in the list @@ -158,7 +157,7 @@ public class DashboardData { final Object entity = mItems.get(i).entity; if (entity == tile) { return i; - } else if (entity instanceof Tile && tile.title.equals(((Tile) entity).title)) { + } else if (entity instanceof Tile && tile.getId() == ((Tile) entity).getId()) { return i; } } @@ -227,7 +226,7 @@ public class DashboardData { final List tiles = mCategory.getTiles(); for (int i = 0; i < tiles.size(); i++) { final Tile tile = tiles.get(i); - addToItemList(tile, R.layout.dashboard_tile, Objects.hash(tile.title), + addToItemList(tile, R.layout.dashboard_tile, tile.getId(), true /* add */); } } @@ -425,8 +424,8 @@ public class DashboardData { final Tile localTile = (Tile) entity; final Tile targetTile = (Tile) targetItem.entity; - // Only check title and summary for dashboard tile - return TextUtils.equals(localTile.title, targetTile.title) + // Only check id and summary for dashboard tile + return localTile.getId() == targetTile.getId() && TextUtils.equals(localTile.summary, targetTile.summary); case TYPE_SUGGESTION_CONTAINER: case TYPE_CONDITION_CONTAINER: diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 7c6593628ad..b904f9d3da9 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -106,7 +106,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { if (pref == null) { return; } - pref.setTitle(tile.title); + pref.setTitle(tile.getTitle(activity.getApplicationContext())); if (!TextUtils.isEmpty(key)) { pref.setKey(key); } else { diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index a90950e5521..cdd7d0e81df 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -156,9 +156,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile); final Preference pref = getPreferenceScreen().findPreference(key); if (pref == null) { - Log.d(getLogTag(), - String.format("Can't find pref by key %s, skipping update summary %s/%s", - key, tile.title, tile.summary)); + Log.d(getLogTag(), String.format( + "Can't find pref by key %s, skipping update summary %s/%s", + key, tile.getDescription(), tile.summary)); return; } pref.setSummary(tile.summary); diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java index 199331d5b21..dbca535ece5 100644 --- a/src/com/android/settings/dashboard/SummaryLoader.java +++ b/src/com/android/settings/dashboard/SummaryLoader.java @@ -96,7 +96,7 @@ public class SummaryLoader { return; } if (DEBUG) { - Log.d(TAG, "setSummary " + tile.title + " - " + summary); + Log.d(TAG, "setSummary " + tile.getDescription() + " - " + summary); } updateSummaryIfNeeded(tile, summary); @@ -107,7 +107,8 @@ public class SummaryLoader { void updateSummaryIfNeeded(Tile tile, CharSequence summary) { if (TextUtils.equals(tile.summary, summary)) { if (DEBUG) { - Log.d(TAG, "Summary doesn't change, skipping summary update for " + tile.title); + Log.d(TAG, "Summary doesn't change, skipping summary update for " + + tile.getDescription()); } return; } @@ -118,7 +119,7 @@ public class SummaryLoader { } else { if (DEBUG) { Log.d(TAG, "SummaryConsumer is null, skipping summary update for " - + tile.title); + + tile.getDescription()); } } } diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java index eca9f862b30..f2fb1219094 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java @@ -16,6 +16,7 @@ package com.android.settings.accounts; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.google.common.truth.Truth.assertThat; @@ -65,7 +66,7 @@ public class AccountDetailDashboardFragmentTest { public void setUp() { mContext = RuntimeEnvironment.application; mActivityInfo = new ActivityInfo(); - mActivityInfo.packageName = "pkg"; + mActivityInfo.packageName = mContext.getPackageName(); mActivityInfo.name = "clazz"; mActivityInfo.metaData = new Bundle(); @@ -123,6 +124,7 @@ public class AccountDetailDashboardFragmentTest { mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key"); mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT); mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc"); + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_TITLE, "summary"); mActivityInfo.metaData.putString("com.android.settings.intent.action", Intent.ACTION_ASSIST); tile.userHandle = null; diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java index a73f4a8700e..58a5cc9dc6f 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java @@ -15,6 +15,8 @@ */ package com.android.settings.dashboard; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -95,6 +97,7 @@ public class DashboardAdapterTest { mActivityInfo.packageName = "pkg"; mActivityInfo.name = "class"; mActivityInfo.metaData = new Bundle(); + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_TITLE, "test-title"); when(mContext.getSystemService(Context.WINDOW_SERVICE)).thenReturn(mWindowManager); when(mContext.getResources()).thenReturn(mResources); diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java index d92cceb62a8..406cb3cd1df 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java @@ -49,13 +49,12 @@ import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Objects; @RunWith(SettingsRobolectricTestRunner.class) public class DashboardDataTest { private static final String TEST_SUGGESTION_TITLE = "Use fingerprint"; - private static final String TEST_CATEGORY_TILE_TITLE = "Display"; + private static final int TEST_TILE_ID = 12345; private DashboardData mDashboardDataWithOneConditions; private DashboardData mDashboardDataWithTwoConditions; @@ -95,7 +94,7 @@ public class DashboardDataTest { twoItemsConditions.add(mSecondCondition); // Build category - mTestCategoryTile.title = TEST_CATEGORY_TILE_TITLE; + when(mTestCategoryTile.getId()).thenReturn(TEST_TILE_ID); mDashboardCategory.addTile(mTestCategoryTile); @@ -132,7 +131,7 @@ public class DashboardDataTest { assertThat(items.get(1).id).isEqualTo(STABLE_ID_SUGGESTION_CONDITION_DIVIDER); assertThat(items.get(2).id).isEqualTo(STABLE_ID_CONDITION_CONTAINER); assertThat(items.get(3).id).isEqualTo(STABLE_ID_CONDITION_FOOTER); - assertThat(items.get(4).id).isEqualTo(Objects.hash(mTestCategoryTile.title)); + assertThat(items.get(4).id).isEqualTo(TEST_TILE_ID); } @Test @@ -185,15 +184,17 @@ public class DashboardDataTest { @Test public void testGetPositionByTile_equalTitle_returnPositionFound() { final Tile tile = mock(Tile.class); - tile.title = TEST_CATEGORY_TILE_TITLE; + when(tile.getId()).thenReturn(TEST_TILE_ID); + final int position = mDashboardDataWithOneConditions.getPositionByTile(tile); + assertThat(position).isNotEqualTo(DashboardData.POSITION_NOT_FOUND); } @Test public void testGetPositionByTile_notExisted_returnNotFound() { final Tile tile = mock(Tile.class); - tile.title = ""; + when(tile.getId()).thenReturn(123); final int position = mDashboardDataWithOneConditions.getPositionByTile(tile); assertThat(position).isEqualTo(DashboardData.POSITION_NOT_FOUND); } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 22c589c8fd6..efebefd0892 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -19,6 +19,7 @@ package com.android.settings.dashboard; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; @@ -99,11 +100,13 @@ public class DashboardFeatureProviderImplTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + doReturn(RuntimeEnvironment.application).when(mActivity).getApplicationContext(); mForceRoundedIcon = false; mActivityInfo = new ActivityInfo(); - mActivityInfo.packageName = "pkg"; + mActivityInfo.packageName = mContext.getPackageName(); mActivityInfo.name = "class"; mActivityInfo.metaData = new Bundle(); + mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label); doReturn(mPackageManager).when(mContext).getPackageManager(); when(mPackageManager.resolveActivity(any(Intent.class), anyInt())) .thenReturn(new ResolveInfo()); @@ -121,7 +124,6 @@ public class DashboardFeatureProviderImplTest { final Preference preference = new Preference(RuntimeEnvironment.application); final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10); - tile.title = "title"; tile.summary = "summary"; doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565))) .when(tile).getIcon(any(Context.class)); @@ -129,7 +131,7 @@ public class DashboardFeatureProviderImplTest { mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); - assertThat(preference.getTitle()).isEqualTo(tile.title); + assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label)); assertThat(preference.getSummary()).isEqualTo(tile.summary); assertThat(preference.getIcon()).isNotNull(); assertThat(preference.getFragment()).isEqualTo( @@ -159,9 +161,6 @@ public class DashboardFeatureProviderImplTest { tile.userHandle.add(mock(UserHandle.class)); tile.userHandle.add(mock(UserHandle.class)); - when(mActivity.getApplicationContext().getSystemService(Context.USER_SERVICE)) - .thenReturn(mUserManager); - mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); preference.getOnPreferenceClickListener().onPreferenceClick(null); @@ -199,11 +198,6 @@ public class DashboardFeatureProviderImplTest { tile.userHandle = new ArrayList<>(); tile.userHandle.add(mock(UserHandle.class)); - when(mActivity.getSystemService(Context.USER_SERVICE)) - .thenReturn(mUserManager); - when(mActivity.getApplicationContext().getPackageName()) - .thenReturn(RuntimeEnvironment.application.getPackageName()); - mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); preference.getOnPreferenceClickListener().onPreferenceClick(null);