Loading src/com/android/settings/homepage/CardContentLoader.java +33 −21 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; } } src/com/android/settings/homepage/CardDatabaseHelper.java +9 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } } src/com/android/settings/homepage/ContextualCard.java +31 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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(); Loading src/com/android/settings/homepage/ContextualCardManager.java +53 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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) { } } } src/com/android/settings/homepage/PersonalSettingsFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
src/com/android/settings/homepage/CardContentLoader.java +33 −21 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; } }
src/com/android/settings/homepage/CardDatabaseHelper.java +9 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } }
src/com/android/settings/homepage/ContextualCard.java +31 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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(); Loading
src/com/android/settings/homepage/ContextualCardManager.java +53 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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) { } } }
src/com/android/settings/homepage/PersonalSettingsFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading