Category images and colours added.

Note that the category images are not scaled for each drawable
directory (would like to move to vectors).
This commit is contained in:
Peter Serwylo 2017-03-15 15:38:15 +11:00
parent ff946f6a7d
commit 7796a3f374
16 changed files with 67 additions and 17 deletions

View File

@ -107,7 +107,7 @@ public class CategorySpan extends ReplacementSpan {
// The background which goes behind the text. // The background which goes behind the text.
Paint backgroundPaint = new Paint(); Paint backgroundPaint = new Paint();
backgroundPaint.setColor(CategoryController.getBackgroundColour(categoryName.toString())); backgroundPaint.setColor(CategoryController.getBackgroundColour(context, categoryName.toString()));
backgroundPaint.setAntiAlias(true); backgroundPaint.setAntiAlias(true);
canvas.drawRoundRect(backgroundRect, cornerRadius, cornerRadius, backgroundPaint); canvas.drawRoundRect(backgroundRect, cornerRadius, cornerRadius, backgroundPaint);

View File

@ -9,6 +9,7 @@ import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.CursorLoader; import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewCompat;
@ -16,6 +17,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.fdroid.fdroid.R; import org.fdroid.fdroid.R;
@ -28,6 +30,7 @@ import java.util.Random;
public class CategoryController extends RecyclerView.ViewHolder implements LoaderManager.LoaderCallbacks<Cursor> { public class CategoryController extends RecyclerView.ViewHolder implements LoaderManager.LoaderCallbacks<Cursor> {
private final Button viewAll; private final Button viewAll;
private final TextView heading; private final TextView heading;
private final ImageView image;
private final AppPreviewAdapter appCardsAdapter; private final AppPreviewAdapter appCardsAdapter;
private final FrameLayout background; private final FrameLayout background;
@ -48,7 +51,7 @@ public class CategoryController extends RecyclerView.ViewHolder implements Loade
viewAll.setOnClickListener(onViewAll); viewAll.setOnClickListener(onViewAll);
heading = (TextView) itemView.findViewById(R.id.name); heading = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.category_image);
background = (FrameLayout) itemView.findViewById(R.id.category_background); background = (FrameLayout) itemView.findViewById(R.id.category_background);
RecyclerView appCards = (RecyclerView) itemView.findViewById(R.id.app_cards); RecyclerView appCards = (RecyclerView) itemView.findViewById(R.id.app_cards);
@ -58,25 +61,47 @@ public class CategoryController extends RecyclerView.ViewHolder implements Loade
void bindModel(@NonNull String categoryName) { void bindModel(@NonNull String categoryName) {
currentCategory = categoryName; currentCategory = categoryName;
heading.setText(translateCategory(categoryName));
int categoryNameId = getCategoryResource(activity, categoryName, "string", false);
String translatedName = categoryNameId == 0 ? categoryName : activity.getString(categoryNameId);
heading.setText(translatedName);
viewAll.setVisibility(View.INVISIBLE); viewAll.setVisibility(View.INVISIBLE);
loaderManager.initLoader(currentCategory.hashCode(), null, this); loaderManager.initLoader(currentCategory.hashCode(), null, this);
loaderManager.initLoader(currentCategory.hashCode() + 1, null, this); loaderManager.initLoader(currentCategory.hashCode() + 1, null, this);
background.setBackgroundColor(getBackgroundColour(categoryName)); background.setBackgroundColor(getBackgroundColour(activity, categoryName));
int categoryImageId = getCategoryResource(activity, categoryName, "drawable", true);
if (categoryImageId == 0) {
image.setVisibility(View.GONE);
} else {
image.setVisibility(View.VISIBLE);
image.setImageDrawable(ContextCompat.getDrawable(activity, categoryImageId));
}
} }
/** /**
* Attempt to translate category name with fallback to default name if no translation available * @param requiresLowerCaseId Previously categories were translated using strings such as "category_Reading" for
* the "Reading" category. Now we also need to have drawable resources such as
* "category_reading". Note how drawables must have only lower case letters, whereas
* we already have upper case letters in strings.xml. Hence this flag.
*/ */
private String translateCategory(@NonNull String categoryName) { private static int getCategoryResource(Context context, @NonNull String categoryName, String resourceType, boolean requiresLowerCaseId) {
String resId = categoryName.replace(" & ", "_").replace(" ", "_").replace("'", ""); String suffix = categoryName.replace(" & ", "_").replace(" ", "_").replace("'", "");
int id = activity.getResources().getIdentifier("category_" + resId, "string", activity.getPackageName()); if (requiresLowerCaseId) {
return id == 0 ? categoryName : activity.getString(id); suffix = suffix.toLowerCase();
}
return context.getResources().getIdentifier("category_" + suffix, resourceType, context.getPackageName());
}
public static int getBackgroundColour(Context context, @NonNull String categoryName) {
int colourId = getCategoryResource(context, categoryName, "color", false);
if (colourId > 0) {
return ContextCompat.getColor(context, colourId);
} }
public static int getBackgroundColour(@NonNull String categoryName) {
// Seed based on the categoryName, so that each time we try to choose a colour for the same // Seed based on the categoryName, so that each time we try to choose a colour for the same
// category it will look the same for each different user, and each different session. // category it will look the same for each different user, and each different session.
Random random = new Random(categoryName.toLowerCase().hashCode()); Random random = new Random(categoryName.toLowerCase().hashCode());

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -54,10 +54,15 @@
<ImageView <ImageView
android:id="@+id/category_image" android:id="@+id/category_image"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="@+id/category_background"
app:layout_constraintTop_toBottomOf="@+id/button" app:layout_constraintEnd_toEndOf="@+id/category_background"
android:layout_width="100dp" app:layout_constraintTop_toTopOf="@+id/category_background"
android:layout_height="100dp" app:layout_constraintBottom_toBottomOf="@+id/category_background"
android:layout_width="0dp"
android:layout_height="0dp"
tools:src="@drawable/category_graphics"
android:scaleType="fitStart"
android:importantForAccessibility="no"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
@ -76,6 +81,8 @@
android:paddingBottom="@dimen/category_preview__app_list__padding__vertical" android:paddingBottom="@dimen/category_preview__app_list__padding__vertical"
android:clipToPadding="false" android:clipToPadding="false"
android:layout_marginLeft="8dp" android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"/> android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" />
</android.support.constraint.ConstraintLayout> </android.support.constraint.ConstraintLayout>

View File

@ -5,6 +5,24 @@
<color name="unverified">#ff999999</color> <color name="unverified">#ff999999</color>
<color name="red">#ffdd2c00</color> <color name="red">#ffdd2c00</color>
<color name="category_connectivity">#CBEFEC</color>
<color name="category_development">#E2D6BC</color>
<color name="category_games">#6D6862</color>
<color name="category_graphics">#F25050</color>
<color name="category_internet">#DBDDC9</color>
<color name="category_money">#DDDDD0</color>
<color name="category_multimedia">#FF7F66</color>
<color name="category_navigation">#94D6FD</color>
<color name="category_phone_sms">#F3CFC0</color>
<color name="category_reading">#D6A07A</color>
<color name="category_science_education">#F4F4EC</color>
<color name="category_security">#6D6862</color>
<color name="category_sports_health">#72C7EA</color>
<color name="category_system">#D3DB77</color>
<color name="category_theming">#DEEFE9</color>
<color name="category_time">#FF7043</color>
<color name="category_writing">#F2E9CE</color>
<color name="fdroid_blue">#ff1976d2</color> <color name="fdroid_blue">#ff1976d2</color>
<color name="fdroid_blue_dark">#ff0d47a1</color> <color name="fdroid_blue_dark">#ff0d47a1</color>
<color name="fdroid_blue_darkest">#ff042570</color> <color name="fdroid_blue_darkest">#ff042570</color>