From 628b3cb76ebc64bfe02bb75aad02c02ce05c6dad Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 13 Feb 2017 14:24:36 -0800 Subject: [PATCH] Deprecate SettingsDrawerActivity.openTile. Use DashboardFeatureProvider to open tile instead. This makes logic more centralized in one place, and makes logging easier in the future. Bug: 30137094 Test: RunSettingsRoboTests Change-Id: I8a028bb7cac8f70f6c237f253be8668cc3ef257e --- .../settings/dashboard/DashboardAdapter.java | 22 +++++----- .../dashboard/DashboardFeatureProvider.java | 5 +++ .../DashboardFeatureProviderImpl.java | 40 +++++++++++++++---- .../DashboardFeatureProviderImplTest.java | 22 ++++++++++ 4 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 372a3533836..b6285ad421b 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -15,6 +15,7 @@ */ package com.android.settings.dashboard; +import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.TypedArray; @@ -28,7 +29,6 @@ import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; -import android.util.TypedValue; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.MenuItem; @@ -61,15 +61,17 @@ public class DashboardAdapter extends RecyclerView.Adapter categories, List suggestions) { // TODO: Better place for tinting? - final TypedArray a = mContext.obtainStyledAttributes(new int[] { - FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext).isEnabled() - ? android.R.attr.colorControlNormal : android.R.attr.colorAccent }); + final TypedArray a = mContext.obtainStyledAttributes(new int[]{ + mDashboardFeatureProvider.isEnabled() + ? android.R.attr.colorControlNormal : android.R.attr.colorAccent}); int tintColor = a.getColor(0, mContext.getColor(android.R.color.white)); a.recycle(); for (int i = 0; i < categories.size(); i++) { @@ -405,12 +409,10 @@ public class DashboardAdapter extends RecyclerView.Adapter suggestions = mDashboardData.getSuggestions(); final List categories = mDashboardData.getCategories(); if (suggestions != null) { - outState.putParcelableArrayList(STATE_SUGGESTION_LIST, - new ArrayList(suggestions)); + outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<>(suggestions)); } if (categories != null) { - outState.putParcelableArrayList(STATE_CATEGORY_LIST, - new ArrayList(categories)); + outState.putParcelableArrayList(STATE_CATEGORY_LIST, new ArrayList<>(categories)); } outState.putInt(STATE_SUGGESTION_MODE, mDashboardData.getSuggestionMode()); } diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java index 2a5e800b403..7f91d16c1da 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java @@ -93,4 +93,9 @@ public interface DashboardFeatureProvider { */ String getExtraIntentAction(); + /** + * Opens a tile to its destination intent. + */ + void openTileIntent(Activity activity, Tile tile); + } diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 08372b0bdb9..98026bc9cdd 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -21,6 +21,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.text.TextUtils; @@ -30,6 +31,7 @@ import com.android.settings.SettingsActivity; import com.android.settingslib.drawer.CategoryManager; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.ProfileSelectDialog; +import com.android.settingslib.drawer.SettingsDrawerActivity; import com.android.settingslib.drawer.Tile; import java.util.ArrayList; @@ -149,14 +151,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { intent.setAction(action); } pref.setOnPreferenceClickListener(preference -> { - ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile); - if (tile.userHandle == null) { - activity.startActivityForResult(intent, 0); - } else if (tile.userHandle.size() == 1) { - activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0)); - } else { - ProfileSelectDialog.show(activity.getFragmentManager(), tile); - } + launchIntentOrSelectProfile(activity, tile, intent); return true; }); } @@ -188,4 +183,33 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { public String getExtraIntentAction() { return null; } + + @Override + public void openTileIntent(Activity activity, Tile tile) { + if (tile == null) { + Intent intent = new Intent(Settings.ACTION_SETTINGS).addFlags( + Intent.FLAG_ACTIVITY_CLEAR_TASK); + mContext.startActivity(intent); + return; + } + + if (tile.intent == null) { + return; + } + final Intent intent = new Intent(tile.intent) + .putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + launchIntentOrSelectProfile(activity, tile, intent); + } + + private void launchIntentOrSelectProfile(Activity activity, Tile tile, Intent intent) { + ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile); + if (tile.userHandle == null) { + activity.startActivityForResult(intent, 0); + } else if (tile.userHandle.size() == 1) { + activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0)); + } else { + ProfileSelectDialog.show(activity.getFragmentManager(), tile); + } + } } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 917c336bfdc..7dd66e2c26f 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -50,6 +50,7 @@ import java.util.ArrayList; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -140,6 +141,27 @@ public class DashboardFeatureProviderImplTest { verify(mActivity).getFragmentManager(); } + @Test + public void bindPreference_noFragmentMetadataSingleUser_shouldBindToDirectLaunchIntent() { + final Preference preference = new Preference( + ShadowApplication.getInstance().getApplicationContext()); + final Tile tile = new Tile(); + tile.metaData = new Bundle(); + tile.userHandle = new ArrayList<>(); + tile.userHandle.add(mock(UserHandle.class)); + tile.intent = new Intent(); + tile.intent.setComponent(new ComponentName("pkg", "class")); + + when(mActivity.getSystemService(Context.USER_SERVICE)) + .thenReturn(mUserManager); + + mImpl.bindPreferenceToTile(mActivity, preference, tile, "123", Preference.DEFAULT_ORDER); + preference.getOnPreferenceClickListener().onPreferenceClick(null); + + verify(mActivity) + .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class)); + } + @Test public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() { final Preference preference = new Preference(