Skip to content

Commit

Permalink
implemented different theme color for each competitions, colored comp…
Browse files Browse the repository at this point in the history
…etition list items
  • Loading branch information
s6joui committed Dec 4, 2018
1 parent 6c07c8f commit 8de59e1
Show file tree
Hide file tree
Showing 14 changed files with 182 additions and 48 deletions.
7 changes: 4 additions & 3 deletions app/build.gradle
@@ -1,11 +1,11 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 27
compileSdkVersion 28
defaultConfig {
applicationId "tech.joeyck.livefootball"
minSdkVersion 21
targetSdkVersion 27
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Expand All @@ -28,7 +28,7 @@ dependencies {
implementation "com.android.support:appcompat-v7:$support_version"
implementation "com.android.support:recyclerview-v7:$support_version"
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:27.1.1'
implementation "com.android.support:design:$support_version"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
Expand All @@ -42,4 +42,5 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
implementation 'com.jakewharton.threetenabp:threetenabp:1.1.1'
implementation "com.android.support:cardview-v7:$support_version"
}
@@ -1,5 +1,7 @@
package tech.joeyck.livefootball.ui.competition_detail;

import android.content.res.ColorStateList;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
Expand All @@ -21,9 +23,11 @@ public class CompetitionActivity extends AppCompatActivity {
public static final String COMPETITION_ID_EXTRA = "COMPETITION_ID_EXTRA";
public static final String COMPETITION_NAME_EXTRA = "COMPETITION_NAME_EXTRA";
public static final String COMPETITION_MATCHDAY_EXTRA = "COMPETITION_MATCHDAY_EXTRA";
public static final String COMPETITION_COLOR_EXTRA = "COMPETITION_COLOR_EXTRA";

FragmentManager mFragmentManager;
CompetitionViewModel mViewModel;
BottomNavigationView mBottomNavigationView;

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
Expand All @@ -44,14 +48,16 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_competition);
BottomNavigationView navigation = findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
mBottomNavigationView = findViewById(R.id.navigation);
mBottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

int competitionId = getIntent().getIntExtra(COMPETITION_ID_EXTRA, -1);
int matchday = getIntent().getIntExtra(COMPETITION_MATCHDAY_EXTRA, -1);
int themeColor = getIntent().getIntExtra(COMPETITION_COLOR_EXTRA, R.color.colorPrimary);
String competitionName = getIntent().getStringExtra(COMPETITION_NAME_EXTRA);

setTitle(competitionName);
setThemeColor(themeColor);

CompetitionViewModelFactory factory = InjectorUtils.provideCompetitionViewModelFactory(this.getApplicationContext(),competitionId,competitionName,matchday);
mViewModel = factory.create(CompetitionViewModel.class);
Expand Down Expand Up @@ -84,4 +90,26 @@ private void switchFragments(String tag){
fragmentTransaction.commitNowAllowingStateLoss();
}

private void setThemeColor(int colorResourceId){
if(getSupportActionBar()!=null) getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(colorResourceId)));

int[][] states = new int[][] {
new int[] { android.R.attr.state_enabled}, // enabled
new int[] {-android.R.attr.state_enabled}, // disabled
new int[] {-android.R.attr.state_checked}, // unchecked
new int[] { android.R.attr.state_pressed} // pressed
};

int[] colors = new int[] {
getResources().getColor(colorResourceId),
getResources().getColor(colorResourceId),
getResources().getColor(colorResourceId),
getResources().getColor(colorResourceId)
};

ColorStateList colorStateList = new ColorStateList(states,colors);
mBottomNavigationView.setItemTextColor(colorStateList);
mBottomNavigationView.setItemIconTintList(colorStateList);
}

}
Expand Up @@ -2,17 +2,18 @@

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import tech.joeyck.livefootball.R;
import tech.joeyck.livefootball.data.database.CompetitionEntity;
import tech.joeyck.livefootball.utilities.CompetitionUtils;

