Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 628b3cb7 authored by Fan Zhang's avatar Fan Zhang
Browse files

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
parent 33b0a66a
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -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<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());
        }
    };

@@ -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;

@@ -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();
@@ -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());
    }
+5 −0
Original line number Diff line number Diff line
@@ -93,4 +93,9 @@ public interface DashboardFeatureProvider {
     */
    String getExtraIntentAction();

    /**
     * Opens a tile to its destination intent.
     */
    void openTileIntent(Activity activity, Tile tile);

}
+32 −8
Original line number Diff line number Diff line
@@ -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);
        }
    }
}
+22 −0
Original line number Diff line number Diff line
@@ -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(