Merge "Add a filter to take out unnecessary homepage data."
This commit is contained in:
@@ -16,13 +16,21 @@
|
||||
|
||||
package com.android.settings.homepage;
|
||||
|
||||
import static android.app.slice.Slice.HINT_ERROR;
|
||||
|
||||
import static androidx.slice.widget.SliceLiveData.SUPPORTED_SPECS;
|
||||
|
||||
import android.content.ContentProviderClient;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.slice.Slice;
|
||||
|
||||
import com.android.settings.homepage.deviceinfo.DataUsageSlice;
|
||||
import com.android.settings.homepage.deviceinfo.DeviceInfoSlice;
|
||||
@@ -31,6 +39,7 @@ import com.android.settingslib.utils.AsyncLoaderCompat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
|
||||
private static final String TAG = "CardContentLoader";
|
||||
@@ -59,18 +68,18 @@ public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
|
||||
try (Cursor cursor = getContextualCardsFromProvider()) {
|
||||
if (cursor.getCount() == 0) {
|
||||
result.addAll(createStaticCards());
|
||||
return result;
|
||||
}
|
||||
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);
|
||||
} else {
|
||||
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;
|
||||
return filter(result);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -95,15 +104,15 @@ public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
|
||||
.build());
|
||||
//TODO(b/115971399): Will change following values of SliceUri and Name
|
||||
// after landing these slice cards.
|
||||
add(new ContextualCard.Builder()
|
||||
.setSliceUri("content://com.android.settings.slices/intent/battery_card")
|
||||
.setName(packageName + "/" + "battery_card")
|
||||
.setPackageName(packageName)
|
||||
.setRankingScore(rankingScore)
|
||||
.setAppVersion(appVersionCode)
|
||||
.setCardType(ContextualCard.CardType.SLICE)
|
||||
.setIsHalfWidth(true)
|
||||
.build());
|
||||
// add(new ContextualCard.Builder()
|
||||
// .setSliceUri("content://com.android.settings.slices/battery_card")
|
||||
// .setName(packageName + "/" + "battery_card")
|
||||
// .setPackageName(packageName)
|
||||
// .setRankingScore(rankingScore)
|
||||
// .setAppVersion(appVersionCode)
|
||||
// .setCardType(ContextualCard.CardType.SLICE)
|
||||
// .setIsHalfWidth(true)
|
||||
// .build());
|
||||
add(new ContextualCard.Builder()
|
||||
.setSliceUri(DeviceInfoSlice.DEVICE_INFO_CARD_URI.toString())
|
||||
.setName(packageName + "/" + DeviceInfoSlice.PATH_DEVICE_INFO_CARD)
|
||||
@@ -126,6 +135,41 @@ public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
|
||||
return result;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
List<ContextualCard> filter(List<ContextualCard> candidates) {
|
||||
return candidates.stream().filter(card -> isCardEligibleToDisplay(card)).collect(
|
||||
Collectors.toList());
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isCardEligibleToDisplay(ContextualCard card) {
|
||||
if (card.isCustomCard()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final Uri uri = card.getSliceUri();
|
||||
|
||||
if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//check if the uri has a provider associated with.
|
||||
final ContentProviderClient provider =
|
||||
mContext.getContentResolver().acquireContentProviderClient(uri);
|
||||
if (provider == null) {
|
||||
return false;
|
||||
}
|
||||
//release contentProviderClient to prevent from memory leak.
|
||||
provider.release();
|
||||
|
||||
final Slice slice = Slice.bindSlice(mContext, uri, SUPPORTED_SPECS);
|
||||
if (slice == null || slice.hasHint(HINT_ERROR)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private long getAppVersionCode() {
|
||||
try {
|
||||
return mContext.getPackageManager().getPackageInfo(mContext.getPackageName(),
|
||||
|
Reference in New Issue
Block a user