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
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.dashboard;
|
package com.android.settings.dashboard;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
@@ -28,7 +29,6 @@ import android.support.v7.widget.RecyclerView;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@@ -61,15 +61,17 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
private final IconCache mCache;
|
private final IconCache mCache;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
private final DashboardFeatureProvider mDashboardFeatureProvider;
|
||||||
private SuggestionParser mSuggestionParser;
|
private SuggestionParser mSuggestionParser;
|
||||||
|
|
||||||
@VisibleForTesting DashboardData mDashboardData;
|
@VisibleForTesting
|
||||||
|
DashboardData mDashboardData;
|
||||||
|
|
||||||
private View.OnClickListener mTileClickListener = new View.OnClickListener() {
|
private View.OnClickListener mTileClickListener = new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
//TODO: get rid of setTag/getTag
|
//TODO: get rid of setTag/getTag
|
||||||
((SettingsActivity) mContext).openTile((Tile) v.getTag());
|
mDashboardFeatureProvider.openTileIntent((Activity) mContext, (Tile) v.getTag());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -105,6 +107,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mMetricsFeatureProvider = metricsFeatureProvider;
|
mMetricsFeatureProvider = metricsFeatureProvider;
|
||||||
|
mDashboardFeatureProvider = FeatureFactory.getFactory(context)
|
||||||
|
.getDashboardFeatureProvider(context);
|
||||||
mCache = new IconCache(context);
|
mCache = new IconCache(context);
|
||||||
mSuggestionParser = parser;
|
mSuggestionParser = parser;
|
||||||
|
|
||||||
@@ -132,9 +136,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
public void setCategoriesAndSuggestions(List<DashboardCategory> categories,
|
public void setCategoriesAndSuggestions(List<DashboardCategory> categories,
|
||||||
List<Tile> suggestions) {
|
List<Tile> suggestions) {
|
||||||
// TODO: Better place for tinting?
|
// TODO: Better place for tinting?
|
||||||
final TypedArray a = mContext.obtainStyledAttributes(new int[] {
|
final TypedArray a = mContext.obtainStyledAttributes(new int[]{
|
||||||
FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext).isEnabled()
|
mDashboardFeatureProvider.isEnabled()
|
||||||
? android.R.attr.colorControlNormal : android.R.attr.colorAccent });
|
? android.R.attr.colorControlNormal : android.R.attr.colorAccent});
|
||||||
int tintColor = a.getColor(0, mContext.getColor(android.R.color.white));
|
int tintColor = a.getColor(0, mContext.getColor(android.R.color.white));
|
||||||
a.recycle();
|
a.recycle();
|
||||||
for (int i = 0; i < categories.size(); i++) {
|
for (int i = 0; i < categories.size(); i++) {
|
||||||
@@ -405,12 +409,10 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
final List<Tile> suggestions = mDashboardData.getSuggestions();
|
final List<Tile> suggestions = mDashboardData.getSuggestions();
|
||||||
final List<DashboardCategory> categories = mDashboardData.getCategories();
|
final List<DashboardCategory> categories = mDashboardData.getCategories();
|
||||||
if (suggestions != null) {
|
if (suggestions != null) {
|
||||||
outState.putParcelableArrayList(STATE_SUGGESTION_LIST,
|
outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<>(suggestions));
|
||||||
new ArrayList<Tile>(suggestions));
|
|
||||||
}
|
}
|
||||||
if (categories != null) {
|
if (categories != null) {
|
||||||
outState.putParcelableArrayList(STATE_CATEGORY_LIST,
|
outState.putParcelableArrayList(STATE_CATEGORY_LIST, new ArrayList<>(categories));
|
||||||
new ArrayList<DashboardCategory>(categories));
|
|
||||||
}
|
}
|
||||||
outState.putInt(STATE_SUGGESTION_MODE, mDashboardData.getSuggestionMode());
|
outState.putInt(STATE_SUGGESTION_MODE, mDashboardData.getSuggestionMode());
|
||||||
}
|
}
|
||||||
|
@@ -93,4 +93,9 @@ public interface DashboardFeatureProvider {
|
|||||||
*/
|
*/
|
||||||
String getExtraIntentAction();
|
String getExtraIntentAction();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a tile to its destination intent.
|
||||||
|
*/
|
||||||
|
void openTileIntent(Activity activity, Tile tile);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,7 @@ import android.content.ComponentName;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -30,6 +31,7 @@ import com.android.settings.SettingsActivity;
|
|||||||
import com.android.settingslib.drawer.CategoryManager;
|
import com.android.settingslib.drawer.CategoryManager;
|
||||||
import com.android.settingslib.drawer.DashboardCategory;
|
import com.android.settingslib.drawer.DashboardCategory;
|
||||||
import com.android.settingslib.drawer.ProfileSelectDialog;
|
import com.android.settingslib.drawer.ProfileSelectDialog;
|
||||||
|
import com.android.settingslib.drawer.SettingsDrawerActivity;
|
||||||
import com.android.settingslib.drawer.Tile;
|
import com.android.settingslib.drawer.Tile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -149,14 +151,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
intent.setAction(action);
|
intent.setAction(action);
|
||||||
}
|
}
|
||||||
pref.setOnPreferenceClickListener(preference -> {
|
pref.setOnPreferenceClickListener(preference -> {
|
||||||
ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
|
launchIntentOrSelectProfile(activity, tile, intent);
|
||||||
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);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -188,4 +183,33 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
public String getExtraIntentAction() {
|
public String getExtraIntentAction() {
|
||||||
return null;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -50,6 +50,7 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
|
import static org.mockito.Matchers.anyInt;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
@@ -140,6 +141,27 @@ public class DashboardFeatureProviderImplTest {
|
|||||||
verify(mActivity).getFragmentManager();
|
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
|
@Test
|
||||||
public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() {
|
public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() {
|
||||||
final Preference preference = new Preference(
|
final Preference preference = new Preference(
|
||||||
|
Reference in New Issue
Block a user