initial
56
Football/.gitignore
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
Thumbs.db#built application files
|
||||
*.apk
|
||||
*.ap_
|
||||
|
||||
# files for the dex VM
|
||||
*.dex
|
||||
|
||||
# Java class files
|
||||
*.class
|
||||
|
||||
# generated files
|
||||
bin/
|
||||
gen/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Windows thumbnail db
|
||||
Thumbs.db
|
||||
|
||||
# OSX files
|
||||
.DS_Store
|
||||
|
||||
# Eclipse project files
|
||||
.classpath
|
||||
.project
|
||||
|
||||
# Android Studio
|
||||
.idea
|
||||
.idea/workspace.xml
|
||||
.gradle
|
||||
build/
|
||||
captures/
|
||||
|
||||
*.iws
|
||||
*.iml
|
||||
|
||||
# calabash
|
||||
screenshot*
|
||||
.irb-history
|
||||
test_servers
|
||||
|
||||
# crashlytics
|
||||
crashlytics-build.properties
|
||||
com_crashlytics_export_strings.xml
|
||||
|
||||
gradle.properties
|
||||
|
||||
screenshot*
|
||||
|
||||
# sbt
|
||||
00-gradle-generated.sbt
|
||||
target/
|
||||
project/project
|
||||
|
||||
|
||||
7
Football/CHANGELOG.md
Normal file
@@ -0,0 +1,7 @@
|
||||
* fixed internet permission for api level > 22
|
||||
* created league enum class to make adding leagues easier, moved league names to Strings.xml
|
||||
* try/catch clause for share intents to prevent ActivityNotFoundException
|
||||
* Button and image content description for accessibility
|
||||
* Implemented RTL layout
|
||||
* Moved Strings to strings.xml and added translatable flag where required
|
||||
* added a list widget showing all saved matches
|
||||
6
Football/app/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/build
|
||||
project/project
|
||||
/target/
|
||||
.idea
|
||||
*.iml
|
||||
target/
|
||||
25
Football/app/build.gradle
Normal file
@@ -0,0 +1,25 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 21
|
||||
buildToolsVersion "21.1.2"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "barqsoft.footballscores"
|
||||
minSdkVersion 10
|
||||
targetSdkVersion 21
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
compile 'com.android.support:appcompat-v7:21.0.3'
|
||||
}
|
||||
1
Football/app/build.sbt
Normal file
@@ -0,0 +1 @@
|
||||
protifySettings
|
||||
83
Football/app/manifest-merger-release-report.txt
Normal file
@@ -0,0 +1,83 @@
|
||||
-- Merging decision tree log ---
|
||||
manifest
|
||||
ADDED from AndroidManifest.xml:2:1
|
||||
xmlns:android
|
||||
ADDED from AndroidManifest.xml:2:11
|
||||
package
|
||||
ADDED from AndroidManifest.xml:3:5
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
android:versionName
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
android:versionCode
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
uses-permission#android.permission.INTERNET
|
||||
ADDED from AndroidManifest.xml:5:5
|
||||
android:maxSdkVersion
|
||||
ADDED from AndroidManifest.xml:7:9
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:6:9
|
||||
application
|
||||
ADDED from AndroidManifest.xml:9:5
|
||||
MERGED from com.android.support:appcompat-v7:21.0.3:16:5
|
||||
MERGED from com.android.support:support-v4:21.0.3:16:5
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:12:9
|
||||
android:allowBackup
|
||||
ADDED from AndroidManifest.xml:10:9
|
||||
android:icon
|
||||
ADDED from AndroidManifest.xml:11:9
|
||||
android:theme
|
||||
ADDED from AndroidManifest.xml:13:9
|
||||
activity#barqsoft.footballscores.MainActivity
|
||||
ADDED from AndroidManifest.xml:14:9
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:16:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:15:13
|
||||
intent-filter#android.intent.action.MAIN+android.intent.category.LAUNCHER
|
||||
ADDED from AndroidManifest.xml:17:13
|
||||
action#android.intent.action.MAIN
|
||||
ADDED from AndroidManifest.xml:18:17
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:18:25
|
||||
category#android.intent.category.LAUNCHER
|
||||
ADDED from AndroidManifest.xml:20:17
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:20:27
|
||||
provider#barqsoft.footballscores.ScoresProvider
|
||||
ADDED from AndroidManifest.xml:24:9
|
||||
android:authorities
|
||||
ADDED from AndroidManifest.xml:26:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:25:13
|
||||
activity#barqsoft.footballscores.AboutActivity
|
||||
ADDED from AndroidManifest.xml:28:9
|
||||
android:label
|
||||
ADDED from AndroidManifest.xml:30:13
|
||||
android:parentActivityName
|
||||
ADDED from AndroidManifest.xml:31:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:29:13
|
||||
meta-data#android.support.PARENT_ACTIVITY
|
||||
ADDED from AndroidManifest.xml:32:13
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:33:17
|
||||
android:value
|
||||
ADDED from AndroidManifest.xml:34:17
|
||||
service#barqsoft.footballscores.service.myFetchService
|
||||
ADDED from AndroidManifest.xml:36:9
|
||||
android:name
|
||||
ADDED from AndroidManifest.xml:36:18
|
||||
uses-sdk
|
||||
INJECTED from AndroidManifest.xml:0:0 reason: use-sdk injection requested
|
||||
MERGED from com.android.support:appcompat-v7:21.0.3:15:5
|
||||
MERGED from com.android.support:support-v4:21.0.3:15:5
|
||||
android:targetSdkVersion
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
android:minSdkVersion
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
INJECTED from AndroidManifest.xml:0:0
|
||||
17
Football/app/proguard-rules.pro
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in E:\Users\yehya khaled\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
@@ -0,0 +1,13 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.app.Application;
|
||||
import android.test.ApplicationTestCase;
|
||||
|
||||
/**
|
||||
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
|
||||
*/
|
||||
public class ApplicationTest extends ApplicationTestCase<Application> {
|
||||
public ApplicationTest() {
|
||||
super(Application.class);
|
||||
}
|
||||
}
|
||||
51
Football/app/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="barqsoft.footballscores" >
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.INTERNET" />
|
||||
|
||||
<application
|
||||
android:supportsRtl="true"
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme" >
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<provider
|
||||
android:exported="true"
|
||||
android:name=".ScoresProvider"
|
||||
android:authorities="barqsoft.footballscores" />
|
||||
|
||||
<activity
|
||||
android:name=".AboutActivity"
|
||||
android:label="About"
|
||||
android:parentActivityName=".MainActivity" >
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value="barqsoft.footballscores.MainActivity" />
|
||||
</activity>
|
||||
<service android:name=".service.myFetchService" />
|
||||
|
||||
<receiver android:name=".widget.ListWidgetProvider">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.appwidget.provider"
|
||||
android:resource="@xml/list_widget_info" />
|
||||
</receiver>
|
||||
<service android:name=".widget.ListWidgetService"
|
||||
android:permission="android.permission.BIND_REMOTEVIEWS"
|
||||
/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,62 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
|
||||
public class AboutActivity extends ActionBarActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_about);
|
||||
if (savedInstanceState == null) {
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.add(R.id.container, new PlaceholderFragment())
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.menu_about, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
|
||||
//noinspection SimplifiableIfStatement
|
||||
if (id == R.id.action_settings) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* A placeholder fragment containing a simple view.
|
||||
*/
|
||||
public static class PlaceholderFragment extends Fragment {
|
||||
|
||||
public PlaceholderFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_about, container, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.net.Uri;
|
||||
import android.provider.BaseColumns;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 2/25/2015.
|
||||
*/
|
||||
public class DatabaseContract
|
||||
{
|
||||
public static final String SCORES_TABLE = "scores_table";
|
||||
public static final class scores_table implements BaseColumns
|
||||
{
|
||||
//Table data
|
||||
public static final String LEAGUE_COL = "league";
|
||||
public static final String DATE_COL = "date";
|
||||
public static final String TIME_COL = "time";
|
||||
public static final String HOME_COL = "home";
|
||||
public static final String AWAY_COL = "away";
|
||||
public static final String HOME_GOALS_COL = "home_goals";
|
||||
public static final String AWAY_GOALS_COL = "away_goals";
|
||||
public static final String MATCH_ID = "match_id";
|
||||
public static final String MATCH_DAY = "match_day";
|
||||
|
||||
//public static Uri SCORES_CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH)
|
||||
//.build();
|
||||
|
||||
//Types
|
||||
public static final String CONTENT_TYPE =
|
||||
ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + CONTENT_AUTHORITY + "/" + PATH;
|
||||
public static final String CONTENT_ITEM_TYPE =
|
||||
ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + CONTENT_AUTHORITY + "/" + PATH;
|
||||
|
||||
public static Uri buildScoreWithLeague()
|
||||
{
|
||||
return BASE_CONTENT_URI.buildUpon().appendPath("league").build();
|
||||
}
|
||||
public static Uri buildScoreWithId()
|
||||
{
|
||||
return BASE_CONTENT_URI.buildUpon().appendPath("id").build();
|
||||
}
|
||||
public static Uri buildScoreWithDate()
|
||||
{
|
||||
return BASE_CONTENT_URI.buildUpon().appendPath("date").build();
|
||||
}
|
||||
}
|
||||
//URI data
|
||||
public static final String CONTENT_AUTHORITY = "barqsoft.footballscores";
|
||||
public static final String PATH = "scores";
|
||||
public static Uri BASE_CONTENT_URI = Uri.parse("content://"+CONTENT_AUTHORITY);
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
public enum League {
|
||||
|
||||
BUNDESLIGA1(394, R.string.league_name_bundesliga1),
|
||||
BUNDESLIGA2(395, R.string.league_name_bundesliga2),
|
||||
LIGUE1(396, R.string.league_name_league1),
|
||||
LIGUE2(397, R.string.league_name_league2),
|
||||
PREMIER_LEAGUE(398, R.string.league_name_premierleague),
|
||||
PRIMERA_DIVISION(399, R.string.league_name_primeradivision),
|
||||
SEGUNDA_DIVISION(400, R.string.league_name_segundadivision),
|
||||
SERIE_A(401, R.string.league_name_seriea),
|
||||
PRIMERA_LIGA(402, R.string.league_name_primeraliga),
|
||||
Bundesliga3(403, R.string.league_name_bundesliga3),
|
||||
EREDIVISIE(404, R.string.league_name_eradivisie),
|
||||
CHAMPIONS_LEAGUE(405, R.string.league_name_championsleague);
|
||||
|
||||
/**
|
||||
* @param id of a league
|
||||
* @return League or null
|
||||
*/
|
||||
public static League getLeagueById(int id) {
|
||||
for(League league : values()) {
|
||||
if(league.getLeagueId() == id)
|
||||
return league;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context Context
|
||||
* @param league League or Null
|
||||
* @return The name of a given league or an error string if league is null
|
||||
*/
|
||||
public static String getLeagueName(Context context, @Nullable League league) {
|
||||
if(league != null)
|
||||
return league.getName(context);
|
||||
else
|
||||
return context.getString(R.string.league_name_not_found);
|
||||
}
|
||||
|
||||
|
||||
int leagueId;
|
||||
int nameResId;
|
||||
|
||||
League(int leagueId, int nameResId) {
|
||||
this.leagueId = leagueId;
|
||||
this.nameResId = nameResId;
|
||||
}
|
||||
|
||||
public int getLeagueId() {
|
||||
return leagueId;
|
||||
}
|
||||
|
||||
public int getNameResId() {
|
||||
return nameResId;
|
||||
}
|
||||
|
||||
public String getName(Context context) {
|
||||
return context.getString(getNameResId());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
public class MainActivity extends ActionBarActivity
|
||||
{
|
||||
public static int selected_match_id;
|
||||
public static int current_fragment = 2;
|
||||
public static String LOG_TAG = "MainActivity";
|
||||
private final String save_tag = "Save Test";
|
||||
private PagerFragment my_main;
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
Log.d(LOG_TAG, "Reached MainActivity onCreate");
|
||||
if (savedInstanceState == null) {
|
||||
my_main = new PagerFragment();
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.add(R.id.container, my_main)
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.menu_main, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
|
||||
//noinspection SimplifiableIfStatement
|
||||
if (id == R.id.action_about)
|
||||
{
|
||||
Intent start_about = new Intent(this,AboutActivity.class);
|
||||
startActivity(start_about);
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState)
|
||||
{
|
||||
Log.v(save_tag,"will save");
|
||||
Log.v(save_tag,"fragment: "+String.valueOf(my_main.mPagerHandler.getCurrentItem()));
|
||||
Log.v(save_tag,"selected id: "+selected_match_id);
|
||||
outState.putInt("Pager_Current",my_main.mPagerHandler.getCurrentItem());
|
||||
outState.putInt("Selected_match",selected_match_id);
|
||||
getSupportFragmentManager().putFragment(outState,"my_main",my_main);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(Bundle savedInstanceState)
|
||||
{
|
||||
Log.v(save_tag,"will retrive");
|
||||
Log.v(save_tag,"fragment: "+String.valueOf(savedInstanceState.getInt("Pager_Current")));
|
||||
Log.v(save_tag,"selected id: "+savedInstanceState.getInt("Selected_match"));
|
||||
current_fragment = savedInstanceState.getInt("Pager_Current");
|
||||
selected_match_id = savedInstanceState.getInt("Selected_match");
|
||||
my_main = (PagerFragment) getSupportFragmentManager().getFragment(savedInstanceState,"my_main");
|
||||
super.onRestoreInstanceState(savedInstanceState);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.LoaderManager;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import barqsoft.footballscores.service.myFetchService;
|
||||
|
||||
/**
|
||||
* A placeholder fragment containing a simple view.
|
||||
*/
|
||||
public class MainScreenFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor>
|
||||
{
|
||||
public scoresAdapter mAdapter;
|
||||
public static final int SCORES_LOADER = 0;
|
||||
private String[] fragmentdate = new String[1];
|
||||
private int last_selected_item = -1;
|
||||
|
||||
public MainScreenFragment()
|
||||
{
|
||||
}
|
||||
|
||||
private void update_scores()
|
||||
{
|
||||
Intent service_start = new Intent(getActivity(), myFetchService.class);
|
||||
getActivity().startService(service_start);
|
||||
}
|
||||
public void setFragmentDate(String date)
|
||||
{
|
||||
fragmentdate[0] = date;
|
||||
}
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
final Bundle savedInstanceState) {
|
||||
update_scores();
|
||||
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
|
||||
final ListView score_list = (ListView) rootView.findViewById(R.id.scores_list);
|
||||
mAdapter = new scoresAdapter(getActivity(),null,0);
|
||||
score_list.setAdapter(mAdapter);
|
||||
getLoaderManager().initLoader(SCORES_LOADER,null,this);
|
||||
mAdapter.detail_match_id = MainActivity.selected_match_id;
|
||||
score_list.setOnItemClickListener(new AdapterView.OnItemClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
|
||||
{
|
||||
ViewHolder selected = (ViewHolder) view.getTag();
|
||||
mAdapter.detail_match_id = selected.match_id;
|
||||
MainActivity.selected_match_id = (int) selected.match_id;
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(int i, Bundle bundle)
|
||||
{
|
||||
return new CursorLoader(getActivity(),DatabaseContract.scores_table.buildScoreWithDate(),
|
||||
null,null,fragmentdate,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor)
|
||||
{
|
||||
//Log.v(FetchScoreTask.LOG_TAG,"loader finished");
|
||||
//cursor.moveToFirst();
|
||||
/*
|
||||
while (!cursor.isAfterLast())
|
||||
{
|
||||
Log.v(FetchScoreTask.LOG_TAG,cursor.getString(1));
|
||||
cursor.moveToNext();
|
||||
}
|
||||
*/
|
||||
|
||||
int i = 0;
|
||||
cursor.moveToFirst();
|
||||
while (!cursor.isAfterLast())
|
||||
{
|
||||
i++;
|
||||
cursor.moveToNext();
|
||||
}
|
||||
//Log.v(FetchScoreTask.LOG_TAG,"Loader query: " + String.valueOf(i));
|
||||
mAdapter.swapCursor(cursor);
|
||||
//mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<Cursor> cursorLoader)
|
||||
{
|
||||
mAdapter.swapCursor(null);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.text.format.Time;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 2/27/2015.
|
||||
*/
|
||||
public class PagerFragment extends Fragment
|
||||
{
|
||||
public static final String TAG = PagerFragment.class.getSimpleName();
|
||||
public static final int NUM_PAGES = 5;
|
||||
public ViewPager mPagerHandler;
|
||||
private myPageAdapter mPagerAdapter;
|
||||
private MainScreenFragment[] viewFragments = new MainScreenFragment[5];
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
|
||||
{
|
||||
View rootView = inflater.inflate(R.layout.pager_fragment, container, false);
|
||||
mPagerHandler = (ViewPager) rootView.findViewById(R.id.pager);
|
||||
boolean isRTL = getResources().getBoolean(R.bool.is_rtl);
|
||||
Log.d(TAG, "RTL: " + (isRTL ? "enabled" : "disabled"));
|
||||
mPagerAdapter = new myPageAdapter(getChildFragmentManager(), isRTL);
|
||||
for (int i = 0;i < NUM_PAGES;i++)
|
||||
{
|
||||
Date fragmentdate = new Date(System.currentTimeMillis()+((i-2)*86400000));
|
||||
SimpleDateFormat mformat = new SimpleDateFormat("yyyy-MM-dd", getActivity().getResources().getConfiguration().locale);
|
||||
viewFragments[i] = new MainScreenFragment();
|
||||
viewFragments[i].setFragmentDate(mformat.format(fragmentdate));
|
||||
}
|
||||
mPagerHandler.setAdapter(mPagerAdapter);
|
||||
mPagerHandler.setCurrentItem(MainActivity.current_fragment);
|
||||
return rootView;
|
||||
}
|
||||
private class myPageAdapter extends FragmentStatePagerAdapter
|
||||
{
|
||||
boolean isRTL;
|
||||
|
||||
@Override
|
||||
public Fragment getItem(int i)
|
||||
{
|
||||
if(isRTL)
|
||||
i = getRTLPosition(i);
|
||||
return viewFragments[i];
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount()
|
||||
{
|
||||
return NUM_PAGES;
|
||||
}
|
||||
|
||||
public myPageAdapter(FragmentManager fm, boolean rtl)
|
||||
{
|
||||
super(fm);
|
||||
this.isRTL = rtl;
|
||||
}
|
||||
|
||||
// Returns the page title for the top indicator
|
||||
@Override
|
||||
public CharSequence getPageTitle(int position)
|
||||
{
|
||||
if(isRTL)
|
||||
position = getRTLPosition(position);
|
||||
return getDayName(getActivity(),System.currentTimeMillis()+((position-2)*86400000));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param position actual adapter position
|
||||
* @return the RTL position
|
||||
*/
|
||||
private int getRTLPosition(int position) {
|
||||
return getCount() - position - 1;
|
||||
}
|
||||
|
||||
public String getDayName(Context context, long dateInMillis) {
|
||||
// If the date is today, return the localized version of "Today" instead of the actual
|
||||
// day name.
|
||||
|
||||
Time t = new Time();
|
||||
t.setToNow();
|
||||
int julianDay = Time.getJulianDay(dateInMillis, t.gmtoff);
|
||||
int currentJulianDay = Time.getJulianDay(System.currentTimeMillis(), t.gmtoff);
|
||||
if (julianDay == currentJulianDay) {
|
||||
return context.getString(R.string.today);
|
||||
} else if ( julianDay == currentJulianDay +1 ) {
|
||||
return context.getString(R.string.tomorrow);
|
||||
}
|
||||
else if ( julianDay == currentJulianDay -1)
|
||||
{
|
||||
return context.getString(R.string.yesterday);
|
||||
}
|
||||
else
|
||||
{
|
||||
Time time = new Time();
|
||||
time.setToNow();
|
||||
// Otherwise, the format is just the day of the week (e.g "Wednesday".
|
||||
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE", getActivity().getResources().getConfiguration().locale);
|
||||
return dayFormat.format(dateInMillis);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
|
||||
import barqsoft.footballscores.DatabaseContract.scores_table;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 2/25/2015.
|
||||
*/
|
||||
public class ScoresDBHelper extends SQLiteOpenHelper
|
||||
{
|
||||
public static final String DATABASE_NAME = "Scores.db";
|
||||
private static final int DATABASE_VERSION = 2;
|
||||
public ScoresDBHelper(Context context)
|
||||
{
|
||||
super(context,DATABASE_NAME,null,DATABASE_VERSION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(SQLiteDatabase db)
|
||||
{
|
||||
final String CreateScoresTable = "CREATE TABLE " + DatabaseContract.SCORES_TABLE + " ("
|
||||
+ scores_table._ID + " INTEGER PRIMARY KEY,"
|
||||
+ scores_table.DATE_COL + " TEXT NOT NULL,"
|
||||
+ scores_table.TIME_COL + " INTEGER NOT NULL,"
|
||||
+ scores_table.HOME_COL + " TEXT NOT NULL,"
|
||||
+ scores_table.AWAY_COL + " TEXT NOT NULL,"
|
||||
+ scores_table.LEAGUE_COL + " INTEGER NOT NULL,"
|
||||
+ scores_table.HOME_GOALS_COL + " TEXT NOT NULL,"
|
||||
+ scores_table.AWAY_GOALS_COL + " TEXT NOT NULL,"
|
||||
+ scores_table.MATCH_ID + " INTEGER NOT NULL,"
|
||||
+ scores_table.MATCH_DAY + " INTEGER NOT NULL,"
|
||||
+ " UNIQUE ("+scores_table.MATCH_ID+") ON CONFLICT REPLACE"
|
||||
+ " );";
|
||||
db.execSQL(CreateScoresTable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
|
||||
{
|
||||
//Remove old values when upgrading.
|
||||
db.execSQL("DROP TABLE IF EXISTS " + DatabaseContract.SCORES_TABLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.content.UriMatcher;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteQueryBuilder;
|
||||
import android.net.Uri;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 2/25/2015.
|
||||
*/
|
||||
public class ScoresProvider extends ContentProvider
|
||||
{
|
||||
private static ScoresDBHelper mOpenHelper;
|
||||
private static final int MATCHES = 100;
|
||||
private static final int MATCHES_WITH_LEAGUE = 101;
|
||||
private static final int MATCHES_WITH_ID = 102;
|
||||
private static final int MATCHES_WITH_DATE = 103;
|
||||
private UriMatcher muriMatcher = buildUriMatcher();
|
||||
private static final SQLiteQueryBuilder ScoreQuery =
|
||||
new SQLiteQueryBuilder();
|
||||
private static final String SCORES_BY_LEAGUE = DatabaseContract.scores_table.LEAGUE_COL + " = ?";
|
||||
private static final String SCORES_BY_DATE =
|
||||
DatabaseContract.scores_table.DATE_COL + " LIKE ?";
|
||||
private static final String SCORES_BY_ID =
|
||||
DatabaseContract.scores_table.MATCH_ID + " = ?";
|
||||
|
||||
|
||||
static UriMatcher buildUriMatcher() {
|
||||
final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
|
||||
final String authority = DatabaseContract.BASE_CONTENT_URI.toString();
|
||||
matcher.addURI(authority, null , MATCHES);
|
||||
matcher.addURI(authority, "league" , MATCHES_WITH_LEAGUE);
|
||||
matcher.addURI(authority, "id" , MATCHES_WITH_ID);
|
||||
matcher.addURI(authority, "date" , MATCHES_WITH_DATE);
|
||||
return matcher;
|
||||
}
|
||||
|
||||
private int match_uri(Uri uri)
|
||||
{
|
||||
String link = uri.toString();
|
||||
{
|
||||
if(link.contentEquals(DatabaseContract.BASE_CONTENT_URI.toString()))
|
||||
{
|
||||
return MATCHES;
|
||||
}
|
||||
else if(link.contentEquals(DatabaseContract.scores_table.buildScoreWithDate().toString()))
|
||||
{
|
||||
return MATCHES_WITH_DATE;
|
||||
}
|
||||
else if(link.contentEquals(DatabaseContract.scores_table.buildScoreWithId().toString()))
|
||||
{
|
||||
return MATCHES_WITH_ID;
|
||||
}
|
||||
else if(link.contentEquals(DatabaseContract.scores_table.buildScoreWithLeague().toString()))
|
||||
{
|
||||
return MATCHES_WITH_LEAGUE;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@Override
|
||||
public boolean onCreate()
|
||||
{
|
||||
mOpenHelper = new ScoresDBHelper(getContext());
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(Uri uri)
|
||||
{
|
||||
final int match = muriMatcher.match(uri);
|
||||
switch (match) {
|
||||
case MATCHES:
|
||||
return DatabaseContract.scores_table.CONTENT_TYPE;
|
||||
case MATCHES_WITH_LEAGUE:
|
||||
return DatabaseContract.scores_table.CONTENT_TYPE;
|
||||
case MATCHES_WITH_ID:
|
||||
return DatabaseContract.scores_table.CONTENT_ITEM_TYPE;
|
||||
case MATCHES_WITH_DATE:
|
||||
return DatabaseContract.scores_table.CONTENT_TYPE;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri :" + uri );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
|
||||
{
|
||||
Cursor retCursor;
|
||||
//Log.v(FetchScoreTask.LOG_TAG,uri.getPathSegments().toString());
|
||||
int match = match_uri(uri);
|
||||
//Log.v(FetchScoreTask.LOG_TAG,SCORES_BY_LEAGUE);
|
||||
//Log.v(FetchScoreTask.LOG_TAG,selectionArgs[0]);
|
||||
//Log.v(FetchScoreTask.LOG_TAG,String.valueOf(match));
|
||||
switch (match)
|
||||
{
|
||||
case MATCHES: retCursor = mOpenHelper.getReadableDatabase().query(
|
||||
DatabaseContract.SCORES_TABLE,
|
||||
projection,null,null,null,null,sortOrder); break;
|
||||
case MATCHES_WITH_DATE:
|
||||
//Log.v(FetchScoreTask.LOG_TAG,selectionArgs[1]);
|
||||
//Log.v(FetchScoreTask.LOG_TAG,selectionArgs[2]);
|
||||
retCursor = mOpenHelper.getReadableDatabase().query(
|
||||
DatabaseContract.SCORES_TABLE,
|
||||
projection,SCORES_BY_DATE,selectionArgs,null,null,sortOrder); break;
|
||||
case MATCHES_WITH_ID: retCursor = mOpenHelper.getReadableDatabase().query(
|
||||
DatabaseContract.SCORES_TABLE,
|
||||
projection,SCORES_BY_ID,selectionArgs,null,null,sortOrder); break;
|
||||
case MATCHES_WITH_LEAGUE: retCursor = mOpenHelper.getReadableDatabase().query(
|
||||
DatabaseContract.SCORES_TABLE,
|
||||
projection,SCORES_BY_LEAGUE,selectionArgs,null,null,sortOrder); break;
|
||||
default: throw new UnsupportedOperationException("Unknown Uri" + uri);
|
||||
}
|
||||
retCursor.setNotificationUri(getContext().getContentResolver(),uri);
|
||||
return retCursor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uri insert(Uri uri, ContentValues values) {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int bulkInsert(Uri uri, ContentValues[] values)
|
||||
{
|
||||
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
|
||||
//db.delete(DatabaseContract.SCORES_TABLE,null,null);
|
||||
//Log.v(FetchScoreTask.LOG_TAG,String.valueOf(muriMatcher.match(uri)));
|
||||
switch (match_uri(uri))
|
||||
{
|
||||
case MATCHES:
|
||||
db.beginTransaction();
|
||||
int returncount = 0;
|
||||
try
|
||||
{
|
||||
for(ContentValues value : values)
|
||||
{
|
||||
long _id = db.insertWithOnConflict(DatabaseContract.SCORES_TABLE, null, value,
|
||||
SQLiteDatabase.CONFLICT_REPLACE);
|
||||
if (_id != -1)
|
||||
{
|
||||
returncount++;
|
||||
}
|
||||
}
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
getContext().getContentResolver().notifyChange(uri,null);
|
||||
return returncount;
|
||||
default:
|
||||
return super.bulkInsert(uri,values);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 3/3/2015.
|
||||
*/
|
||||
public class Utilies
|
||||
{
|
||||
|
||||
public static String getLeague(Context context, int league_num)
|
||||
{
|
||||
League league = League.getLeagueById(league_num);
|
||||
return League.getLeagueName(context, league);
|
||||
}
|
||||
public static String getMatchDay(Context context, int match_day, int league_num)
|
||||
{
|
||||
if(league_num == League.CHAMPIONS_LEAGUE.getLeagueId())
|
||||
{
|
||||
if (match_day <= 6)
|
||||
{
|
||||
return context.getString(R.string.matchday_uefa_6);
|
||||
}
|
||||
else if(match_day == 7 || match_day == 8)
|
||||
{
|
||||
return context.getString(R.string.matchday_uefa_first_knockout);
|
||||
}
|
||||
else if(match_day == 9 || match_day == 10)
|
||||
{
|
||||
return context.getString(R.string.matchday_uefa_quarterfinal);
|
||||
}
|
||||
else if(match_day == 11 || match_day == 12)
|
||||
{
|
||||
return context.getString(R.string.matchday_uefa_semifinal);
|
||||
}
|
||||
else
|
||||
{
|
||||
return context.getString(R.string.matchday_uefa_final);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return context.getString(R.string.matchday, match_day);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getScores(Context context, int home_goals,int awaygoals)
|
||||
{
|
||||
if(home_goals < 0 || awaygoals < 0)
|
||||
{
|
||||
return context.getString(R.string.scores, "", "").trim();
|
||||
}
|
||||
else
|
||||
{
|
||||
return context.getString(R.string.scores, home_goals, awaygoals);
|
||||
}
|
||||
}
|
||||
|
||||
public static int getTeamCrestByTeamName (String teamname)
|
||||
{
|
||||
if (teamname==null){return R.drawable.no_icon;}
|
||||
switch (teamname)
|
||||
{ //This is the set of icons that are currently in the app. Feel free to find and add more
|
||||
//as you go.
|
||||
case "Arsenal London FC" : return R.drawable.arsenal;
|
||||
case "Manchester United FC" : return R.drawable.manchester_united;
|
||||
case "Swansea City" : return R.drawable.swansea_city_afc;
|
||||
case "Leicester City" : return R.drawable.leicester_city_fc_hd_logo;
|
||||
case "Everton FC" : return R.drawable.everton_fc_logo1;
|
||||
case "West Ham United FC" : return R.drawable.west_ham;
|
||||
case "Tottenham Hotspur FC" : return R.drawable.tottenham_hotspur;
|
||||
case "West Bromwich Albion" : return R.drawable.west_bromwich_albion_hd_logo;
|
||||
case "Sunderland AFC" : return R.drawable.sunderland;
|
||||
case "Stoke City FC" : return R.drawable.stoke_city;
|
||||
default: return R.drawable.no_icon;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 2/26/2015.
|
||||
*/
|
||||
public class ViewHolder
|
||||
{
|
||||
public TextView home_name;
|
||||
public TextView away_name;
|
||||
public TextView score;
|
||||
public TextView date;
|
||||
public ImageView home_crest;
|
||||
public ImageView away_crest;
|
||||
public double match_id;
|
||||
public ViewHolder(View view)
|
||||
{
|
||||
home_name = (TextView) view.findViewById(R.id.home_name);
|
||||
away_name = (TextView) view.findViewById(R.id.away_name);
|
||||
score = (TextView) view.findViewById(R.id.score_textview);
|
||||
date = (TextView) view.findViewById(R.id.data_textview);
|
||||
home_crest = (ImageView) view.findViewById(R.id.home_crest);
|
||||
away_crest = (ImageView) view.findViewById(R.id.away_crest);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package barqsoft.footballscores;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.support.v4.widget.CursorAdapter;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 2/26/2015.
|
||||
*/
|
||||
public class scoresAdapter extends CursorAdapter
|
||||
{
|
||||
public static final int COL_HOME = 3;
|
||||
public static final int COL_AWAY = 4;
|
||||
public static final int COL_HOME_GOALS = 6;
|
||||
public static final int COL_AWAY_GOALS = 7;
|
||||
public static final int COL_DATE = 1;
|
||||
public static final int COL_LEAGUE = 5;
|
||||
public static final int COL_MATCHDAY = 9;
|
||||
public static final int COL_ID = 8;
|
||||
public static final int COL_MATCHTIME = 2;
|
||||
public double detail_match_id = 0;
|
||||
public scoresAdapter(Context context,Cursor cursor,int flags)
|
||||
{
|
||||
super(context,cursor,flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View newView(Context context, Cursor cursor, ViewGroup parent)
|
||||
{
|
||||
View mItem = LayoutInflater.from(context).inflate(R.layout.scores_list_item, parent, false);
|
||||
ViewHolder mHolder = new ViewHolder(mItem);
|
||||
mItem.setTag(mHolder);
|
||||
//Log.v(FetchScoreTask.LOG_TAG,"new View inflated");
|
||||
return mItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(View view, final Context context, Cursor cursor)
|
||||
{
|
||||
final ViewHolder mHolder = (ViewHolder) view.getTag();
|
||||
mHolder.home_name.setText(cursor.getString(COL_HOME));
|
||||
mHolder.away_name.setText(cursor.getString(COL_AWAY));
|
||||
mHolder.date.setText(cursor.getString(COL_MATCHTIME));
|
||||
mHolder.score.setText(Utilies.getScores(context, cursor.getInt(COL_HOME_GOALS),cursor.getInt(COL_AWAY_GOALS)));
|
||||
mHolder.match_id = cursor.getDouble(COL_ID);
|
||||
mHolder.home_crest.setImageResource(Utilies.getTeamCrestByTeamName(
|
||||
cursor.getString(COL_HOME)));
|
||||
mHolder.away_crest.setImageResource(Utilies.getTeamCrestByTeamName(
|
||||
cursor.getString(COL_AWAY)
|
||||
));
|
||||
//Log.v(FetchScoreTask.LOG_TAG,mHolder.home_name.getText() + " Vs. " + mHolder.away_name.getText() +" id " + String.valueOf(mHolder.match_id));
|
||||
//Log.v(FetchScoreTask.LOG_TAG,String.valueOf(detail_match_id));
|
||||
LayoutInflater vi = (LayoutInflater) context.getApplicationContext()
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View v = vi.inflate(R.layout.detail_fragment, null);
|
||||
ViewGroup container = (ViewGroup) view.findViewById(R.id.details_fragment_container);
|
||||
if(mHolder.match_id == detail_match_id)
|
||||
{
|
||||
//Log.v(FetchScoreTask.LOG_TAG,"will insert extraView");
|
||||
|
||||
container.addView(v, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT
|
||||
, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
TextView match_day = (TextView) v.findViewById(R.id.matchday_textview);
|
||||
match_day.setText(Utilies.getMatchDay(context, cursor.getInt(COL_MATCHDAY),
|
||||
cursor.getInt(COL_LEAGUE)));
|
||||
TextView league = (TextView) v.findViewById(R.id.league_textview);
|
||||
league.setText(Utilies.getLeague(context, cursor.getInt(COL_LEAGUE)));
|
||||
Button share_button = (Button) v.findViewById(R.id.share_button);
|
||||
share_button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
//add Share Action. Catch clause to prevent app from crashing if theres no activity to share with
|
||||
try {
|
||||
context.startActivity(createShareForecastIntent(mHolder.home_name.getText() + " "
|
||||
+ mHolder.score.getText() + " " + mHolder.away_name.getText() + " "));
|
||||
} catch(ActivityNotFoundException e) {
|
||||
Log.e("ScoresAdapter", "No activity for share intent found");
|
||||
Toast.makeText(context, R.string.match_share_not_found, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
container.removeAllViews();
|
||||
}
|
||||
|
||||
}
|
||||
public Intent createShareForecastIntent(String ShareText) {
|
||||
String hashtag = mContext.getString(R.string.hashtag);
|
||||
|
||||
Intent shareIntent = new Intent(Intent.ACTION_SEND);
|
||||
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
shareIntent.setType("text/plain");
|
||||
shareIntent.putExtra(Intent.EXTRA_TEXT, ShareText + hashtag);
|
||||
return shareIntent;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
package barqsoft.footballscores.service;
|
||||
|
||||
import android.app.IntentService;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
import java.util.Vector;
|
||||
|
||||
import barqsoft.footballscores.DatabaseContract;
|
||||
import barqsoft.footballscores.League;
|
||||
import barqsoft.footballscores.R;
|
||||
|
||||
/**
|
||||
* Created by yehya khaled on 3/2/2015.
|
||||
*/
|
||||
public class myFetchService extends IntentService
|
||||
{
|
||||
public static final String LOG_TAG = "myFetchService";
|
||||
public myFetchService()
|
||||
{
|
||||
super("myFetchService");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHandleIntent(Intent intent)
|
||||
{
|
||||
getData("n2");
|
||||
getData("p2");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
private void getData (String timeFrame)
|
||||
{
|
||||
//Creating fetch URL
|
||||
final String BASE_URL = "http://api.football-data.org/alpha/fixtures"; //Base URL
|
||||
final String QUERY_TIME_FRAME = "timeFrame"; //Time Frame parameter to determine days
|
||||
//final String QUERY_MATCH_DAY = "matchday";
|
||||
|
||||
Uri fetch_build = Uri.parse(BASE_URL).buildUpon().
|
||||
appendQueryParameter(QUERY_TIME_FRAME, timeFrame).build();
|
||||
//Log.v(LOG_TAG, "The url we are looking at is: "+fetch_build.toString()); //log spam
|
||||
HttpURLConnection m_connection = null;
|
||||
BufferedReader reader = null;
|
||||
String JSON_data = null;
|
||||
//Opening Connection
|
||||
try {
|
||||
URL fetch = new URL(fetch_build.toString());
|
||||
m_connection = (HttpURLConnection) fetch.openConnection();
|
||||
m_connection.setRequestMethod("GET");
|
||||
m_connection.addRequestProperty("X-Auth-Token",getString(R.string.api_key));
|
||||
m_connection.connect();
|
||||
|
||||
// Read the input stream into a String
|
||||
InputStream inputStream = m_connection.getInputStream();
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
if (inputStream == null) {
|
||||
// Nothing to do.
|
||||
return;
|
||||
}
|
||||
reader = new BufferedReader(new InputStreamReader(inputStream));
|
||||
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
// Since it's JSON, adding a newline isn't necessary (it won't affect parsing)
|
||||
// But it does make debugging a *lot* easier if you print out the completed
|
||||
// buffer for debugging.
|
||||
buffer.append(line + "\n");
|
||||
}
|
||||
if (buffer.length() == 0) {
|
||||
// Stream was empty. No point in parsing.
|
||||
return;
|
||||
}
|
||||
JSON_data = buffer.toString();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.e(LOG_TAG,"Exception here" + e.getMessage());
|
||||
}
|
||||
finally {
|
||||
if(m_connection != null)
|
||||
{
|
||||
m_connection.disconnect();
|
||||
}
|
||||
if (reader != null)
|
||||
{
|
||||
try {
|
||||
reader.close();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
Log.e(LOG_TAG,"Error Closing Stream");
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
if (JSON_data != null) {
|
||||
//This bit is to check if the data contains any matches. If not, we call processJson on the dummy data
|
||||
JSONArray matches = new JSONObject(JSON_data).getJSONArray("fixtures");
|
||||
if (matches.length() == 0) {
|
||||
//if there is no data, call the function on dummy data
|
||||
//this is expected behavior during the off season.
|
||||
processJSONdata(getString(R.string.dummy_data), getApplicationContext(), false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
processJSONdata(JSON_data, getApplicationContext(), true);
|
||||
} else {
|
||||
//Could not Connect
|
||||
Log.d(LOG_TAG, "Could not connect to server.");
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Log.e(LOG_TAG,e.getMessage());
|
||||
}
|
||||
}
|
||||
private void processJSONdata (String JSONdata,Context mContext, boolean isReal)
|
||||
{
|
||||
final String SEASON_LINK = "http://api.football-data.org/alpha/soccerseasons/";
|
||||
final String MATCH_LINK = "http://api.football-data.org/alpha/fixtures/";
|
||||
final String FIXTURES = "fixtures";
|
||||
final String LINKS = "_links";
|
||||
final String SOCCER_SEASON = "soccerseason";
|
||||
final String SELF = "self";
|
||||
final String MATCH_DATE = "date";
|
||||
final String HOME_TEAM = "homeTeamName";
|
||||
final String AWAY_TEAM = "awayTeamName";
|
||||
final String RESULT = "result";
|
||||
final String HOME_GOALS = "goalsHomeTeam";
|
||||
final String AWAY_GOALS = "goalsAwayTeam";
|
||||
final String MATCH_DAY = "matchday";
|
||||
|
||||
//Match data
|
||||
League league = null;
|
||||
String mDate = null;
|
||||
String mTime = null;
|
||||
String Home = null;
|
||||
String Away = null;
|
||||
String Home_goals = null;
|
||||
String Away_goals = null;
|
||||
String match_id = null;
|
||||
String match_day = null;
|
||||
|
||||
|
||||
try {
|
||||
JSONArray matches = new JSONObject(JSONdata).getJSONArray(FIXTURES);
|
||||
|
||||
|
||||
//ContentValues to be inserted
|
||||
Vector<ContentValues> values = new Vector <ContentValues> (matches.length());
|
||||
for(int i = 0;i < matches.length();i++)
|
||||
{
|
||||
|
||||
JSONObject match_data = matches.getJSONObject(i);
|
||||
String leagueString = match_data.getJSONObject(LINKS).getJSONObject(SOCCER_SEASON).
|
||||
getString("href");
|
||||
leagueString = leagueString.replace(SEASON_LINK,"");
|
||||
try {
|
||||
league = League.getLeagueById(Integer.valueOf(leagueString));
|
||||
} catch (NumberFormatException e) {
|
||||
league = null;
|
||||
}
|
||||
//This if statement controls which leagues we're interested in the data from.
|
||||
//add leagues here in order to have them be added to the DB.
|
||||
// If you are finding no data in the app, check that this contains all the leagues.
|
||||
// If it doesn't, that can cause an empty DB, bypassing the dummy data routine.
|
||||
if(league != null)
|
||||
{
|
||||
match_id = match_data.getJSONObject(LINKS).getJSONObject(SELF).
|
||||
getString("href");
|
||||
match_id = match_id.replace(MATCH_LINK, "");
|
||||
if(!isReal){
|
||||
//This if statement changes the match ID of the dummy data so that it all goes into the database
|
||||
match_id=match_id+Integer.toString(i);
|
||||
}
|
||||
|
||||
mDate = match_data.getString(MATCH_DATE);
|
||||
mTime = mDate.substring(mDate.indexOf("T") + 1, mDate.indexOf("Z"));
|
||||
mDate = mDate.substring(0,mDate.indexOf("T"));
|
||||
SimpleDateFormat match_date = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
|
||||
match_date.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
try {
|
||||
Date parseddate = match_date.parse(mDate+mTime);
|
||||
SimpleDateFormat new_date = new SimpleDateFormat("yyyy-MM-dd:HH:mm");
|
||||
new_date.setTimeZone(TimeZone.getDefault());
|
||||
mDate = new_date.format(parseddate);
|
||||
mTime = mDate.substring(mDate.indexOf(":") + 1);
|
||||
mDate = mDate.substring(0,mDate.indexOf(":"));
|
||||
|
||||
if(!isReal){
|
||||
//This if statement changes the dummy data's date to match our current date range.
|
||||
Date fragmentdate = new Date(System.currentTimeMillis()+((i-2)*86400000));
|
||||
SimpleDateFormat mformat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
mDate=mformat.format(fragmentdate);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.d(LOG_TAG, "error here!");
|
||||
Log.e(LOG_TAG,e.getMessage());
|
||||
}
|
||||
Home = match_data.getString(HOME_TEAM);
|
||||
Away = match_data.getString(AWAY_TEAM);
|
||||
Home_goals = match_data.getJSONObject(RESULT).getString(HOME_GOALS);
|
||||
Away_goals = match_data.getJSONObject(RESULT).getString(AWAY_GOALS);
|
||||
match_day = match_data.getString(MATCH_DAY);
|
||||
ContentValues match_values = new ContentValues();
|
||||
match_values.put(DatabaseContract.scores_table.MATCH_ID,match_id);
|
||||
match_values.put(DatabaseContract.scores_table.DATE_COL,mDate);
|
||||
match_values.put(DatabaseContract.scores_table.TIME_COL,mTime);
|
||||
match_values.put(DatabaseContract.scores_table.HOME_COL,Home);
|
||||
match_values.put(DatabaseContract.scores_table.AWAY_COL,Away);
|
||||
match_values.put(DatabaseContract.scores_table.HOME_GOALS_COL,Home_goals);
|
||||
match_values.put(DatabaseContract.scores_table.AWAY_GOALS_COL,Away_goals);
|
||||
match_values.put(DatabaseContract.scores_table.LEAGUE_COL,league.getLeagueId());
|
||||
match_values.put(DatabaseContract.scores_table.MATCH_DAY,match_day);
|
||||
//log spam
|
||||
|
||||
//Log.v(LOG_TAG,match_id);
|
||||
//Log.v(LOG_TAG,mDate);
|
||||
//Log.v(LOG_TAG,mTime);
|
||||
//Log.v(LOG_TAG,Home);
|
||||
//Log.v(LOG_TAG,Away);
|
||||
//Log.v(LOG_TAG,Home_goals);
|
||||
//Log.v(LOG_TAG,Away_goals);
|
||||
|
||||
values.add(match_values);
|
||||
}
|
||||
}
|
||||
int inserted_data = 0;
|
||||
ContentValues[] insert_data = new ContentValues[values.size()];
|
||||
values.toArray(insert_data);
|
||||
inserted_data = mContext.getContentResolver().bulkInsert(
|
||||
DatabaseContract.BASE_CONTENT_URI,insert_data);
|
||||
|
||||
//Log.v(LOG_TAG,"Succesfully Inserted : " + String.valueOf(inserted_data));
|
||||
}
|
||||
catch (JSONException e)
|
||||
{
|
||||
Log.e(LOG_TAG,e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package barqsoft.footballscores.widget;
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.appwidget.AppWidgetProvider;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import barqsoft.footballscores.R;
|
||||
|
||||
/**
|
||||
* Widgetprovider for the scores list widget
|
||||
*/
|
||||
public class ListWidgetProvider extends AppWidgetProvider {
|
||||
|
||||
@Override
|
||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
||||
for(int widgetId : appWidgetIds) {
|
||||
RemoteViews rvs = updateWidgetListView(context, widgetId);
|
||||
appWidgetManager.updateAppWidget(appWidgetIds, rvs);
|
||||
}
|
||||
|
||||
super.onUpdate(context, appWidgetManager, appWidgetIds);
|
||||
}
|
||||
|
||||
private RemoteViews updateWidgetListView(Context context, int appWidgetId) {
|
||||
RemoteViews rvs = new RemoteViews(context.getPackageName(), R.layout.list_widget);
|
||||
|
||||
Intent serviceIntent = new Intent(context, ListWidgetService.class);
|
||||
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
|
||||
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
|
||||
|
||||
rvs.setRemoteAdapter(R.id.list_widget_listView, serviceIntent);
|
||||
rvs.setEmptyView(R.id.list_widget_listView, R.id.list_widget_empty_view);
|
||||
|
||||
return rvs;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package barqsoft.footballscores.widget;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.widget.RemoteViewsService;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
public class ListWidgetService extends RemoteViewsService {
|
||||
@Override
|
||||
public RemoteViewsFactory onGetViewFactory(Intent intent) {
|
||||
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
|
||||
return new ListWidgetViewFactory(getApplicationContext(), appWidgetId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package barqsoft.footballscores.widget;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
import android.widget.RemoteViews;
|
||||
import android.widget.RemoteViewsService;
|
||||
|
||||
import barqsoft.footballscores.DatabaseContract;
|
||||
import barqsoft.footballscores.R;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
class ListWidgetViewFactory implements RemoteViewsService.RemoteViewsFactory {
|
||||
|
||||
public static final String TAG = ListWidgetViewFactory.class.getSimpleName();
|
||||
|
||||
int mAppWidgetId;
|
||||
Context mContext;
|
||||
|
||||
Cursor mCursor;
|
||||
|
||||
public ListWidgetViewFactory(Context context, int appWidgetId) {
|
||||
mContext = context;
|
||||
this.mAppWidgetId = appWidgetId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
// nothing to do here
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataSetChanged() {
|
||||
if(mCursor != null)
|
||||
mCursor.close();
|
||||
mCursor = mContext.getContentResolver().query(DatabaseContract.BASE_CONTENT_URI, null, null, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if(mCursor != null)
|
||||
mCursor.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
if(mCursor == null) {
|
||||
Log.d(TAG, "get Count: cursor is null!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mCursor.getCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoteViews getViewAt(int position) {
|
||||
RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.list_widget_item);
|
||||
mCursor.moveToPosition(position);
|
||||
|
||||
String homeName = mCursor.getString(mCursor.getColumnIndex(DatabaseContract.scores_table.HOME_COL));
|
||||
String awayName = mCursor.getString(mCursor.getColumnIndex(DatabaseContract.scores_table.AWAY_COL));
|
||||
|
||||
String score;
|
||||
int homeGoals = mCursor.getInt(mCursor.getColumnIndex(DatabaseContract.scores_table.HOME_GOALS_COL));
|
||||
int awayGoals = mCursor.getInt(mCursor.getColumnIndex(DatabaseContract.scores_table.AWAY_GOALS_COL));
|
||||
if(homeGoals < 0 || awayGoals < 0)
|
||||
score = mContext.getString(R.string.scores, " ", " ");
|
||||
else
|
||||
score = mContext.getString(R.string.scores, homeGoals, awayGoals);
|
||||
|
||||
|
||||
String dateString =
|
||||
mCursor.getString(mCursor.getColumnIndex(DatabaseContract.scores_table.DATE_COL))
|
||||
+ " "
|
||||
+ mCursor.getString(mCursor.getColumnIndex(DatabaseContract.scores_table.TIME_COL));
|
||||
Log.d(TAG, homeName + " " + awayName + " " + score + " " + dateString);
|
||||
|
||||
rv.setTextViewText(R.id.list_widget_item_hostname, homeName);
|
||||
rv.setTextViewText(R.id.list_widget_item_awayname, awayName);
|
||||
rv.setTextViewText(R.id.list_widget_item_score, score);
|
||||
rv.setTextViewText(R.id.list_widget_item_date, dateString);
|
||||
return rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoteViews getLoadingView() { return null; }
|
||||
|
||||
@Override
|
||||
public int getViewTypeCount() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasStableIds() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
BIN
Football/app/src/main/res/drawable-hdpi/arsenal.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/aston_villa.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/burney_fc_hd_logo.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/chelsea.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/crystal_palace_fc.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/everton_fc_logo1.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 13 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/liverpool.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/manchester_city.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/manchester_united.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/newcastle_united.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/no_icon.png
Normal file
|
After Width: | Height: | Size: 919 B |
|
After Width: | Height: | Size: 12 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/southampton_fc.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/stoke_city.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/sunderland.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/swansea_city_afc.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/tottenham_hotspur.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
Football/app/src/main/res/drawable-hdpi/west_ham.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/arsenal.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/aston_villa.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/burney_fc_hd_logo.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/chelsea.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/crystal_palace_fc.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/everton_fc_logo1.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/liverpool.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/manchester_city.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/manchester_united.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/newcastle_united.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/no_icon.png
Normal file
|
After Width: | Height: | Size: 659 B |
|
After Width: | Height: | Size: 7.0 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/southampton_fc.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/stoke_city.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/sunderland.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/swansea_city_afc.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/tottenham_hotspur.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
BIN
Football/app/src/main/res/drawable-mdpi/west_ham.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/arsenal.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/aston_villa.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/burney_fc_hd_logo.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/chelsea.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/crystal_palace_fc.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/everton_fc_logo1.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 14 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 20 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/liverpool.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/manchester_city.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/manchester_united.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/newcastle_united.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/no_icon.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 17 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/southampton_fc.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/stoke_city.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/sunderland.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/swansea_city_afc.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/tottenham_hotspur.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 16 KiB |
BIN
Football/app/src/main/res/drawable-xhdpi/west_ham.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/arsenal.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/aston_villa.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/burney_fc_hd_logo.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/chelsea.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/crystal_palace_fc.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/everton_fc_logo1.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 22 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 32 KiB |
BIN
Football/app/src/main/res/drawable-xxhdpi/liverpool.png
Normal file
|
After Width: | Height: | Size: 30 KiB |