public class CompetitionAdapter extends RecyclerView.Adapter<CompetitionAdapter.CompetitionAdapterViewHolder> {

Expand Down Expand Up @@ -67,15 +68,16 @@ public CompetitionAdapterViewHolder onCreateViewHolder(ViewGroup viewGroup, int
* details for this particular position, using the "position" argument that is conveniently
* passed into us.
*
* @param CompetitionAdapterViewHolder The ViewHolder which should be updated to represent the
* @param viewHolder The ViewHolder which should be updated to represent the
* contents of the item at the given position in the data set.
* @param position The position of the item within the adapter's data set.
*/
@Override
public void onBindViewHolder(CompetitionAdapterViewHolder CompetitionAdapterViewHolder, int position) {
public void onBindViewHolder(CompetitionAdapterViewHolder viewHolder, int position) {
CompetitionEntity currentCompetition = mCompetitions.get(position);
CompetitionAdapterViewHolder.textView.setText(currentCompetition.getName());
CompetitionAdapterViewHolder.countryTextView.setText(currentCompetition.getArea().getName());
viewHolder.textView.setText(currentCompetition.getName());
viewHolder.countryTextView.setText(currentCompetition.getArea().getName());
viewHolder.cardView.setCardBackgroundColor(mContext.getResources().getColor(CompetitionUtils.getColorResourceId(currentCompetition.getId())));
}

/**
Expand Down Expand Up @@ -116,12 +118,14 @@ public interface CompetitionAdapterOnItemClickHandler {
*/
class CompetitionAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

final CardView cardView;
final TextView textView;
final TextView countryTextView;

CompetitionAdapterViewHolder(View view) {
super(view);

cardView = (CardView) view;
textView = view.findViewById(R.id.competition_name);
countryTextView = view.findViewById(R.id.competition_country);

Expand Down
Expand Up @@ -10,6 +10,7 @@
import tech.joeyck.livefootball.R;
import tech.joeyck.livefootball.data.database.CompetitionEntity;
import tech.joeyck.livefootball.ui.competition_detail.CompetitionActivity;
import tech.joeyck.livefootball.utilities.CompetitionUtils;
import tech.joeyck.livefootball.utilities.InjectorUtils;

public class MainActivity extends AppCompatActivity implements CompetitionAdapter.CompetitionAdapterOnItemClickHandler {
Expand Down Expand Up @@ -49,6 +50,7 @@ public void onItemClick(CompetitionEntity competition) {
competitionDetailIntent.putExtra(CompetitionActivity.COMPETITION_ID_EXTRA, competition.getId());
competitionDetailIntent.putExtra(CompetitionActivity.COMPETITION_NAME_EXTRA,competition.getName());
competitionDetailIntent.putExtra(CompetitionActivity.COMPETITION_MATCHDAY_EXTRA,competition.getCurrentSeason().getCurrentMatchday());
competitionDetailIntent.putExtra(CompetitionActivity.COMPETITION_COLOR_EXTRA,CompetitionUtils.getColorResourceId(competition.getId()));
startActivity(competitionDetailIntent);
}
}
@@ -0,0 +1,33 @@
package tech.joeyck.livefootball.utilities;

import android.util.SparseIntArray;

import java.util.HashMap;

import tech.joeyck.livefootball.R;

public class CompetitionUtils {

private static final SparseIntArray competitionColors;
static
{
competitionColors = new SparseIntArray();
competitionColors.put(2013, R.color.serie_a_brazil);
competitionColors.put(2021, R.color.permier_league);
competitionColors.put(2016, R.color.championship);
competitionColors.put(2018, R.color.europa_league);
competitionColors.put(2001, R.color.champions_league);
competitionColors.put(2015, R.color.ligue_1);
competitionColors.put(2019, R.color.seria_A_italy);
competitionColors.put(2002, R.color.bundesliga);
competitionColors.put(2003, R.color.eredivise);
competitionColors.put(2017, R.color.primeira_liga);
competitionColors.put(2014, R.color.la_liga);
competitionColors.put(2000, R.color.world_cup);
}

public static int getColorResourceId(int competitionId){
return competitionColors.get(competitionId);
}

}
12 changes: 6 additions & 6 deletions app/src/main/res/drawable/competition_item_background.xml
@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/light_green">
android:color="@color/light_gray">
<item>
<selector>
<item android:state_selected="true">
<shape>
<corners android:radius="10dp"/>
<solid android:color="@color/light_green"/>
<corners android:radius="4dp"/>
<solid android:color="@color/light_gray"/>
</shape>
</item>

<item android:state_activated="true">
<shape>
<corners android:radius="10dp"/>
<solid android:color="@color/light_green"/>
<corners android:radius="4dp" />
<solid android:color="@color/light_gray"/>
</shape>
</item>

<item>
<shape>
<corners android:radius="10dp"/>
<corners android:radius="4dp"/>
<solid android:color="@color/white"/>
</shape>
</item>
Expand Down
28 changes: 28 additions & 0 deletions app/src/main/res/drawable/rounded_item_background.xml
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/light_gray">
<item>
<selector>
<item android:state_selected="true">
<shape>
<corners android:radius="4dp"/>
<solid android:color="@color/light_gray"/>
</shape>
</item>

<item android:state_activated="true">
<shape>
<corners android:radius="4dp" />
<solid android:color="@color/light_gray"/>
</shape>
</item>

<item>
<shape>
<corners android:radius="4dp"/>
<solid android:color="@color/white"/>
</shape>
</item>
</selector>
</item>
</ripple>
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/rounded_item_bottom_background.xml
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomRightRadius="4dp" android:bottomLeftRadius="4dp"/>
<solid android:color="#11000000"/>
</shape>
1 change: 1 addition & 0 deletions app/src/main/res/layout/activity_main.xml
Expand Up @@ -21,6 +21,7 @@
app:contentScrim="@color/white"
app:expandedTitleMarginStart="12dp"
app:expandedTitleMarginBottom="24dp"
app:expandedTitleTextAppearance="@style/AppTheme.ExpandedTitleAppearance"
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<android.support.v7.widget.Toolbar
Expand Down
70 changes: 41 additions & 29 deletions app/src/main/res/layout/competition_item.xml
@@ -1,40 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:layout_margin="8dp"
android:elevation="2dp"
android:background="@drawable/competition_item_background"
android:orientation="vertical">
card_view:cardCornerRadius="4dp"
android:orientation="vertical"
android:foreground="?android:attr/selectableItemBackground"
card_view:cardBackgroundColor="@color/colorPrimary"
android:clickable="true"
android:focusable="true">

<TextView
android:id="@+id/competition_name"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="Competition Name"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingBottom="8dp"
android:gravity="center_vertical"
android:textStyle="bold"/>
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#11000000" />
<TextView
android:id="@+id/competition_name"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="Competition Name"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:textColor="@color/white"
android:gravity="center_vertical"
android:textStyle="bold"/>

<FrameLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#22000000" />

<TextView
android:id="@+id/competition_country"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="6dp"
android:fontFamily="sans-serif-light"
android:text="Country" />
<TextView
android:id="@+id/competition_country"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingBottom="12dp"
android:textColor="@color/white"
android:fontFamily="sans-serif-light"
android:background="@drawable/rounded_item_bottom_background"
android:text="Country" />
</LinearLayout>

</LinearLayout>
</android.support.v7.widget.CardView>
4 changes: 2 additions & 2 deletions app/src/main/res/layout/match_item.xml
Expand Up @@ -7,8 +7,8 @@
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:background="@drawable/competition_item_background"
android:elevation="2dp"
android:background="@drawable/rounded_item_background"
android:elevation="1dp"
android:padding="8dp">

<TextView
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/res/values/competition_colors.xml
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="permier_league">#3F1052</color>
<color name="serie_a_brazil">#10502f</color>
<color name="championship">#777777</color>
<color name="europa_league">#093E84</color>
<color name="champions_league">#162E58</color>
<color name="ligue_1">#90A5B6</color>
<color name="seria_A_italy">#1D9647</color>
<color name="bundesliga">#B12829</color>
<color name="eredivise">#FF9A00</color>
<color name="primeira_liga">#822B31</color>
<color name="la_liga">#003472</color>
<color name="world_cup">#0087e6</color>
</resources>
5 changes: 5 additions & 0 deletions app/src/main/res/values/styles.xml
Expand Up @@ -17,4 +17,9 @@

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

<style name="AppTheme.ExpandedTitleAppearance" parent="TextAppearance.AppCompat.Title">
<item name="android:textSize">36sp</item>
<item name="android:textStyle">bold</item>
</style>

</resources>

0 comments on commit 8de59e1

Please sign in to comment.