Implemented the CardContentLoader
- Implemented the CardContentLoader - Refactored the CardLoader and increased the code readable - Added try-with-resource - Removed all custom card codes - Modified ContextualCardManager to add CardContentLoaderCallbacks Bug: 112521307 Test: robotest Change-Id: Ieb9cdeaacdfb8fdae9747c60395206d15af034c1
This commit is contained in:
@@ -17,35 +17,27 @@
|
|||||||
package com.android.settings.homepage;
|
package com.android.settings.homepage;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.android.settingslib.utils.AsyncLoaderCompat;
|
import com.android.settingslib.utils.AsyncLoaderCompat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
//TODO(b/112521307): Implement this to make it work with the card database.
|
public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
|
||||||
public class CardContentLoader {
|
static final int CARD_CONTENT_LOADER_ID = 1;
|
||||||
|
|
||||||
private static final String TAG = "CardContentLoader";
|
private Context mContext;
|
||||||
|
|
||||||
private CardContentLoaderListener mListener;
|
|
||||||
|
|
||||||
public interface CardContentLoaderListener {
|
public interface CardContentLoaderListener {
|
||||||
void onFinishCardLoading(List<ContextualCard> contextualCards);
|
void onFinishCardLoading(List<ContextualCard> contextualCards);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CardContentLoader() {
|
CardContentLoader(Context context) {
|
||||||
}
|
|
||||||
|
|
||||||
void setListener(CardContentLoaderListener listener) {
|
|
||||||
mListener = listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class CardLoader extends AsyncLoaderCompat<List<ContextualCard>> {
|
|
||||||
|
|
||||||
public CardLoader(Context context) {
|
|
||||||
super(context);
|
super(context);
|
||||||
|
mContext = context.getApplicationContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -56,7 +48,27 @@ public class CardContentLoader {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public List<ContextualCard> loadInBackground() {
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.homepage;
|
package com.android.settings.homepage;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -190,4 +191,12 @@ public class CardDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
return sCardDatabaseHelper;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.homepage;
|
package com.android.settings.homepage;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
|
import android.database.Cursor;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -58,8 +59,8 @@ public class ContextualCard {
|
|||||||
private final int mIconResId;
|
private final int mIconResId;
|
||||||
private final int mCardAction;
|
private final int mCardAction;
|
||||||
private final long mExpireTimeMS;
|
private final long mExpireTimeMS;
|
||||||
private final Drawable mIconDrawable;
|
|
||||||
private final boolean mIsHalfWidth;
|
private final boolean mIsHalfWidth;
|
||||||
|
private final Drawable mIconDrawable;
|
||||||
|
|
||||||
String getName() {
|
String getName() {
|
||||||
return mName;
|
return mName;
|
||||||
@@ -137,6 +138,10 @@ public class ContextualCard {
|
|||||||
return mIsHalfWidth;
|
return mIsHalfWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isCustomCard() {
|
||||||
|
return TextUtils.isEmpty(mSliceUri);
|
||||||
|
}
|
||||||
|
|
||||||
public ContextualCard(Builder builder) {
|
public ContextualCard(Builder builder) {
|
||||||
mName = builder.mName;
|
mName = builder.mName;
|
||||||
mCardType = builder.mCardType;
|
mCardType = builder.mCardType;
|
||||||
@@ -158,6 +163,31 @@ public class ContextualCard {
|
|||||||
mIsHalfWidth = builder.mIsHalfWidth;
|
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
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return mName.hashCode();
|
return mName.hashCode();
|
||||||
|
@@ -16,9 +16,17 @@
|
|||||||
|
|
||||||
package com.android.settings.homepage;
|
package com.android.settings.homepage;
|
||||||
|
|
||||||
|
import static com.android.settings.homepage.CardContentLoader.CARD_CONTENT_LOADER_ID;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.widget.BaseAdapter;
|
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.Lifecycle;
|
||||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
|
|
||||||
@@ -60,9 +68,12 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade
|
|||||||
mControllerRendererPool = new ControllerRendererPool();
|
mControllerRendererPool = new ControllerRendererPool();
|
||||||
}
|
}
|
||||||
|
|
||||||
void startCardContentLoading() {
|
void startCardContentLoading(PersonalSettingsFragment fragment) {
|
||||||
final CardContentLoader cardContentLoader = new CardContentLoader();
|
final CardContentLoaderCallbacks cardContentLoaderCallbacks =
|
||||||
cardContentLoader.setListener(this);
|
new CardContentLoaderCallbacks(mContext);
|
||||||
|
cardContentLoaderCallbacks.setListener(this);
|
||||||
|
LoaderManager.getInstance(fragment).initLoader(CARD_CONTENT_LOADER_ID, null /* bundle */,
|
||||||
|
cardContentLoaderCallbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadCardControllers() {
|
private void loadCardControllers() {
|
||||||
@@ -140,4 +151,43 @@ public class ContextualCardManager implements CardContentLoader.CardContentLoade
|
|||||||
public ControllerRendererPool getControllerRendererPool() {
|
public ControllerRendererPool getControllerRendererPool() {
|
||||||
return mControllerRendererPool;
|
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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -43,7 +43,7 @@ public class PersonalSettingsFragment extends InstrumentedFragment {
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
mContextualCardManager = new ContextualCardManager(getContext(), getSettingsLifecycle());
|
mContextualCardManager = new ContextualCardManager(getContext(), getSettingsLifecycle());
|
||||||
mContextualCardManager.startCardContentLoading();
|
mContextualCardManager.startCardContentLoading(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user