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

Commit 1a1f9314 authored by Jason Chiu's avatar Jason Chiu
Browse files

Refactor Settings for injection v2 inline toggle

Bug: 132808482
Test: robotest
Change-Id: I0b74e05bc26b97259a15859c669060ce3da7972a
parent 5b689a51
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -111,7 +111,7 @@ public class SettingsBaseActivity extends FragmentActivity {
        filter.addDataScheme(DATA_SCHEME_PKG);
        registerReceiver(mPackageReceiver, filter);

        new CategoriesUpdateTask().execute();
        updateCategories();
    }

    @Override
@@ -154,7 +154,6 @@ public class SettingsBaseActivity extends FragmentActivity {
        }
    }


    private boolean isLockTaskModePinned() {
        final ActivityManager activityManager =
                getApplicationContext().getSystemService(ActivityManager.class);
@@ -226,7 +225,7 @@ public class SettingsBaseActivity extends FragmentActivity {
    private class PackageReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            new CategoriesUpdateTask().execute();
            updateCategories();
        }
    }
}
+27 −19
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
@@ -118,10 +119,10 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
        bindTitle(pref, tile);
        bindSummary(pref, tile);
        bindIcon(pref, tile, forceRoundedIcon);

        final Bundle metadata = tile.getMetaData();
        String clsName = null;
        String action = null;

        if (metadata != null) {
            clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
            action = metadata.getString(META_DATA_KEY_INTENT_ACTION);
@@ -140,10 +141,9 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
                return true;
            });
        }
        final String skipOffsetPackageName = activity.getPackageName();


        if (tile.hasOrder()) {
            final String skipOffsetPackageName = activity.getPackageName();
            final int order = tile.getOrder();
            boolean shouldSkipBaseOrderOffset = TextUtils.equals(
                    skipOffsetPackageName, tile.getIntent().getComponent().getPackageName());
@@ -182,15 +182,19 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
            // to avoid preference height change.
            preference.setTitle(R.string.summary_placeholder);

            final Uri uri = TileUtils.getCompleteUri(tile, META_DATA_PREFERENCE_TITLE_URI);
            refreshTitle(uri, preference);
        }
    }

    private void refreshTitle(Uri uri, Preference preference) {
        ThreadUtils.postOnBackgroundThread(() -> {
            final Map<String, IContentProvider> providerMap = new ArrayMap<>();
                final String uri = tile.getMetaData().getString(META_DATA_PREFERENCE_TITLE_URI);
            final String titleFromUri = TileUtils.getTextFromUri(
                    mContext, uri, providerMap, META_DATA_PREFERENCE_TITLE);
            ThreadUtils.postOnMainThread(() -> preference.setTitle(titleFromUri));
        });
    }
    }

    private void bindSummary(Preference preference, Tile tile) {
        final CharSequence summary = tile.getSummary(mContext);
@@ -202,16 +206,20 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
            // to avoid preference height change.
            preference.setSummary(R.string.summary_placeholder);

            final Uri uri = TileUtils.getCompleteUri(tile, META_DATA_PREFERENCE_SUMMARY_URI);
            refreshSummary(uri, preference);
        } else {
            preference.setSummary(R.string.summary_placeholder);
        }
    }

    private void refreshSummary(Uri uri, Preference preference) {
        ThreadUtils.postOnBackgroundThread(() -> {
            final Map<String, IContentProvider> providerMap = new ArrayMap<>();
                final String uri = tile.getMetaData().getString(META_DATA_PREFERENCE_SUMMARY_URI);
            final String summaryFromUri = TileUtils.getTextFromUri(
                    mContext, uri, providerMap, META_DATA_PREFERENCE_SUMMARY);
            ThreadUtils.postOnMainThread(() -> preference.setSummary(summaryFromUri));
        });
        } else {
            preference.setSummary(R.string.summary_placeholder);
        }
    }

    @VisibleForTesting
