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

Commit de3ff1ee authored by Fan Zhang's avatar Fan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Implemented the CardContentLoader"

parents 16a71df6 a87e4cb2
Loading
Loading
Loading
Loading
+33 −21
Original line number Diff line number Diff line
@@ -17,35 +17,27 @@
package com.android.settings.homepage;

import android.content.Context;
import android.database.Cursor;

import androidx.annotation.Nullable;

import com.android.settingslib.utils.AsyncLoaderCompat;

import java.util.ArrayList;
import java.util.List;

//TODO(b/112521307): Implement this to make it work with the card database.
public class CardContentLoader {
public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
    static final int CARD_CONTENT_LOADER_ID = 1;

    private static final String TAG = "CardContentLoader";

    private CardContentLoaderListener mListener;
    private Context mContext;

    public interface CardContentLoaderListener {
        void onFinishCardLoading(List<ContextualCard> contextualCards);
    }

    public CardContentLoader() {
    }

    void setListener(CardContentLoaderListener listener) {
        mListener = listener;
    }

    private static class CardLoader extends AsyncLoaderCompat<List<ContextualCard>> {

        public CardLoader(Context context) {
    CardContentLoader(Context context) {
        super(context);
        mContext = context.getApplicationContext();
    }

    @Override
@@ -56,7 +48,27 @@ public class CardContentLoader {
    @Nullable
    @Override
    public List<ContextualCard> loadInBackground() {
            return null;
        List<ContextualCard> result;
        try (Cursor cursor = CardDatabaseHelper.getInstance(mContext).getAllContextualCards()) {
            if (cursor.getCount() == 0) {
                //TODO(b/113372471): Load Default static cards and return 3 static cards
                return new ArrayList<>();
            }
            result = buildContextualCardList(cursor);
        }
        return result;
    }

    private List<ContextualCard> buildContextualCardList(Cursor cursor) {
        final List<ContextualCard> result = new ArrayList<>();
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            final ContextualCard card = new ContextualCard(cursor);
            if (card.isCustomCard()) {
                //TODO(b/114688391): Load and generate custom card,then add into list
            } else {
                result.add(card);
            }
        }
        return result;
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.homepage;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
@@ -190,4 +191,12 @@ public class CardDatabaseHelper extends SQLiteOpenHelper {
        }
        return sCardDatabaseHelper;
    }

    Cursor getAllContextualCards() {
        final SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(CARD_TABLE, null /* columns */, null /* selection */,
                null /* selectionArgs */, null /* groupBy */, null /* having */,
                null /* orderBy */);
        return cursor;
    }
}
+31 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.homepage;

import android.annotation.IntDef;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.TextUtils;
@@ -58,8 +59,8 @@ public class ContextualCard {
    private final int mIconResId;
    private final int mCardAction;
    private final long mExpireTimeMS;
    private final Drawable mIconDrawable;
    private final boolean mIsHalfWidth;
    private final Drawable mIconDrawable;

    String getName() {
        return mName;
@@ -137,6 +138,10 @@ public class ContextualCard {
        return mIsHalfWidth;
    }

    boolean isCustomCard() {
        return TextUtils.isEmpty(mSliceUri);
    }

    public ContextualCard(Builder builder) {
        mName = builder.mName;
        mCardType = builder.mCardType;
@@ -158,6 +163,31 @@ public class ContextualCard {
        mIsHalfWidth = builder.mIsHalfWidth;
    }

    ContextualCard(Cursor c) {
        mName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.NAME));
        mCardType = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.TYPE));
        mRankingScore = c.getDouble(c.getColumnIndex(CardDatabaseHelper.CardColumns.SCORE));
        mSliceUri = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SLICE_URI));
        mCategory = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CATEGORY));
        mLocalizedToLocale = c.getString(
                c.getColumnIndex(CardDatabaseHelper.CardColumns.LOCALIZED_TO_LOCALE));
        mPackageName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.PACKAGE_NAME));
        mAppVersion = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.APP_VERSION));
        mTitleResName = c.getString(
                c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_RES_NAME));
        mTitleText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_TEXT));
        mSummaryResName = c.getString(
                c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_RES_NAME));
        mSummaryText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_TEXT));
        mIconResName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_NAME));
        mIconResId = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_ID));
        mCardAction = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CARD_ACTION));
        mExpireTimeMS = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.EXPIRE_TIME_MS));
        mIsHalfWidth = (c.getInt(
                c.getColumnIndex(CardDatabaseHelper.CardColumns.SUPPORT_HALF_WIDTH)) == 1);
        mIconDrawable = null;
    }

    @Override
    public int hashCode() {
        return mName.hashCode();
+53 −3
Original line number Diff line number Diff line
@@ -16,9 +16,17 @@

package com.android.settings.homepage;

import static com.android.settings.homepage.CardContentLoader.CARD_CONTENT_LOADER_ID;

import android.content.Context;
import android.os.Bundle;
import android.widget.BaseAdapter;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;

import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;

@@ -60,9 +68,12 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade
        mControllerRendererPool = new ControllerRendererPool();
    }

    void startCardContentLoading() {
        final CardContentLoader cardContentLoader = new CardContentLoader();
        cardContentLoader.setListener(this);
    void startCardContentLoading(PersonalSettingsFragment fragment) {
        final CardContentLoaderCallbacks cardContentLoaderCallbacks =
                new CardContentLoaderCallbacks(mContext);
        cardContentLoaderCallbacks.setListener(this);
        LoaderManager.getInstance(fragment).initLoader(CARD_CONTENT_LOADER_ID, null /* bundle */,
                cardContentLoaderCallbacks);
    }

    private void loadCardControllers() {
@@ -140,4 +151,43 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade
    public ControllerRendererPool getControllerRendererPool() {
        return mControllerRendererPool;
    }


    static class CardContentLoaderCallbacks implements
            LoaderManager.LoaderCallbacks<List<ContextualCard>> {

        private Context mContext;
        private CardContentLoader.CardContentLoaderListener mListener;

        CardContentLoaderCallbacks(Context context) {
            mContext = context.getApplicationContext();
        }

        protected void setListener(CardContentLoader.CardContentLoaderListener listener) {
            mListener = listener;
        }

        @NonNull
        @Override
        public Loader<List<ContextualCard>> onCreateLoader(int id, @Nullable Bundle bundle) {
            if (id == CARD_CONTENT_LOADER_ID) {
                return new CardContentLoader(mContext);
            } else {
                throw new IllegalArgumentException("Unknown loader id: " + id);
            }
        }

        @Override
        public void onLoadFinished(@NonNull Loader<List<ContextualCard>> loader,
                List<ContextualCard> contextualCards) {
            if (mListener != null) {
                mListener.onFinishCardLoading(contextualCards);
            }
        }

        @Override
        public void onLoaderReset(@NonNull Loader<List<ContextualCard>> loader) {

        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ public class PersonalSettingsFragment extends InstrumentedFragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContextualCardManager = new ContextualCardManager(getContext(), getSettingsLifecycle());
        mContextualCardManager.startCardContentLoading();
        mContextualCardManager.startCardContentLoading(this);
    }

    @Override