Loading src/com/android/settings/dashboard/DashboardAdapter.java +12 −10 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -61,15 +61,17 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash private final IconCache mCache; private final Context mContext; private final MetricsFeatureProvider mMetricsFeatureProvider; private final DashboardFeatureProvider mDashboardFeatureProvider; private SuggestionParser mSuggestionParser; @VisibleForTesting DashboardData mDashboardData; @VisibleForTesting DashboardData mDashboardData; private View.OnClickListener mTileClickListener = new View.OnClickListener() { @Override public void onClick(View v) { //TODO: get rid of setTag/getTag ((SettingsActivity) mContext).openTile((Tile) v.getTag()); mDashboardFeatureProvider.openTileIntent((Activity) mContext, (Tile) v.getTag()); } }; Loading Loading @@ -105,6 +107,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash mContext = context; mMetricsFeatureProvider = metricsFeatureProvider; mDashboardFeatureProvider = FeatureFactory.getFactory(context) .getDashboardFeatureProvider(context); mCache = new IconCache(context); mSuggestionParser = parser; Loading Loading @@ -133,7 +137,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash List<Tile> suggestions) { // TODO: Better place for tinting? final TypedArray a = mContext.obtainStyledAttributes(new int[]{ FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext).isEnabled() mDashboardFeatureProvider.isEnabled() ? android.R.attr.colorControlNormal : android.R.attr.colorAccent}); int tintColor = a.getColor(0, mContext.getColor(android.R.color.white)); a.recycle(); Loading Loading @@ -405,12 +409,10 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash final List<Tile> suggestions = mDashboardData.getSuggestions(); final List<DashboardCategory> categories = mDashboardData.getCategories(); if (suggestions != null) { outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<Tile>(suggestions)); outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<>(suggestions)); } if (categories != null) { outState.putParcelableArrayList(STATE_CATEGORY_LIST, new ArrayList<DashboardCategory>(categories)); outState.putParcelableArrayList(STATE_CATEGORY_LIST, new ArrayList<>(categories)); } outState.putInt(STATE_SUGGESTION_MODE, mDashboardData.getSuggestionMode()); } Loading src/com/android/settings/dashboard/DashboardFeatureProvider.java +5 −0 Original line number Diff line number Diff line Loading @@ -93,4 +93,9 @@ public interface DashboardFeatureProvider { */ String getExtraIntentAction(); /** * Opens a tile to its destination intent. */ void openTileIntent(Activity activity, Tile tile); } src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +32 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; }); } Loading Loading @@ -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); } } } tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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( Loading Loading
src/com/android/settings/dashboard/DashboardAdapter.java +12 −10 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -61,15 +61,17 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash private final IconCache mCache; private final Context mContext; private final MetricsFeatureProvider mMetricsFeatureProvider; private final DashboardFeatureProvider mDashboardFeatureProvider; private SuggestionParser mSuggestionParser; @VisibleForTesting DashboardData mDashboardData; @VisibleForTesting DashboardData mDashboardData; private View.OnClickListener mTileClickListener = new View.OnClickListener() { @Override public void onClick(View v) { //TODO: get rid of setTag/getTag ((SettingsActivity) mContext).openTile((Tile) v.getTag()); mDashboardFeatureProvider.openTileIntent((Activity) mContext, (Tile) v.getTag()); } }; Loading Loading @@ -105,6 +107,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash mContext = context; mMetricsFeatureProvider = metricsFeatureProvider; mDashboardFeatureProvider = FeatureFactory.getFactory(context) .getDashboardFeatureProvider(context); mCache = new IconCache(context); mSuggestionParser = parser; Loading Loading @@ -133,7 +137,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash List<Tile> suggestions) { // TODO: Better place for tinting? final TypedArray a = mContext.obtainStyledAttributes(new int[]{ FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext).isEnabled() mDashboardFeatureProvider.isEnabled() ? android.R.attr.colorControlNormal : android.R.attr.colorAccent}); int tintColor = a.getColor(0, mContext.getColor(android.R.color.white)); a.recycle(); Loading Loading @@ -405,12 +409,10 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash final List<Tile> suggestions = mDashboardData.getSuggestions(); final List<DashboardCategory> categories = mDashboardData.getCategories(); if (suggestions != null) { outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<Tile>(suggestions)); outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<>(suggestions)); } if (categories != null) { outState.putParcelableArrayList(STATE_CATEGORY_LIST, new ArrayList<DashboardCategory>(categories)); outState.putParcelableArrayList(STATE_CATEGORY_LIST, new ArrayList<>(categories)); } outState.putInt(STATE_SUGGESTION_MODE, mDashboardData.getSuggestionMode()); } Loading
src/com/android/settings/dashboard/DashboardFeatureProvider.java +5 −0 Original line number Diff line number Diff line Loading @@ -93,4 +93,9 @@ public interface DashboardFeatureProvider { */ String getExtraIntentAction(); /** * Opens a tile to its destination intent. */ void openTileIntent(Activity activity, Tile tile); }
src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +32 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; }); } Loading Loading @@ -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); } } }
tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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( Loading