@@ -238,7 +246,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
                    packageName = intent.getComponent().getPackageName();
                }
                final Map<String, IContentProvider> providerMap = new ArrayMap<>();
                final String uri = tile.getMetaData().getString(META_DATA_PREFERENCE_ICON_URI);
                final Uri uri = TileUtils.getCompleteUri(tile, META_DATA_PREFERENCE_ICON_URI);
                final Pair<String, Integer> iconInfo = TileUtils.getIconFromUri(
                        mContext, packageName, uri, providerMap);
                if (iconInfo == null) {
+12 −14
Original line number Diff line number Diff line
@@ -98,11 +98,11 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment

        // And wire up with lifecycle.
        final Lifecycle lifecycle = getSettingsLifecycle();
        uniqueControllerFromXml
                .stream()
                .filter(controller -> controller instanceof LifecycleObserver)
                .forEach(
                        controller -> lifecycle.addObserver((LifecycleObserver) controller));
        uniqueControllerFromXml.forEach(controller -> {
            if (controller instanceof LifecycleObserver) {
                lifecycle.addObserver((LifecycleObserver) controller);
            }
        });

        mPlaceholderPreferenceController =
                new DashboardTilePlaceholderPreferenceController(context);
@@ -115,11 +115,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
    @VisibleForTesting
    void checkUiBlocker(List<AbstractPreferenceController> controllers) {
        final List<String> keys = new ArrayList<>();
        controllers
                .stream()
                .filter(controller -> controller instanceof BasePreferenceController.UiBlocker)
                .forEach(controller -> {
                    if (controller.isAvailable()) {
        controllers.forEach(controller -> {
            if (controller instanceof BasePreferenceController.UiBlocker
                    && controller.isAvailable()) {
                ((BasePreferenceController) controller).setUiBlockListener(this);
                keys.add(controller.getPreferenceKey());
            }
+6 −5
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.dashboard.DashboardFeatureProviderImpl;
import com.android.settings.testutils.shadow.ShadowAccountManager;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.drawer.ActivityTile;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.Tile;

@@ -105,7 +106,7 @@ public class AccountDetailDashboardFragmentTest {

    @Test
    public void refreshDashboardTiles_HasAccountType_shouldDisplay() {
        final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc");

@@ -114,7 +115,7 @@ public class AccountDetailDashboardFragmentTest {

    @Test
    public void refreshDashboardTiles_NoAccountType_shouldNotDisplay() {
        final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT_DETAIL);

        assertThat(mFragment.displayTile(tile)).isFalse();
@@ -122,7 +123,7 @@ public class AccountDetailDashboardFragmentTest {

    @Test
    public void refreshDashboardTiles_OtherAccountType_shouldNotDisplay() {
        final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.other");

@@ -138,7 +139,7 @@ public class AccountDetailDashboardFragmentTest {
        when(packageManager.resolveActivity(any(Intent.class), anyInt()))
                .thenReturn(mock(ResolveInfo.class));

        final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
        mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT);
        mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc");
@@ -166,7 +167,7 @@ public class AccountDetailDashboardFragmentTest {
    public void displayTile_shouldAddUserHandleToTileIntent() {
        mFragment.mUserHandle = new UserHandle(1);

        final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
        mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT);
        mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc");

+28 −27
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.util.Pair;

import com.android.settingslib.drawer.ActivityTile;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
@@ -68,8 +69,8 @@ public class CategoryManagerTest {

    @Test
    public void backwardCompatCleanupForCategory_shouldNotChangeCategoryForNewKeys() {
        final Tile tile1 = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT);
        final Tile tile2 = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT);
        final Tile tile1 = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT);
        final Tile tile2 = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT);
        final DashboardCategory category = new DashboardCategory(CategoryKey.CATEGORY_ACCOUNT);
        category.addTile(tile1);
        category.addTile(tile2);
@@ -85,9 +86,9 @@ public class CategoryManagerTest {

    @Test
    public void backwardCompatCleanupForCategory_shouldNotChangeCategoryForMixedKeys() {
        final Tile tile1 = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT);
        final Tile tile1 = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT);
        final String oldCategory = "com.android.settings.category.wireless";
        final Tile tile2 = new Tile(mActivityInfo, oldCategory);
        final Tile tile2 = new ActivityTile(mActivityInfo, oldCategory);
        final DashboardCategory category1 = new DashboardCategory(CategoryKey.CATEGORY_ACCOUNT);
        category1.addTile(tile1);
        final DashboardCategory category2 = new DashboardCategory(oldCategory);
@@ -108,7 +109,7 @@ public class CategoryManagerTest {
    @Test
    public void backwardCompatCleanupForCategory_shouldChangeCategoryForOldKeys() {
        final String oldCategory = "com.android.settings.category.wireless";
        final Tile tile1 = new Tile(mActivityInfo, oldCategory);
        final Tile tile1 = new ActivityTile(mActivityInfo, oldCategory);
        tile1.setCategory(oldCategory);
        final DashboardCategory category1 = new DashboardCategory(oldCategory);
        category1.addTile(tile1);
@@ -146,9 +147,9 @@ public class CategoryManagerTest {
        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 200);
        activityInfo3.packageName = testPackage;
        activityInfo3.name = "class3";
        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);

        category.addTile(tile1);
        category.addTile(tile2);
@@ -186,9 +187,9 @@ public class CategoryManagerTest {
        activityInfo3.packageName = testPackage1;
        activityInfo3.name = "class3";

        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);
        category.addTile(tile1);
        category.addTile(tile2);
        category.addTile(tile3);
@@ -223,9 +224,9 @@ public class CategoryManagerTest {
        activityInfo3.name = "class3";
        activityInfo3.metaData = new Bundle();
        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);
        category.addTile(tile1);
        category.addTile(tile2);
        category.addTile(tile3);
@@ -268,10 +269,10 @@ public class CategoryManagerTest {
        activityInfo4.metaData = new Bundle();
        activityInfo4.metaData.putInt(META_DATA_KEY_ORDER, -1);

        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile4 = new Tile(activityInfo4, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile4 = new ActivityTile(activityInfo4, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);
        category.addTile(tile1);
        category.addTile(tile2);
        category.addTile(tile3);
@@ -310,9 +311,9 @@ public class CategoryManagerTest {
        activityInfo3.name = "class3";
        activityInfo3.metaData = new Bundle();
        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 1);
        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);
        category.addTile(tile1);
        category.addTile(tile2);
        category.addTile(tile3);
@@ -347,9 +348,9 @@ public class CategoryManagerTest {
        activityInfo3.name = "class3";
        activityInfo3.metaData = new Bundle();
        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);
        category.addTile(tile1);
        category.addTile(tile2);
        category.addTile(tile3);
@@ -381,9 +382,9 @@ public class CategoryManagerTest {
        activityInfo3.metaData = new Bundle();
        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);

        final Tile tile1 = new Tile(activityInfo1, category.key);
        final Tile tile2 = new Tile(activityInfo2, category.key);
        final Tile tile3 = new Tile(activityInfo3, category.key);
        final Tile tile1 = new ActivityTile(activityInfo1, category.key);
        final Tile tile2 = new ActivityTile(activityInfo2, category.key);
        final Tile tile3 = new ActivityTile(activityInfo3, category.key);
        category.addTile(tile1);
        category.addTile(tile2);
        category.addTile(tile3);
Loading