Public code.
39
Les Horaires/.gitignore
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/build
|
||||||
|
|
||||||
|
.gradle
|
||||||
|
/local.properties
|
||||||
|
/.idea/workspace.xml
|
||||||
|
/.idea/libraries
|
||||||
|
.DS_Store
|
||||||
|
/build
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Eclipse stuff
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
|
||||||
|
# Gradle stuff
|
||||||
|
.gradle/
|
||||||
|
build/
|
||||||
|
.idea/
|
||||||
|
out/
|
||||||
|
*.iml
|
||||||
|
|
||||||
|
Thumbs.db
|
61
Les Horaires/build.gradle
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:1.1.1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 22
|
||||||
|
buildToolsVersion "22.0.1"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId "com.amine.horaires"
|
||||||
|
minSdkVersion 14
|
||||||
|
targetSdkVersion 22
|
||||||
|
versionCode 39
|
||||||
|
versionName "2.1.2"
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_6
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_6
|
||||||
|
}
|
||||||
|
|
||||||
|
lintOptions {
|
||||||
|
checkReleaseBuilds true
|
||||||
|
abortOnError false
|
||||||
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
release {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
|
compile 'com.android.support:appcompat-v7:+'
|
||||||
|
compile 'com.android.support:support-v4:+'
|
||||||
|
compile 'com.android.support:recyclerview-v7:+'
|
||||||
|
compile 'com.google.android.gms:play-services:4.3.23'
|
||||||
|
compile 'com.melnykov:floatingactionbutton:1.2.0'
|
||||||
|
compile 'com.pnikosis:materialish-progress:1.5'
|
||||||
|
compile 'com.wdullaer:materialdatetimepicker:1.3.0'
|
||||||
|
compile 'de.cketti.library.changelog:ckchangelog:1.2.2'
|
||||||
|
}
|
17
Les Horaires/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 C:/Users/Amine/Desktop/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 com.amine.horaires;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
67
Les Horaires/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest
|
||||||
|
package="com.amine.horaires"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||||
|
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:name=".App"
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@style/AppTheme">
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.gms.version"
|
||||||
|
android:value="@integer/google_play_services_version"/>
|
||||||
|
<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>
|
||||||
|
<activity
|
||||||
|
android:name=".ShopDisplay"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:parentActivityName=".MainActivity">
|
||||||
|
<!-- Parent activity meta-data to support API level 7+ -->
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
|
android:value=".MainActivity"/>
|
||||||
|
<intent-filter>
|
||||||
|
<category android:name="android.intent.category.ALTERNATIVE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".ShopSearch"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:parentActivityName=".MainActivity">
|
||||||
|
<!-- Parent activity meta-data to support API level 7+ -->
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
|
android:value=".MainActivity"/>
|
||||||
|
<intent-filter>
|
||||||
|
<category android:name="android.intent.category.ALTERNATIVE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".ShopUpdate"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:parentActivityName=".ShopDisplay">
|
||||||
|
<!-- Parent activity meta-data to support API level 7+ -->
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.PARENT_ACTIVITY"
|
||||||
|
android:value=".ShopDisplay"/>
|
||||||
|
<intent-filter>
|
||||||
|
<category android:name="android.intent.category.ALTERNATIVE"/>
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
15
Les Horaires/src/main/java/com/amine/horaires/App.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
|
||||||
|
public class App extends Application {
|
||||||
|
|
||||||
|
public App() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
}
|
||||||
|
}
|
132
Les Horaires/src/main/java/com/amine/horaires/MainActivity.java
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import com.amine.horaires.bdd.FavorisDao;
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
import com.amine.horaires.util.Configuration;
|
||||||
|
import com.amine.horaires.util.Parseur;
|
||||||
|
import com.melnykov.fab.FloatingActionButton;
|
||||||
|
import de.cketti.library.changelog.ChangeLog;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class MainActivity extends OptionsActivity {
|
||||||
|
|
||||||
|
private static RecyclerView mRecyclerView;
|
||||||
|
private static RecyclerView.Adapter mAdapter;
|
||||||
|
private static ArrayList<Shop> myDataset;
|
||||||
|
private static TextView emptyView;
|
||||||
|
|
||||||
|
static void razOrFavs(Context c) {
|
||||||
|
FavorisDao dao = FavorisDao.getInstance(c);
|
||||||
|
dao.open();
|
||||||
|
myDataset = dao.getAllFavoris();
|
||||||
|
dao.close();
|
||||||
|
|
||||||
|
if (myDataset.isEmpty()) {
|
||||||
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
|
emptyView.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
mAdapter = new SearchAdapter(myDataset, c);
|
||||||
|
mRecyclerView.setAdapter(mAdapter);
|
||||||
|
mRecyclerView.setVisibility(View.VISIBLE);
|
||||||
|
emptyView.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_main);
|
||||||
|
|
||||||
|
checkLocale();
|
||||||
|
ChangeLog cl = new ChangeLog(this);
|
||||||
|
if (cl.isFirstRun()) {
|
||||||
|
cl.getLogDialog().show();
|
||||||
|
}
|
||||||
|
|
||||||
|
mRecyclerView = (RecyclerView) findViewById(R.id.favs_list);
|
||||||
|
emptyView = (TextView) findViewById(R.id.empty_list);
|
||||||
|
|
||||||
|
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
|
||||||
|
fab.attachToRecyclerView(mRecyclerView);
|
||||||
|
|
||||||
|
fab.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
final Intent i = new Intent(getBaseContext(), ShopSearch.class);
|
||||||
|
startActivityForResult(i, 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// use this setting to improve performance if you know that changes
|
||||||
|
// in content do not change the layout size of the RecyclerView
|
||||||
|
mRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
|
// use a linear layout manager
|
||||||
|
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
|
||||||
|
mRecyclerView.setLayoutManager(mLayoutManager);
|
||||||
|
|
||||||
|
// specify an adapter (see also next example)
|
||||||
|
myDataset = new ArrayList<Shop>();
|
||||||
|
|
||||||
|
razOrFavs(getBaseContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkLocale() {
|
||||||
|
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
|
Configuration.pays = tm.getSimCountryIso().toUpperCase();
|
||||||
|
if (Configuration.pays == null || Configuration.pays.equals("") || Configuration.pays.isEmpty())
|
||||||
|
Configuration.pays = MainActivity.this.getResources().getConfiguration().locale.getCountry();
|
||||||
|
|
||||||
|
SharedPreferences settings = getSharedPreferences("UserInfo", 0);
|
||||||
|
if (settings.getString("Pays", "") == null || !settings.getString("Pays", "").equals(Configuration.pays)) {
|
||||||
|
settings = getSharedPreferences("UserInfo", 0);
|
||||||
|
SharedPreferences.Editor editor = settings.edit();
|
||||||
|
editor.putString("Pays", Configuration.pays);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
switch (requestCode) {
|
||||||
|
case (0): {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
myDataset = new ArrayList<Shop>();
|
||||||
|
String result = data.getStringExtra("result");
|
||||||
|
myDataset = new Parseur().parserShops(result);
|
||||||
|
if (myDataset.isEmpty()) {
|
||||||
|
mRecyclerView.setVisibility(View.GONE);
|
||||||
|
emptyView.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
mAdapter = new SearchAdapter(myDataset, getBaseContext());
|
||||||
|
mRecyclerView.setAdapter(mAdapter);
|
||||||
|
mRecyclerView.setVisibility(View.VISIBLE);
|
||||||
|
emptyView.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
|
inflater.inflate(R.menu.main_activity_actions_main, menu);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.Window;
|
||||||
|
import com.amine.horaires.bdd.FavorisDao;
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
import com.amine.horaires.util.Configuration;
|
||||||
|
|
||||||
|
class OptionsActivity extends AppCompatActivity {
|
||||||
|
MenuItem favMenu = null;
|
||||||
|
boolean isFav = false;
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
|
inflater.inflate(R.menu.main_activity_actions, menu);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.action_mail:
|
||||||
|
Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
|
||||||
|
intent.setType("text/plain");
|
||||||
|
intent.putExtra(Intent.EXTRA_SUBJECT, "Les Horaires");
|
||||||
|
intent.setData(Uri.parse("mailto:amine.bou.dev@gmail.com")); // or just "mailto:" for blank
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
|
||||||
|
startActivity(intent);
|
||||||
|
return true;
|
||||||
|
case R.id.action_about:
|
||||||
|
final Dialog dialog = new Dialog(this);
|
||||||
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
dialog.setCancelable(true);
|
||||||
|
|
||||||
|
// Content of the dialog
|
||||||
|
dialog.setContentView(R.layout.activity_more);
|
||||||
|
dialog.show();
|
||||||
|
return true;
|
||||||
|
case R.id.action_reload:
|
||||||
|
MainActivity.razOrFavs(OptionsActivity.this);
|
||||||
|
return true;
|
||||||
|
case R.id.action_fav:
|
||||||
|
FavorisDao dao = FavorisDao.getInstance(OptionsActivity.this);
|
||||||
|
if (isFav) {
|
||||||
|
// REMOVE
|
||||||
|
dao.open();
|
||||||
|
dao.deleteFavori(Configuration.currentShop.getId());
|
||||||
|
dao.close();
|
||||||
|
updateFavStatus(false);
|
||||||
|
} else {
|
||||||
|
dao.open();
|
||||||
|
dao.insertFavori(Configuration.currentShop);
|
||||||
|
dao.close();
|
||||||
|
updateFavStatus(true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
case android.R.id.home:
|
||||||
|
this.finish();
|
||||||
|
return (true);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateFavStatus(boolean state) {
|
||||||
|
if (state) {
|
||||||
|
favMenu.setIcon(R.mipmap.ic_turned_in_black_24dp);
|
||||||
|
} else {
|
||||||
|
favMenu.setIcon(R.mipmap.ic_turned_in_not_black_24dp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateFavStatus() {
|
||||||
|
FavorisDao dao = FavorisDao.getInstance(OptionsActivity.this);
|
||||||
|
dao.open();
|
||||||
|
Shop sh = dao.getFavori(Configuration.currentShop.getId());
|
||||||
|
dao.close();
|
||||||
|
if (sh == null) {
|
||||||
|
updateFavStatus(false);
|
||||||
|
} else {
|
||||||
|
updateFavStatus(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder> {
|
||||||
|
private final ArrayList<Shop> mDataset;
|
||||||
|
private final Context c;
|
||||||
|
|
||||||
|
// Provide a suitable constructor (depends on the kind of dataset)
|
||||||
|
public SearchAdapter(ArrayList<Shop> myDataset, Context c) {
|
||||||
|
mDataset = myDataset;
|
||||||
|
this.c = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create new views (invoked by the layout manager)
|
||||||
|
@Override
|
||||||
|
public SearchAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
|
||||||
|
int viewType) {
|
||||||
|
// create a new view
|
||||||
|
View v = LayoutInflater.from(parent.getContext())
|
||||||
|
.inflate(R.layout.fav_list_item, parent, false);
|
||||||
|
// set the view's size, margins, paddings and layout parameters
|
||||||
|
|
||||||
|
return new ViewHolder((RelativeLayout) v, c, mDataset);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace the contents of a view (invoked by the layout manager)
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(ViewHolder holder, final int position) {
|
||||||
|
// - get element from your dataset at this position
|
||||||
|
// - replace the contents of the view with that element
|
||||||
|
holder.shopAddr.setText(mDataset.get(position).getAdresse());
|
||||||
|
holder.shopName.setText(mDataset.get(position).getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the size of your dataset (invoked by the layout manager)
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return mDataset.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Provide a reference to the views for each data item
|
||||||
|
// Complex data items may need more than one view per item, and
|
||||||
|
// you provide access to all the views for a data item in a view holder
|
||||||
|
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
|
||||||
|
// each data item is just a string in this case
|
||||||
|
public final TextView shopName;
|
||||||
|
public final TextView shopAddr;
|
||||||
|
private final Context c;
|
||||||
|
private final ArrayList<Shop> mDataset;
|
||||||
|
|
||||||
|
public ViewHolder(RelativeLayout v, Context c, ArrayList<Shop> mDataset) {
|
||||||
|
super(v);
|
||||||
|
v.setOnClickListener(this);
|
||||||
|
shopName = (TextView) v.findViewById(R.id.shop_name);
|
||||||
|
shopAddr = (TextView) v.findViewById(R.id.shop_adress);
|
||||||
|
this.c = c;
|
||||||
|
this.mDataset = mDataset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
final Intent i = new Intent(view.getContext(), ShopDisplay.class);
|
||||||
|
final Handler handler = new Handler();
|
||||||
|
Runnable t = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
i.putExtra("shop", mDataset.get(getLayoutPosition()));
|
||||||
|
c.startActivity(i);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
handler.post(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
249
Les Horaires/src/main/java/com/amine/horaires/ShopDisplay.java
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import com.amine.horaires.bdd.FavorisDao;
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
import com.amine.horaires.util.Configuration;
|
||||||
|
import com.amine.horaires.util.Parseur;
|
||||||
|
import com.amine.horaires.util.Utils;
|
||||||
|
import com.melnykov.fab.FloatingActionButton;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.ProtocolException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class ShopDisplay extends OptionsActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.shop_display);
|
||||||
|
Shop s = getIntent().getExtras().getParcelable("shop");
|
||||||
|
|
||||||
|
Configuration.currentShop = s;
|
||||||
|
|
||||||
|
FavorisDao dao = FavorisDao.getInstance(ShopDisplay.this);
|
||||||
|
dao.open();
|
||||||
|
List<Shop> fs = dao.getAllFavoris();
|
||||||
|
dao.close();
|
||||||
|
|
||||||
|
while (!isFav && !fs.isEmpty()) {
|
||||||
|
isFav = fs.remove(0).getId() == Configuration.currentShop.getId();
|
||||||
|
}
|
||||||
|
if (isFav) {
|
||||||
|
SearchTask st = new SearchTask();
|
||||||
|
st.execute(Utils.generateUrlForId(s.getId()));
|
||||||
|
s = Configuration.currentShop;
|
||||||
|
dao.open();
|
||||||
|
dao.updateFavori(s);
|
||||||
|
dao.close();
|
||||||
|
}
|
||||||
|
generateView(s);
|
||||||
|
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
|
||||||
|
|
||||||
|
final Shop finalS = s;
|
||||||
|
fab.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
final Intent i = new Intent(getBaseContext(), ShopUpdate.class);
|
||||||
|
i.putExtra("shop", finalS);
|
||||||
|
startActivity(i);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void generateView(final Shop s) {
|
||||||
|
Configuration.currentShop = s;
|
||||||
|
|
||||||
|
ImageView imageResult = (ImageView) findViewById(R.id.imageView);
|
||||||
|
|
||||||
|
ImageTask t = new ImageTask(imageResult);
|
||||||
|
t.execute(s.getHoraires());
|
||||||
|
|
||||||
|
TextView shopName = (TextView) findViewById(R.id.shopName);
|
||||||
|
TextView shopAddress = (TextView) findViewById(R.id.shopAdress);
|
||||||
|
TextView shopOpen = (TextView) findViewById(R.id.shopOpen);
|
||||||
|
TextView shopStatus = (TextView) findViewById(R.id.shopStatus);
|
||||||
|
ImageView wifi = (ImageView) findViewById(R.id.wifi);
|
||||||
|
ImageView parking = (ImageView) findViewById(R.id.parking);
|
||||||
|
ImageView access = (ImageView) findViewById(R.id.handi);
|
||||||
|
|
||||||
|
shopName.setText(s.getName());
|
||||||
|
shopAddress.setText(s.getAdresse());
|
||||||
|
shopOpen.setText("Le magasin est " + (s.isOuvert() ? "ouvert" : "fermé"));
|
||||||
|
if (s.isOuvert()) {
|
||||||
|
shopStatus.setText(s.getOpenStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s.isWifi()) {
|
||||||
|
wifi.setAlpha((float) 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s.isAccesHandicape()) {
|
||||||
|
access.setAlpha((float) 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s.isParking()) {
|
||||||
|
parking.setAlpha((float) 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
findViewById(R.id.imageView).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(s.getUrl()));
|
||||||
|
startActivity(browserIntent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findViewById(R.id.callButton).setOnClickListener(new View.OnClickListener() {
|
||||||
|
public void onClick(View v) {
|
||||||
|
String numeroAppeler = "tel:" + s.getTel();
|
||||||
|
startActivity(new Intent(Intent.ACTION_DIAL, Uri
|
||||||
|
.parse(numeroAppeler)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findViewById(R.id.gpsButton).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new
|
||||||
|
Intent(Intent.ACTION_VIEW,
|
||||||
|
Uri.parse("http://maps.google.com/maps?q="
|
||||||
|
+ s.getAdresse() + "@" + s.getLat() + "," + s.getLng() + "")
|
||||||
|
);
|
||||||
|
startActivity(intent);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// @todo: use this to update the shop if connected.
|
||||||
|
private boolean checkDeviceConnected() {
|
||||||
|
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
// Need permission : android.permission.ACCESS_NETWORK_STATE
|
||||||
|
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
|
||||||
|
|
||||||
|
return (networkInfo != null && networkInfo.isConnected());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
|
inflater.inflate(R.menu.main_activity_actions_shop, menu);
|
||||||
|
favMenu = menu.findItem(R.id.action_fav);
|
||||||
|
updateFavStatus();
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ImageTask extends AsyncTask<String, Void, Bitmap> {
|
||||||
|
private final ImageView contenu;
|
||||||
|
|
||||||
|
public ImageTask(ImageView contenu) {
|
||||||
|
this.contenu = contenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Bitmap doInBackground(String... params) {
|
||||||
|
URL url;
|
||||||
|
Bitmap b = null;
|
||||||
|
try {
|
||||||
|
url = new URL(params[0]);
|
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("GET");
|
||||||
|
conn.setDoInput(true);
|
||||||
|
conn.connect();
|
||||||
|
|
||||||
|
InputStream is = conn.getInputStream();
|
||||||
|
b = BitmapFactory.decodeStream(is);
|
||||||
|
|
||||||
|
|
||||||
|
is.close();
|
||||||
|
conn.disconnect();
|
||||||
|
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ProtocolException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPostExecute(Bitmap b) {
|
||||||
|
this.contenu.setImageBitmap(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SearchTask extends AsyncTask<URL, Void, String> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String doInBackground(URL... params) {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
InputStream is = null;
|
||||||
|
String contentAsString = "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
URL url = params[0];
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setReadTimeout(10000 /* milliseconds */);
|
||||||
|
conn.setConnectTimeout(15000 /* milliseconds */);
|
||||||
|
conn.setRequestMethod("GET");
|
||||||
|
conn.setDoInput(true);
|
||||||
|
|
||||||
|
// Starts the query
|
||||||
|
conn.connect();
|
||||||
|
is = conn.getInputStream();
|
||||||
|
|
||||||
|
// Convert the InputStream into a String
|
||||||
|
|
||||||
|
Scanner reader = new Scanner(is, "ISO-8859-1");
|
||||||
|
while (reader.hasNextLine()) {
|
||||||
|
contentAsString = contentAsString + reader.nextLine();
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ProtocolException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
// Makes sure that the InputStream is closed after the app is finished using it.
|
||||||
|
if (is != null)
|
||||||
|
try {
|
||||||
|
is.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (conn != null)
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
return contentAsString;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(String string) {
|
||||||
|
super.onPostExecute(string);
|
||||||
|
Configuration.currentShop = new Parseur().parserShops(string).get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
134
Les Horaires/src/main/java/com/amine/horaires/ShopSearch.java
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import com.amine.horaires.util.MyLocation;
|
||||||
|
import com.amine.horaires.util.Utils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.ProtocolException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class ShopSearch extends OptionsActivity {
|
||||||
|
private MyLocation myLocation;
|
||||||
|
private RelativeLayout loading;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.shop_search);
|
||||||
|
|
||||||
|
final EditText name = (EditText) findViewById(R.id.name);
|
||||||
|
final EditText location = (EditText) findViewById(R.id.location);
|
||||||
|
loading = (RelativeLayout) findViewById(R.id.loading);
|
||||||
|
Button searchButton = (Button) findViewById(R.id.searchAction);
|
||||||
|
|
||||||
|
// @todo form validation (empty ...)
|
||||||
|
searchButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
loading.setVisibility(View.VISIBLE);
|
||||||
|
SearchTask s = new SearchTask();
|
||||||
|
s.execute(Utils.generateUrlForTextLocation(name.getText().toString(), location.getText().toString()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findViewById(R.id.gpsAction).setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
|
||||||
|
|
||||||
|
loading.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
MyLocation.LocationResult locationResult = new MyLocation.LocationResult() {
|
||||||
|
@Override
|
||||||
|
public void gotLocation(Location location) {
|
||||||
|
if (location == null) {
|
||||||
|
Toast.makeText(getApplicationContext(), "Petit soucis lors de la localisation", Toast.LENGTH_SHORT).show();
|
||||||
|
} else {
|
||||||
|
URL url = Utils.generateUrlForLatLng(name.getText().toString(), location.getLatitude() + "", location.getLongitude() + "");
|
||||||
|
SearchTask s = new SearchTask();
|
||||||
|
s.execute(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
myLocation = new MyLocation();
|
||||||
|
boolean gotLocation = myLocation.getLocation(getApplicationContext(),
|
||||||
|
locationResult);
|
||||||
|
if (!gotLocation) {
|
||||||
|
Toast.makeText(getApplicationContext(), "Erreur de localisation.", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SearchTask extends AsyncTask<URL, Void, String> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String doInBackground(URL... params) {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
InputStream is = null;
|
||||||
|
String contentAsString = "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
URL url = params[0];
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setReadTimeout(10000 /* milliseconds */);
|
||||||
|
conn.setConnectTimeout(15000 /* milliseconds */);
|
||||||
|
conn.setRequestMethod("GET");
|
||||||
|
conn.setDoInput(true);
|
||||||
|
|
||||||
|
// Starts the query
|
||||||
|
conn.connect();
|
||||||
|
is = conn.getInputStream();
|
||||||
|
|
||||||
|
// Convert the InputStream into a String
|
||||||
|
|
||||||
|
Scanner reader = new Scanner(is, "ISO-8859-1");
|
||||||
|
while (reader.hasNextLine()) {
|
||||||
|
contentAsString = contentAsString + reader.nextLine();
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ProtocolException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
// Makes sure that the InputStream is closed after the app is finished using it.
|
||||||
|
if (is != null)
|
||||||
|
try {
|
||||||
|
is.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (conn != null)
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
return contentAsString;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(String string) {
|
||||||
|
super.onPostExecute(string);
|
||||||
|
|
||||||
|
loading.setVisibility(View.GONE);
|
||||||
|
Intent resultIntent = new Intent();
|
||||||
|
resultIntent.putExtra("result", string);
|
||||||
|
setResult(MainActivity.RESULT_OK, resultIntent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
144
Les Horaires/src/main/java/com/amine/horaires/ShopUpdate.java
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import com.amine.horaires.models.Horaires;
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
import com.amine.horaires.util.Utils;
|
||||||
|
import com.melnykov.fab.FloatingActionButton;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.ProtocolException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class ShopUpdate extends OptionsActivity {
|
||||||
|
private ArrayList<Horaires> h;
|
||||||
|
private RelativeLayout loading;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.update_shop);
|
||||||
|
|
||||||
|
loading = (RelativeLayout) findViewById(R.id.loading);
|
||||||
|
|
||||||
|
final Shop s = getIntent().getExtras().getParcelable("shop");
|
||||||
|
|
||||||
|
ListView hList = (ListView) findViewById(R.id.horaires_list);
|
||||||
|
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
|
||||||
|
Button save = (Button) findViewById(R.id.button);
|
||||||
|
|
||||||
|
h = new ArrayList<Horaires>();
|
||||||
|
|
||||||
|
initializeHoraires();
|
||||||
|
|
||||||
|
final UpdateAdapter adapter = new UpdateAdapter(this, h, getFragmentManager());
|
||||||
|
|
||||||
|
hList.setAdapter(adapter);
|
||||||
|
|
||||||
|
fab.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Horaires h = adapter.getItem(adapter.getCount() - 1);
|
||||||
|
adapter.add(new Horaires(h));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
save.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
loading.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
ArrayList<HashMap<String, Integer>> periodes = new ArrayList<HashMap<String, Integer>>();
|
||||||
|
Collections.sort(h);
|
||||||
|
|
||||||
|
String periodsString = "";
|
||||||
|
int i = 0;
|
||||||
|
for (Horaires hor : h) {
|
||||||
|
periodsString += "&periods[0][" + i + "][day]=" + hor.getDay();
|
||||||
|
periodsString += "&periods[0][" + i + "][from_h]=" + hor.getFrom_h();
|
||||||
|
periodsString += "&periods[0][" + i + "][to_h]=" + hor.getTo_h();
|
||||||
|
periodsString += "&periods[0][" + i + "][to_m]=" + hor.getTo_m();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toast.makeText(getApplicationContext(), "Cette fonctionnalité est en attente de validation par Les-horaires.fr", Toast.LENGTH_SHORT).show();
|
||||||
|
UpdateTask u = new UpdateTask();
|
||||||
|
u.execute(Utils.generateUrlForEdit(s.getId(), periodsString));
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializeHoraires() {
|
||||||
|
h.add(new Horaires(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private class UpdateTask extends AsyncTask<URL, Void, String> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String doInBackground(URL... params) {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
InputStream is = null;
|
||||||
|
String contentAsString = "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
URL url = params[0];
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setReadTimeout(10000 /* milliseconds */);
|
||||||
|
conn.setConnectTimeout(15000 /* milliseconds */);
|
||||||
|
conn.setRequestMethod("POST");
|
||||||
|
conn.setDoInput(true);
|
||||||
|
conn.setDoOutput(true);
|
||||||
|
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
|
||||||
|
|
||||||
|
// Starts the query
|
||||||
|
conn.connect();
|
||||||
|
is = conn.getInputStream();
|
||||||
|
|
||||||
|
// Convert the InputStream into a String
|
||||||
|
|
||||||
|
Scanner reader = new Scanner(is, "ISO-8859-1");
|
||||||
|
while (reader.hasNextLine()) {
|
||||||
|
contentAsString = contentAsString + reader.nextLine();
|
||||||
|
}
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ProtocolException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
// Makes sure that the InputStream is closed after the app is finished using it.
|
||||||
|
if (is != null)
|
||||||
|
try {
|
||||||
|
is.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (conn != null)
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
return contentAsString;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(String string) {
|
||||||
|
loading.setVisibility(View.GONE);
|
||||||
|
super.onPostExecute(string);
|
||||||
|
Toast.makeText(getApplicationContext(), "Mise à jour effectuée!", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
package com.amine.horaires;
|
||||||
|
|
||||||
|
import android.app.FragmentManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.*;
|
||||||
|
import com.amine.horaires.models.Horaires;
|
||||||
|
import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout;
|
||||||
|
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
class UpdateAdapter extends ArrayAdapter<Horaires> {
|
||||||
|
|
||||||
|
|
||||||
|
private final ArrayList<Horaires> horaires;
|
||||||
|
private final Context context;
|
||||||
|
private final FragmentManager fm;
|
||||||
|
|
||||||
|
public UpdateAdapter(Context context, ArrayList<Horaires> objects, FragmentManager fm) {
|
||||||
|
super(context, R.layout.update_horaire_item, objects);
|
||||||
|
this.context = context;
|
||||||
|
this.horaires = objects;
|
||||||
|
this.fm = fm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(final int position, View convertView, ViewGroup parent) {
|
||||||
|
LayoutInflater inflater = (LayoutInflater) context
|
||||||
|
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
View rowView = inflater.inflate(R.layout.update_horaire_item, parent, false);
|
||||||
|
final Horaires h = horaires.get(position);
|
||||||
|
final TextView timeFrom = (TextView) rowView.findViewById(R.id.from);
|
||||||
|
timeFrom.setText(String.format("%02d", h.getFrom_h()) + ":" + String.format("%02d", h.getFrom_m()));
|
||||||
|
final TextView timeTo = (TextView) rowView.findViewById(R.id.to);
|
||||||
|
timeTo.setText(String.format("%02d", h.getTo_h()) + ":" + String.format("%02d", h.getTo_m()));
|
||||||
|
String[] days = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"};
|
||||||
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.context, R.layout.spinner_item, days);
|
||||||
|
final Spinner s = (Spinner) rowView.findViewById(R.id.spinner);
|
||||||
|
s.setAdapter(adapter);
|
||||||
|
s.setSelection(h.getDay() - 1);
|
||||||
|
|
||||||
|
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
|
@Override
|
||||||
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
h.setDay(position + 1);
|
||||||
|
s.setSelection(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNothingSelected(AdapterView<?> parent) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
timeFrom.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
TimePickerDialog f = TimePickerDialog.newInstance(new TimePickerDialog.OnTimeSetListener() {
|
||||||
|
@Override
|
||||||
|
public void onTimeSet(RadialPickerLayout radialPickerLayout, int hours, int minutes) {
|
||||||
|
if (minutes % 5 == 0) {
|
||||||
|
timeFrom.setText(String.format("%02d", hours) + ":" + String.format("%02d", minutes));
|
||||||
|
h.setFrom_h(hours);
|
||||||
|
h.setFrom_m(minutes);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, "Merci d'utiliser des tranches de 5 minutes maximum", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, h.getFrom_h(), h.getFrom_m(), true);
|
||||||
|
f.show(fm, "from");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
timeTo.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
TimePickerDialog t = TimePickerDialog.newInstance(new TimePickerDialog.OnTimeSetListener() {
|
||||||
|
@Override
|
||||||
|
public void onTimeSet(RadialPickerLayout radialPickerLayout, int hours, int minutes) {
|
||||||
|
if (minutes % 5 == 0) {
|
||||||
|
timeTo.setText(String.format("%02d", hours) + ":" + String.format("%02d", minutes));
|
||||||
|
h.setTo_h(hours);
|
||||||
|
h.setTo_m(minutes);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, "Merci d'utiliser des tranches de 5 minutes maximum", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, h.getTo_h(), h.getTo_m(), true);
|
||||||
|
t.show(fm, "to");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return rowView;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package com.amine.horaires.bdd;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
|
||||||
|
class FavorisBdd extends SQLiteOpenHelper {
|
||||||
|
|
||||||
|
private static final String TABLE_FAVORIS = "shop_favoris";
|
||||||
|
private static final String COL_ID = "ID";
|
||||||
|
private static final String COL_NOM = "Nom";
|
||||||
|
private static final String COL_ADR = "Adresse";
|
||||||
|
private static final String COL_ZIP = "Zip";
|
||||||
|
private static final String COL_LAT = "Lat";
|
||||||
|
private static final String COL_LNG = "Lng";
|
||||||
|
private static final String COL_TEL = "Tel";
|
||||||
|
private static final String COL_CITY = "City";
|
||||||
|
private static final String COL_OUVERT = "Ouvert";
|
||||||
|
private static final String COL_HORAIRES = "Horaires";
|
||||||
|
private static final String COL_URL = "Url";
|
||||||
|
private static final String COL_OPENSTATUS = "OpenStatus";
|
||||||
|
private static final String COL_PARKING = "Parking";
|
||||||
|
private static final String COL_WIFI = "Wifi";
|
||||||
|
private static final String COL_HANDI = "Handi";
|
||||||
|
private static final String COL_IDPOI = "IDPoi";
|
||||||
|
|
||||||
|
private static final String CREATE_BDD = "CREATE TABLE " + TABLE_FAVORIS + " (" +
|
||||||
|
COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||||
|
COL_NOM + " TEXT, " +
|
||||||
|
COL_ADR + " TEXT, " +
|
||||||
|
COL_ZIP + " INTEGER, " +
|
||||||
|
COL_LAT + " TEXT, " +
|
||||||
|
COL_LNG + " TEXT, " +
|
||||||
|
COL_TEL + " VARCHAR(40), " +
|
||||||
|
COL_CITY + " TEXT, " +
|
||||||
|
COL_OUVERT + " SHORT, " +
|
||||||
|
COL_HORAIRES + " TEXT, " +
|
||||||
|
COL_URL + " TEXT, " +
|
||||||
|
COL_OPENSTATUS + " TEXT, " +
|
||||||
|
COL_PARKING + " SHORT, " +
|
||||||
|
COL_WIFI + " SHORT, " +
|
||||||
|
COL_HANDI + " SHORT, " +
|
||||||
|
COL_IDPOI + " VARCHAR(40) NOT NULL);";
|
||||||
|
|
||||||
|
public FavorisBdd(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
|
||||||
|
super(context, name, factory, version);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
db.execSQL(CREATE_BDD);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,159 @@
|
|||||||
|
package com.amine.horaires.bdd;
|
||||||
|
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class FavorisDao {
|
||||||
|
private static final int VERSION_BDD = 1;// pour le onupgrade de BaseSQL
|
||||||
|
private static final String NOM_BDD = "shops.db";
|
||||||
|
|
||||||
|
private static final String TABLE_FAVORIS = "shop_favoris";
|
||||||
|
private static final String COL_NOM = "Nom";
|
||||||
|
private static final String COL_ADR = "Adresse";
|
||||||
|
private static final String COL_ZIP = "Zip";
|
||||||
|
private static final String COL_LAT = "Lat";
|
||||||
|
private static final String COL_LNG = "Lng";
|
||||||
|
private static final String COL_TEL = "Tel";
|
||||||
|
private static final String COL_CITY = "City";
|
||||||
|
private static final String COL_OUVERT = "Ouvert";
|
||||||
|
private static final String COL_HORAIRES = "Horaires";
|
||||||
|
private static final String COL_URL = "Url";
|
||||||
|
private static final String COL_OPENSTATUS = "OpenStatus";
|
||||||
|
private static final String COL_PARKING = "Parking";
|
||||||
|
private static final String COL_WIFI = "Wifi";
|
||||||
|
private static final String COL_HANDI = "Handi";
|
||||||
|
private static final String COL_IDPOI = "IDPoi";
|
||||||
|
|
||||||
|
private static final int NUM_COL_NOM = 1;
|
||||||
|
private static final int NUM_COL_ADR = 2;
|
||||||
|
private static final int NUM_COL_ZIP = 3;
|
||||||
|
private static final int NUM_COL_LAT = 4;
|
||||||
|
private static final int NUM_COL_LNG = 5;
|
||||||
|
private static final int NUM_COL_TEL = 6;
|
||||||
|
private static final int NUM_COL_CITY = 7;
|
||||||
|
private static final int NUM_COL_OUVERT = 8;
|
||||||
|
private static final int NUM_COL_HORAIRES = 9;
|
||||||
|
private static final int NUM_COL_URL = 10;
|
||||||
|
private static final int NUM_COL_OPENSTATUS = 11;
|
||||||
|
private static final int NUM_COL_PARKING = 12;
|
||||||
|
private static final int NUM_COL_WIFI = 13;
|
||||||
|
private static final int NUM_COL_HANDI = 14;
|
||||||
|
private static final int NUM_COL_IDPOI = 15;
|
||||||
|
private static FavorisDao instance = null;
|
||||||
|
private final FavorisBdd maBaseSQLite;
|
||||||
|
private SQLiteDatabase bdd;
|
||||||
|
|
||||||
|
private FavorisDao(Context context) {
|
||||||
|
maBaseSQLite = new FavorisBdd(context, NOM_BDD, null, VERSION_BDD);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static FavorisDao getInstance(Context c) {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new FavorisDao(c);
|
||||||
|
return instance;
|
||||||
|
} else {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void open() {
|
||||||
|
bdd = maBaseSQLite.getWritableDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
bdd.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insertFavori(Shop favori) {
|
||||||
|
ContentValues values = getContentValues(favori);
|
||||||
|
bdd.insert(TABLE_FAVORIS, null, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContentValues getContentValues(Shop favori) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(COL_IDPOI, favori.getId());
|
||||||
|
values.put(COL_NOM, favori.getName());
|
||||||
|
values.put(COL_ADR, favori.getAdresse());
|
||||||
|
values.put(COL_ZIP, favori.getZip());
|
||||||
|
values.put(COL_LAT, favori.getLat());
|
||||||
|
values.put(COL_LNG, favori.getLng());
|
||||||
|
values.put(COL_TEL, favori.getTel());
|
||||||
|
values.put(COL_CITY, favori.getCity());
|
||||||
|
values.put(COL_OUVERT, favori.isOuvert());
|
||||||
|
values.put(COL_HORAIRES, favori.getHoraires());
|
||||||
|
values.put(COL_URL, favori.getUrl());
|
||||||
|
values.put(COL_OPENSTATUS, favori.getOpenStatus());
|
||||||
|
values.put(COL_PARKING, favori.isParking());
|
||||||
|
values.put(COL_WIFI, favori.isWifi());
|
||||||
|
values.put(COL_HANDI, favori.isAccesHandicape());
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateFavori(Shop favori) {
|
||||||
|
ContentValues values = getContentValues(favori);
|
||||||
|
bdd.update(TABLE_FAVORIS, values, COL_IDPOI + " LIKE " + "\"" + favori.getId() + "\"", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteFavori(int id) {
|
||||||
|
bdd.delete(TABLE_FAVORIS, COL_IDPOI + " LIKE \"" + id + "\"", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Shop getFavori(int id) {
|
||||||
|
Cursor c = bdd.query(TABLE_FAVORIS, null, COL_IDPOI + " LIKE \"" + id
|
||||||
|
+ "\"", null, null, null, null);
|
||||||
|
c.moveToFirst();
|
||||||
|
Shop s = cursorToFavori(c);
|
||||||
|
c.close();
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Shop cursorToFavori(Cursor c) {
|
||||||
|
if (c.getCount() == 0) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
Shop f = new Shop();
|
||||||
|
f.setId(c.getInt(NUM_COL_IDPOI));
|
||||||
|
f.setName(c.getString(NUM_COL_NOM));
|
||||||
|
f.setAdresse(c.getString(NUM_COL_ADR));
|
||||||
|
f.setZip(c.getString(NUM_COL_ZIP));
|
||||||
|
f.setLat(c.getString(NUM_COL_LAT));
|
||||||
|
f.setLng(c.getString(NUM_COL_LNG));
|
||||||
|
f.setTel(c.getString(NUM_COL_TEL));
|
||||||
|
f.setCity(c.getString(NUM_COL_CITY));
|
||||||
|
f.setOuvert(c.getShort(NUM_COL_OUVERT) != 0);
|
||||||
|
f.setHoraires(c.getString(NUM_COL_HORAIRES));
|
||||||
|
f.setUrl(c.getString(NUM_COL_URL));
|
||||||
|
f.setOpenStatus(c.getString(NUM_COL_OPENSTATUS));
|
||||||
|
f.setParking(c.getShort(NUM_COL_PARKING) != 0);
|
||||||
|
f.setWifi(c.getShort(NUM_COL_WIFI) != 0);
|
||||||
|
f.setAccesHandicape(c.getShort(NUM_COL_HANDI) != 0);
|
||||||
|
f.setId(c.getInt(NUM_COL_IDPOI));
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Shop> getAllFavoris() {
|
||||||
|
Cursor c = bdd.rawQuery("SELECT * FROM " + TABLE_FAVORIS, null);
|
||||||
|
return cursorToListeFavoris(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<Shop> cursorToListeFavoris(Cursor cursor) {
|
||||||
|
ArrayList<Shop> list = new ArrayList<Shop>();
|
||||||
|
if (cursor.getCount() != 0) {
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
while (!cursor.isAfterLast()) {
|
||||||
|
|
||||||
|
list.add(cursorToFavori(cursor));
|
||||||
|
cursor.moveToNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,112 @@
|
|||||||
|
package com.amine.horaires.models;
|
||||||
|
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
public class Horaires implements Comparable {
|
||||||
|
/*
|
||||||
|
periods[N][title] Title of N period - optional
|
||||||
|
periods[N][T][day] 1 (Monday) to 7 (Sunday) - Day of opening window T for period N
|
||||||
|
periods[N][T][from_h] 0 to 23 - Hour of beginning of opening window T for period N
|
||||||
|
periods[N][T][from_m] 0 to 59 (minutes) - Minute of beginning of opening window T for period N
|
||||||
|
periods[N][T][to_h] 0 to 32 (8am the next morning) - Hour of end of opening window T for period N
|
||||||
|
periods[N][T][to_m] 0 to 59 (minutes) - Minute of end of opening window T for period N
|
||||||
|
*/
|
||||||
|
|
||||||
|
private int day;
|
||||||
|
private int from_h;
|
||||||
|
private int from_m;
|
||||||
|
private int to_h;
|
||||||
|
private int to_m;
|
||||||
|
|
||||||
|
public Horaires(int day) {
|
||||||
|
this.day = day;
|
||||||
|
this.from_h = 8;
|
||||||
|
this.from_m = 0;
|
||||||
|
this.to_h = 18;
|
||||||
|
this.to_m = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Horaires() {
|
||||||
|
this.day = 1;
|
||||||
|
this.from_h = 8;
|
||||||
|
this.from_m = 0;
|
||||||
|
this.to_h = 18;
|
||||||
|
this.to_m = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Horaires(Horaires h) {
|
||||||
|
this.day = h.getDay();
|
||||||
|
this.from_h = h.getFrom_h();
|
||||||
|
this.from_m = h.getFrom_m();
|
||||||
|
this.to_h = h.getTo_h();
|
||||||
|
this.to_m = h.getTo_m();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDay() {
|
||||||
|
return day;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDay(int day) {
|
||||||
|
this.day = day;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFrom_h() {
|
||||||
|
return from_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrom_h(int from_h) {
|
||||||
|
this.from_h = from_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFrom_m() {
|
||||||
|
return from_m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrom_m(int from_m) {
|
||||||
|
this.from_m = from_m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTo_h() {
|
||||||
|
return to_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTo_h(int to_h) {
|
||||||
|
this.to_h = to_h;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTo_m() {
|
||||||
|
return to_m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTo_m(int to_m) {
|
||||||
|
this.to_m = to_m;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(@NonNull Object another) {
|
||||||
|
Horaires h = (Horaires) another;
|
||||||
|
return this.day - h.day;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Horaires horaires = (Horaires) o;
|
||||||
|
|
||||||
|
return this.day == horaires.day;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = day;
|
||||||
|
result = 31 * result + from_h;
|
||||||
|
result = 31 * result + from_m;
|
||||||
|
result = 31 * result + to_h;
|
||||||
|
result = 31 * result + to_m;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
240
Les Horaires/src/main/java/com/amine/horaires/models/Shop.java
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
package com.amine.horaires.models;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
public class Shop implements Parcelable {
|
||||||
|
public static final Parcelable.Creator<Shop> CREATOR = new Parcelable.Creator<Shop>() {
|
||||||
|
@Override
|
||||||
|
public Shop createFromParcel(Parcel source) {
|
||||||
|
return new Shop(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Shop[] newArray(int size) {
|
||||||
|
return new Shop[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
private String adresse;
|
||||||
|
private String zip;
|
||||||
|
private String lat;
|
||||||
|
private String lng;
|
||||||
|
private String tel;
|
||||||
|
private String city;
|
||||||
|
private boolean ouvert;
|
||||||
|
private String horaires;
|
||||||
|
private String url;
|
||||||
|
private String openStatus;
|
||||||
|
private boolean parking;
|
||||||
|
private boolean wifi;
|
||||||
|
private boolean AccesHandicape;
|
||||||
|
|
||||||
|
public Shop() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Shop(int id, String name, String adresse, String zip, String lat,
|
||||||
|
String lng, String tel, String city,
|
||||||
|
boolean ouvert, String horaires, String url, String openStatus,
|
||||||
|
boolean parking, boolean wifi, boolean accesHandicape) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.adresse = adresse;
|
||||||
|
this.zip = zip;
|
||||||
|
this.lat = lat;
|
||||||
|
this.lng = lng;
|
||||||
|
this.tel = tel;
|
||||||
|
this.city = city;
|
||||||
|
this.ouvert = ouvert;
|
||||||
|
this.horaires = horaires;
|
||||||
|
this.url = url;
|
||||||
|
this.openStatus = openStatus;
|
||||||
|
this.parking = parking;
|
||||||
|
this.wifi = wifi;
|
||||||
|
AccesHandicape = accesHandicape;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Shop(Parcel in) {
|
||||||
|
id = in.readInt();
|
||||||
|
name = in.readString();
|
||||||
|
adresse = in.readString();
|
||||||
|
zip = in.readString();
|
||||||
|
lat = in.readString();
|
||||||
|
lng = in.readString();
|
||||||
|
tel = in.readString();
|
||||||
|
city = in.readString();
|
||||||
|
ouvert = in.readByte() != 0;
|
||||||
|
horaires = in.readString();
|
||||||
|
url = in.readString();
|
||||||
|
openStatus = in.readString();
|
||||||
|
parking = in.readByte() != 0;
|
||||||
|
wifi = in.readByte() != 0;
|
||||||
|
AccesHandicape = in.readByte() != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Shop{" +
|
||||||
|
"id=" + id +
|
||||||
|
", name='" + name + '\'' +
|
||||||
|
", adresse='" + adresse + '\'' +
|
||||||
|
", zip='" + zip + '\'' +
|
||||||
|
", lat='" + lat + '\'' +
|
||||||
|
", lng='" + lng + '\'' +
|
||||||
|
", tel='" + tel + '\'' +
|
||||||
|
", city='" + city + '\'' +
|
||||||
|
", ouvert=" + ouvert +
|
||||||
|
", horaires='" + horaires + '\'' +
|
||||||
|
", url='" + url + '\'' +
|
||||||
|
", openStatus='" + openStatus + '\'' +
|
||||||
|
", parking=" + parking +
|
||||||
|
", wifi=" + wifi +
|
||||||
|
", AccesHandicape=" + AccesHandicape +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAccesHandicape() {
|
||||||
|
return AccesHandicape;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccesHandicape(boolean accesHandicape) {
|
||||||
|
AccesHandicape = accesHandicape;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOpenStatus() {
|
||||||
|
return openStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenStatus(String openStatus) {
|
||||||
|
this.openStatus = openStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isParking() {
|
||||||
|
return parking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParking(boolean parking) {
|
||||||
|
this.parking = parking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isWifi() {
|
||||||
|
return wifi;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWifi(boolean wifi) {
|
||||||
|
this.wifi = wifi;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTel() {
|
||||||
|
return tel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTel(String tel) {
|
||||||
|
this.tel = tel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAdresse() {
|
||||||
|
return adresse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAdresse(String adresse) {
|
||||||
|
this.adresse = adresse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLat() {
|
||||||
|
return lat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLat(String lat) {
|
||||||
|
this.lat = lat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLng() {
|
||||||
|
return lng;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLng(String lng) {
|
||||||
|
this.lng = lng;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOuvert() {
|
||||||
|
return ouvert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOuvert(boolean ouvert) {
|
||||||
|
this.ouvert = ouvert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHoraires() {
|
||||||
|
return horaires;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHoraires(String horaires) {
|
||||||
|
this.horaires = horaires;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getZip() {
|
||||||
|
return zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setZip(String zip) {
|
||||||
|
this.zip = zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeInt(id);
|
||||||
|
dest.writeString(name);
|
||||||
|
dest.writeString(adresse);
|
||||||
|
dest.writeString(zip);
|
||||||
|
dest.writeString(lat);
|
||||||
|
dest.writeString(lng);
|
||||||
|
dest.writeString(tel);
|
||||||
|
dest.writeString(city);
|
||||||
|
dest.writeByte((byte) (ouvert ? 1 : 0));
|
||||||
|
dest.writeString(horaires);
|
||||||
|
dest.writeString(url);
|
||||||
|
dest.writeString(openStatus);
|
||||||
|
dest.writeByte((byte) (parking ? 1 : 0));
|
||||||
|
dest.writeByte((byte) (wifi ? 1 : 0));
|
||||||
|
dest.writeByte((byte) (AccesHandicape ? 1 : 0));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.amine.horaires.util;
|
||||||
|
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
|
||||||
|
public class Configuration {
|
||||||
|
// Cles necessaires pour l'api lesHorraires
|
||||||
|
public static final String key = "REPLACE_THIS_WITH_KEY";
|
||||||
|
public static final String hashtag = "REPLACE_THIS_WITH_A_HASHTAG";
|
||||||
|
public static String pays = "FR";
|
||||||
|
public static Shop currentShop = null;
|
||||||
|
|
||||||
|
public static String getAPIUrl() {
|
||||||
|
if (pays.equals("FR"))
|
||||||
|
return "http://www.les-horaires.fr";
|
||||||
|
else if (pays.equals("GB"))
|
||||||
|
return "http://www.shopping-time.co.uk";
|
||||||
|
else if (pays.equals("US"))
|
||||||
|
return "http://www.shopping-time.com";
|
||||||
|
|
||||||
|
return "http://www.les-horaires.fr";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,129 @@
|
|||||||
|
package com.amine.horaires.util;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.location.LocationListener;
|
||||||
|
import android.location.LocationManager;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
// http://stackoverflow.com/questions/3145089/what-is-the-simplest-and-most-robust-way-to-get-the-users-current-location-in-a/3145655#3145655
|
||||||
|
public class MyLocation {
|
||||||
|
private Timer timer1;
|
||||||
|
private LocationManager lm;
|
||||||
|
private LocationResult locationResult;
|
||||||
|
private final LocationListener locationListenerGps = new LocationListener() {
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
timer1.cancel();
|
||||||
|
locationResult.gotLocation(location);
|
||||||
|
lm.removeUpdates(this);
|
||||||
|
lm.removeUpdates(locationListenerNetwork);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onProviderDisabled(String provider) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onProviderEnabled(String provider) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private final LocationListener locationListenerNetwork = new LocationListener() {
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
timer1.cancel();
|
||||||
|
locationResult.gotLocation(location);
|
||||||
|
lm.removeUpdates(this);
|
||||||
|
lm.removeUpdates(locationListenerGps);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onProviderDisabled(String provider) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onProviderEnabled(String provider) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private boolean gps_enabled = false;
|
||||||
|
private boolean network_enabled = false;
|
||||||
|
|
||||||
|
public boolean getLocation(Context context, LocationResult result) {
|
||||||
|
locationResult = result;
|
||||||
|
if (lm == null)
|
||||||
|
lm = (LocationManager) context
|
||||||
|
.getSystemService(Context.LOCATION_SERVICE);
|
||||||
|
|
||||||
|
try {
|
||||||
|
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.w("LOC", "gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
network_enabled = lm
|
||||||
|
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.w("LOC", "network_enabled = lm .isProviderEnabled(LocationManager.NETWORK_PROVIDER);");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gps_enabled && !network_enabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (gps_enabled)
|
||||||
|
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
|
||||||
|
locationListenerGps);
|
||||||
|
if (network_enabled)
|
||||||
|
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
|
||||||
|
locationListenerNetwork);
|
||||||
|
timer1 = new Timer();
|
||||||
|
timer1.schedule(new GetLastLocation(), 20000);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cancelTimer() {
|
||||||
|
timer1.cancel();
|
||||||
|
lm.removeUpdates(locationListenerGps);
|
||||||
|
lm.removeUpdates(locationListenerNetwork);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static abstract class LocationResult {
|
||||||
|
public abstract void gotLocation(Location location);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class GetLastLocation extends TimerTask {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
lm.removeUpdates(locationListenerGps);
|
||||||
|
lm.removeUpdates(locationListenerNetwork);
|
||||||
|
|
||||||
|
Location net_loc = null, gps_loc = null;
|
||||||
|
if (gps_enabled)
|
||||||
|
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
|
||||||
|
if (network_enabled)
|
||||||
|
net_loc = lm
|
||||||
|
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
|
||||||
|
|
||||||
|
if (gps_loc != null && net_loc != null) {
|
||||||
|
if (gps_loc.getTime() > net_loc.getTime())
|
||||||
|
locationResult.gotLocation(gps_loc);
|
||||||
|
else
|
||||||
|
locationResult.gotLocation(net_loc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gps_loc != null) {
|
||||||
|
locationResult.gotLocation(gps_loc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (net_loc != null) {
|
||||||
|
locationResult.gotLocation(net_loc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
locationResult.gotLocation(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
224
Les Horaires/src/main/java/com/amine/horaires/util/Parseur.java
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
package com.amine.horaires.util;
|
||||||
|
|
||||||
|
import com.amine.horaires.models.Shop;
|
||||||
|
import org.xml.sax.Attributes;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
import org.xml.sax.helpers.DefaultHandler;
|
||||||
|
|
||||||
|
import javax.xml.parsers.SAXParser;
|
||||||
|
import javax.xml.parsers.SAXParserFactory;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parseur qui permet de parcourir le fichier xml genere
|
||||||
|
*/
|
||||||
|
public class Parseur {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parcours le fichier xml , insere les donnees de l'utilisateur et son
|
||||||
|
* historique
|
||||||
|
*
|
||||||
|
* @return une arraylist de collections
|
||||||
|
*/
|
||||||
|
public ArrayList<Shop> parserShops(String contenuDuFichier) {
|
||||||
|
final ArrayList<Shop> listeMagasins = new ArrayList<Shop>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
SAXParserFactory factory = SAXParserFactory.newInstance();
|
||||||
|
SAXParser saxParser = factory.newSAXParser();
|
||||||
|
|
||||||
|
DefaultHandler handler = new DefaultHandler() {
|
||||||
|
Shop magasin;
|
||||||
|
|
||||||
|
boolean url = false;
|
||||||
|
boolean name = false;
|
||||||
|
boolean address = false;
|
||||||
|
boolean ville = false;
|
||||||
|
boolean zip = false;
|
||||||
|
boolean lat = false;
|
||||||
|
boolean lng = false;
|
||||||
|
boolean tel = false;
|
||||||
|
boolean img = false;
|
||||||
|
boolean open = false;
|
||||||
|
boolean open_status = false;
|
||||||
|
boolean pmr = false;
|
||||||
|
boolean wifi = false;
|
||||||
|
boolean freepark = false;
|
||||||
|
|
||||||
|
public void startElement(String uri, String localName,
|
||||||
|
String qName, Attributes attributes)
|
||||||
|
throws SAXException {
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("shop"))
|
||||||
|
magasin = new Shop();
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("url"))
|
||||||
|
url = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("name"))
|
||||||
|
name = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("address"))
|
||||||
|
address = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("city"))
|
||||||
|
ville = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("zip"))
|
||||||
|
zip = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("lat"))
|
||||||
|
lat = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("lng"))
|
||||||
|
lng = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("tel"))
|
||||||
|
tel = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("img"))
|
||||||
|
img = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("open"))
|
||||||
|
open = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("open_status"))
|
||||||
|
open_status = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("pmr"))
|
||||||
|
pmr = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("pmr"))
|
||||||
|
pmr = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("wifi"))
|
||||||
|
wifi = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("freepark"))
|
||||||
|
freepark = true;
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("shop")) {
|
||||||
|
int length = attributes.getLength();
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
String nameA = attributes.getQName(i);
|
||||||
|
String valueA = attributes.getValue(i);
|
||||||
|
|
||||||
|
if (nameA.compareTo("id") == 0) {
|
||||||
|
magasin.setId(Integer.parseInt(valueA));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void endElement(String uri, String localName,
|
||||||
|
String qName) throws SAXException {
|
||||||
|
|
||||||
|
if (qName.equalsIgnoreCase("shop"))
|
||||||
|
listeMagasins.add(magasin);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void characters(char ch[], int start, int length)
|
||||||
|
throws SAXException {
|
||||||
|
|
||||||
|
if (url) {
|
||||||
|
magasin.setUrl(new String(ch, start, length));
|
||||||
|
url = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name) {
|
||||||
|
magasin.setName(new String(ch, start, length));
|
||||||
|
name = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (address) {
|
||||||
|
magasin.setAdresse(new String(ch, start, length));
|
||||||
|
address = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ville) {
|
||||||
|
magasin.setCity(new String(ch, start, length));
|
||||||
|
ville = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zip) {
|
||||||
|
magasin.setZip(new String(ch, start, length));
|
||||||
|
zip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lat) {
|
||||||
|
magasin.setLat(new String(ch, start, length));
|
||||||
|
lat = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lng) {
|
||||||
|
magasin.setLng(new String(ch, start, length));
|
||||||
|
lng = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tel) {
|
||||||
|
magasin.setTel(new String(ch, start, length));
|
||||||
|
tel = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (img) {
|
||||||
|
magasin.setHoraires(new String(ch, start, length));
|
||||||
|
img = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (open) {
|
||||||
|
magasin.setOuvert(new String(ch, start, length)
|
||||||
|
.compareTo("1") == 0);
|
||||||
|
open = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (open_status) {
|
||||||
|
magasin.setOpenStatus(new String(ch, start, length));
|
||||||
|
open_status = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pmr) {
|
||||||
|
magasin.setAccesHandicape(new String(ch, start, length)
|
||||||
|
.compareTo("1") == 0);
|
||||||
|
pmr = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wifi) {
|
||||||
|
magasin.setWifi(new String(ch, start, length)
|
||||||
|
.compareTo("1") == 0);
|
||||||
|
wifi = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (freepark) {
|
||||||
|
magasin.setParking(new String(ch, start, length)
|
||||||
|
.compareTo("1") == 0);
|
||||||
|
freepark = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
InputStream inputStream = new ByteArrayInputStream(
|
||||||
|
contenuDuFichier.getBytes());
|
||||||
|
Reader reader = new InputStreamReader(inputStream, "UTF-8");
|
||||||
|
|
||||||
|
InputSource is = new InputSource(reader);
|
||||||
|
is.setEncoding("UTF-8");
|
||||||
|
|
||||||
|
saxParser.parse(is, handler);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return listeMagasins;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
package com.amine.horaires.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
|
||||||
|
public class Utils {
|
||||||
|
public static URL generateUrlForTextLocation(String name, String location) {
|
||||||
|
try {
|
||||||
|
return new URL(Configuration.getAPIUrl() + "/api?key="
|
||||||
|
+ Configuration.key + "&h=" + Configuration.hashtag
|
||||||
|
+ "&get=shops" + "&loc=" + URLEncoder.encode(location, "ISO-8859-1")
|
||||||
|
+ "&name=" + URLEncoder.encode(name, "ISO-8859-1"));
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static URL generateUrlForLatLng(String name, String lat,
|
||||||
|
String lng) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
return new URL(Configuration.getAPIUrl() + "/api?key="
|
||||||
|
+ Configuration.key + "&h=" + Configuration.hashtag
|
||||||
|
+ "&get=shops" + "&lng=" + lng + "&lat=" + lat + "&name="
|
||||||
|
+ URLEncoder.encode(name, "ISO-8859-1") + "&order=distance");
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static URL generateUrlForId(int idPoi) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
return new URL(Configuration.getAPIUrl() + "/api?key="
|
||||||
|
+ Configuration.key + "&h=" + Configuration.hashtag
|
||||||
|
+ "&get=shop" + "&id=" + idPoi);
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static URL generateUrlForEdit(int idPoi, String periodsString) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
return new URL(Configuration.getAPIUrl() + "/api?key="
|
||||||
|
+ Configuration.key + "&h=" + Configuration.hashtag
|
||||||
|
+ "&get=edit" + "&id=" + idPoi + periodsString);
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
43
Les Horaires/src/main/res/layout/activity_main.xml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:fab="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:background="@color/background"
|
||||||
|
tools:context="${relativePackage}.${activSityClass}">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/favs_list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/empty_list"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:background="@color/background"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/listvide"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
<com.melnykov.fab.FloatingActionButton
|
||||||
|
android:id="@+id/fab"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_gravity="bottom|right"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
android:src="@mipmap/plus"
|
||||||
|
fab:fab_colorNormal="@color/accent"
|
||||||
|
fab:fab_colorPressed="@color/primary_dark"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
74
Les Horaires/src/main/res/layout/activity_more.xml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/primary_dark"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView4"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:text="Librairies"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
|
android:textColor="@color/accent"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView5"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="https://github.com/wdullaer/MaterialDateTimePicker"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView6"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="https://github.com/pnikosis/materialish-progress"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView7"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="https://github.com/makovkastar/FloatingActionButton"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView8"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:text="Icônes"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
|
android:textColor="@color/accent"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView9"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="https://thenounproject.com/term/wheelchair-accessible/13098/#"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView10"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="https://thenounproject.com/term/wifi/47165/"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView11"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:autoLink="web"
|
||||||
|
android:text="https://github.com/google/material-design-icons"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||||
|
</LinearLayout>
|
36
Les Horaires/src/main/res/layout/fav_list_item.xml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="72dp"
|
||||||
|
android:background="?selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:paddingBottom="20dp"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingRight="16dp"
|
||||||
|
android:paddingTop="16dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/shop_name"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:textSize="16sp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/shop_adress"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="@color/accent"
|
||||||
|
android:textSize="14sp"/>
|
||||||
|
</RelativeLayout>
|
148
Les Horaires/src/main/res/layout/shop_display.xml
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:fab="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/background"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="192sp"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:contentDescription="@string/descriptionHoraire"
|
||||||
|
android:elevation="1dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/shopName"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_marginLeft="16dp"
|
||||||
|
android:layout_marginRight="16dp"
|
||||||
|
android:layout_marginTop="208dp"
|
||||||
|
android:textColor="@color/accent"
|
||||||
|
android:textSize="24sp"
|
||||||
|
android:textStyle="bold"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/shopAdress"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/shopName"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textStyle="italic"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/shopOpen"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/shopAdress"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="20sp"
|
||||||
|
android:textColor="@color/text_dark"
|
||||||
|
android:textSize="14sp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/shopStatus"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/shopOpen"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="8sp"
|
||||||
|
android:textColor="@color/text_dark"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/imageStatus"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/shopStatus"
|
||||||
|
android:layout_marginBottom="16sp"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="16sp"
|
||||||
|
android:elevation="1dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/wifi"
|
||||||
|
android:layout_width="120sp"
|
||||||
|
android:layout_height="120sp"
|
||||||
|
android:contentDescription="@string/descriptionWifi"
|
||||||
|
android:focusable="false"
|
||||||
|
android:src="@mipmap/wifi"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/parking"
|
||||||
|
android:layout_width="120sp"
|
||||||
|
android:layout_height="120sp"
|
||||||
|
android:contentDescription="@string/descriptionParking"
|
||||||
|
android:src="@mipmap/parking"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/handi"
|
||||||
|
android:layout_width="120sp"
|
||||||
|
android:layout_height="120sp"
|
||||||
|
android:contentDescription="@string/descriptionHandi"
|
||||||
|
android:src="@mipmap/handi"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/callButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_above="@+id/imageStatus"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_marginBottom="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:contentDescription="@string/descriptionCall"
|
||||||
|
android:elevation="1dp"
|
||||||
|
android:src="@mipmap/call"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/gpsButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignBottom="@+id/callButton"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_toLeftOf="@+id/callButton"
|
||||||
|
android:layout_toStartOf="@+id/callButton"
|
||||||
|
android:contentDescription="@string/descriptionMap"
|
||||||
|
android:elevation="1dp"
|
||||||
|
android:src="@mipmap/map"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<com.melnykov.fab.FloatingActionButton
|
||||||
|
android:id="@+id/fab"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_gravity="bottom|right"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
android:src="@mipmap/ic_create_black_24dp"
|
||||||
|
fab:fab_colorNormal="@color/accent"
|
||||||
|
fab:fab_colorPressed="@color/primary_dark"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
111
Les Horaires/src/main/res/layout/shop_search.xml
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:wheel="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/background">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="50sp"
|
||||||
|
android:text="@string/what"
|
||||||
|
android:textColor="@color/text_dark"
|
||||||
|
android:textSize="12sp"/>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/textView2"
|
||||||
|
android:layout_marginBottom="16sp"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="16sp"
|
||||||
|
android:inputType="text"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="@color/primary_dark"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/name"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="50sp"
|
||||||
|
android:text="@string/where"
|
||||||
|
android:textColor="@color/text_dark"/>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/location"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/textView3"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:layout_marginTop="16sp"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="textPostalAddress"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textColor="@color/primary_dark"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/searchAction"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_below="@+id/location"
|
||||||
|
android:layout_marginLeft="16sp"
|
||||||
|
android:layout_marginTop="73dp"
|
||||||
|
android:text="@string/find"
|
||||||
|
android:textColor="@color/accent"/>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/gpsAction"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignBottom="@+id/searchAction"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_marginRight="16sp"
|
||||||
|
android:contentDescription="@string/descriptionButtonGps"
|
||||||
|
android:src="@android:drawable/ic_menu_compass"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/loading"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:elevation="1dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<com.pnikosis.materialishprogress.ProgressWheel
|
||||||
|
android:id="@+id/progress_wheel"
|
||||||
|
android:layout_width="80dp"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
wheel:matProg_barColor="#5588FF"
|
||||||
|
wheel:matProg_progressIndeterminate="true"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
10
Les Horaires/src/main/res/layout/spinner_item.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="52dp"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:textColor="#000000"/>
|
40
Les Horaires/src/main/res/layout/update_horaire_item.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="72sp"
|
||||||
|
android:background="#ffffff"
|
||||||
|
android:gravity="center_vertical|center|center_horizontal"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/spinner"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_weight=".4"
|
||||||
|
android:entries="@array/days_arrays"
|
||||||
|
android:prompt="@string/jour"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/from"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_weight=".3"
|
||||||
|
android:clickable="true"
|
||||||
|
android:ems="10"
|
||||||
|
android:gravity="center_vertical|center_horizontal"
|
||||||
|
android:textColor="#000000"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/to"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_weight=".3"
|
||||||
|
android:clickable="true"
|
||||||
|
android:ems="10"
|
||||||
|
android:gravity="center_vertical|center_horizontal"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textColor="#000000"/>
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
63
Les Horaires/src/main/res/layout/update_shop.xml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:fab="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:wheel="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:background="@color/background"
|
||||||
|
tools:context="${relativePackage}.${activSityClass}">
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/horaires_list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_above="@+id/button"
|
||||||
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:scrollbars="vertical"/>
|
||||||
|
|
||||||
|
<com.melnykov.fab.FloatingActionButton
|
||||||
|
android:id="@+id/fab"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_gravity="bottom|right"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
android:src="@mipmap/ic_alarm_add_black_24dp"
|
||||||
|
fab:fab_colorNormal="@color/accent"
|
||||||
|
fab:fab_colorPressed="@color/primary_dark"
|
||||||
|
tools:ignore="RelativeOverlap"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/button"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:text="@string/save"
|
||||||
|
android:textColor="@color/accent"/>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/loading"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:elevation="1dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<com.pnikosis.materialishprogress.ProgressWheel
|
||||||
|
android:id="@+id/progress_wheel"
|
||||||
|
android:layout_width="80dp"
|
||||||
|
android:layout_height="80dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
wheel:matProg_barColor="#5588FF"
|
||||||
|
wheel:matProg_progressIndeterminate="true"/>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
11
Les Horaires/src/main/res/menu/main_activity_actions.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_about"
|
||||||
|
android:title="@string/about"
|
||||||
|
/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_mail"
|
||||||
|
android:title="@string/contact"
|
||||||
|
/>
|
||||||
|
</menu>
|
@ -0,0 +1,10 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:horaires="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_reload"
|
||||||
|
android:icon="@mipmap/ic_cached_black_24dp"
|
||||||
|
android:title="@string/vider"
|
||||||
|
horaires:showAsAction="ifRoom"/>
|
||||||
|
|
||||||
|
</menu>
|
@ -0,0 +1,10 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:horaires="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_fav"
|
||||||
|
android:icon="@mipmap/ic_turned_in_not_black_24dp"
|
||||||
|
android:title="@string/favoris"
|
||||||
|
horaires:showAsAction="ifRoom"/>
|
||||||
|
|
||||||
|
</menu>
|
BIN
Les Horaires/src/main/res/mipmap-hdpi/call.png
Normal file
After Width: | Height: | Size: 424 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/handi.png
Normal file
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 686 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/ic_cached_black_24dp.png
Normal file
After Width: | Height: | Size: 460 B |
After Width: | Height: | Size: 187 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/ic_create_black_24dp.png
Normal file
After Width: | Height: | Size: 242 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 265 B |
After Width: | Height: | Size: 322 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/map.png
Normal file
After Width: | Height: | Size: 426 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/parking.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
Les Horaires/src/main/res/mipmap-hdpi/plus.png
Normal file
After Width: | Height: | Size: 517 B |
BIN
Les Horaires/src/main/res/mipmap-hdpi/wifi.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Les Horaires/src/main/res/mipmap-mdpi/call.png
Normal file
After Width: | Height: | Size: 338 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/handi.png
Normal file
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 471 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/ic_cached_black_24dp.png
Normal file
After Width: | Height: | Size: 341 B |
After Width: | Height: | Size: 162 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/ic_create_black_24dp.png
Normal file
After Width: | Height: | Size: 242 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 217 B |
After Width: | Height: | Size: 261 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/map.png
Normal file
After Width: | Height: | Size: 331 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/parking.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
Les Horaires/src/main/res/mipmap-mdpi/plus.png
Normal file
After Width: | Height: | Size: 386 B |
BIN
Les Horaires/src/main/res/mipmap-mdpi/wifi.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/call.png
Normal file
After Width: | Height: | Size: 518 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/handi.png
Normal file
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 901 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/ic_cached_black_24dp.png
Normal file
After Width: | Height: | Size: 532 B |
After Width: | Height: | Size: 179 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/ic_create_black_24dp.png
Normal file
After Width: | Height: | Size: 299 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 316 B |
After Width: | Height: | Size: 358 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/map.png
Normal file
After Width: | Height: | Size: 530 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/parking.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/plus.png
Normal file
After Width: | Height: | Size: 605 B |
BIN
Les Horaires/src/main/res/mipmap-xhdpi/wifi.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/call.png
Normal file
After Width: | Height: | Size: 705 B |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/handi.png
Normal file
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 1.2 KiB |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/ic_cached_black_24dp.png
Normal file
After Width: | Height: | Size: 778 B |
After Width: | Height: | Size: 207 B |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/ic_create_black_24dp.png
Normal file
After Width: | Height: | Size: 366 B |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 390 B |
After Width: | Height: | Size: 464 B |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/map.png
Normal file
After Width: | Height: | Size: 704 B |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/parking.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/plus.png
Normal file
After Width: | Height: | Size: 835 B |
BIN
Les Horaires/src/main/res/mipmap-xxhdpi/wifi.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Les Horaires/src/main/res/mipmap-xxxhdpi/handi.png
Normal file
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 957 B |
After Width: | Height: | Size: 220 B |
After Width: | Height: | Size: 406 B |
BIN
Les Horaires/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 467 B |
After Width: | Height: | Size: 570 B |
BIN
Les Horaires/src/main/res/mipmap-xxxhdpi/map.png
Normal file
After Width: | Height: | Size: 911 B |
BIN
Les Horaires/src/main/res/mipmap-xxxhdpi/parking.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
Les Horaires/src/main/res/mipmap-xxxhdpi/plus.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
Les Horaires/src/main/res/mipmap-xxxhdpi/wifi.png
Normal file
After Width: | Height: | Size: 16 KiB |
38
Les Horaires/src/main/res/values-v21/strings.xml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">Les Horaires</string>
|
||||||
|
|
||||||
|
<string name="about">À propos</string>
|
||||||
|
<string name="settings">Paramètres</string>
|
||||||
|
<string name="jour">Jour</string>
|
||||||
|
<string name="ouverture">Ouverture</string>
|
||||||
|
<string name="fermeture">Fermeture</string>
|
||||||
|
<string name="vider">Retrourner aux favoris</string>
|
||||||
|
<string name="favoris">Favoris</string>
|
||||||
|
<string name="what">Quoi ?</string>
|
||||||
|
<string name="listvide">Votre liste de magasins est vide.</string>
|
||||||
|
<string name="save">Sauvegarder</string>
|
||||||
|
<string name="where">Où ?</string>
|
||||||
|
<string name="find">Chercher</string>
|
||||||
|
<string name="descriptionHoraire">Horaires</string>
|
||||||
|
<string name="descriptionButtonGps">Boutton GPS</string>
|
||||||
|
<string name="descriptionWifi">Wifi</string>
|
||||||
|
<string name="descriptionParking">Parking</string>
|
||||||
|
<string name="descriptionHandi">Mobilité réduite</string>
|
||||||
|
<string name="descriptionCall">Appeler</string>
|
||||||
|
<string name="descriptionMap">Maps</string>
|
||||||
|
<string name="changelog_full_title">Changements</string>
|
||||||
|
<string name="changelog_title">Nouveautés</string>
|
||||||
|
<string name="changelog_ok_button">OK</string>
|
||||||
|
<string name="changelog_show_full">Plus…</string>
|
||||||
|
<string name="contact">Contacter le dev</string>
|
||||||
|
<string-array name="days_arrays">
|
||||||
|
<item>Lundi</item>
|
||||||
|
<item>Mardi</item>
|
||||||
|
<item>Mercredi</item>
|
||||||
|
<item>Jeudi</item>
|
||||||
|
<item>Vendredi</item>
|
||||||
|
<item>Samedi</item>
|
||||||
|
<item>Dimanche</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
24
Les Horaires/src/main/res/values-v21/styles.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
|
<!-- your app branding color for the app bar -->
|
||||||
|
<item name="colorPrimary">@color/primary</item>
|
||||||
|
<!-- darker variant for the status bar and contextual app bars -->
|
||||||
|
<item name="colorPrimaryDark">@color/primary_dark</item>
|
||||||
|
<!-- theme UI controls like checkboxes and text fields -->
|
||||||
|
<item name="colorAccent">@color/accent</item>
|
||||||
|
<item name="android:textColorPrimary">@color/text_primary</item>
|
||||||
|
<item name="android:textColorSecondary">@color/text_dark</item>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="SpinnerItem">
|
||||||
|
<item name="android:textAppearance">@color/primary_dark</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Spinner">
|
||||||
|
<item name="android:checkMark">@color/primary</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</resources>
|
37
Les Horaires/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<resources>
|
||||||
|
<string name="app_name">Les Horaires</string>
|
||||||
|
|
||||||
|
<string name="about">À propos</string>
|
||||||
|
<string name="settings">Paramètres</string>
|
||||||
|
<string name="jour">Jour</string>
|
||||||
|
<string name="ouverture">Ouverture</string>
|
||||||
|
<string name="fermeture">Fermeture</string>
|
||||||
|
<string name="vider">Retrourner aux favoris</string>
|
||||||
|
<string name="favoris">Favoris</string>
|
||||||
|
<string name="what">Quoi ?</string>
|
||||||
|
<string name="listvide">Votre liste de magasins est vide.</string>
|
||||||
|
<string name="save">Sauvegarder</string>
|
||||||
|
<string name="where">Où ?</string>
|
||||||
|
<string name="find">Chercher</string>
|
||||||
|
<string name="descriptionHoraire">Horaires</string>
|
||||||
|
<string name="descriptionButtonGps">Boutton GPS</string>
|
||||||
|
<string name="descriptionWifi">Wifi</string>
|
||||||
|
<string name="descriptionParking">Parking</string>
|
||||||
|
<string name="descriptionHandi">Mobilité réduite</string>
|
||||||
|
<string name="descriptionCall">Appeler</string>
|
||||||
|
<string name="descriptionMap">Maps</string>
|
||||||
|
<string name="changelog_full_title">Changements</string>
|
||||||
|
<string name="changelog_title">Nouveautés</string>
|
||||||
|
<string name="changelog_ok_button">OK</string>
|
||||||
|
<string name="changelog_show_full">Plus…</string>
|
||||||
|
<string name="contact">Contacter le dev</string>
|
||||||
|
<string-array name="days_arrays">
|
||||||
|
<item>Lundi</item>
|
||||||
|
<item>Mardi</item>
|
||||||
|
<item>Mercredi</item>
|
||||||
|
<item>Jeudi</item>
|
||||||
|
<item>Vendredi</item>
|
||||||
|
<item>Samedi</item>
|
||||||
|
<item>Dimanche</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
29
Les Horaires/src/main/res/values/styles.xml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<resources>
|
||||||
|
|
||||||
|
<!-- Base application theme. -->
|
||||||
|
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
|
<!-- your app branding color for the app bar -->
|
||||||
|
<item name="colorPrimary">@color/primary</item>
|
||||||
|
<!-- darker variant for the status bar and contextual app bars -->
|
||||||
|
<item name="colorPrimaryDark">@color/primary_dark</item>
|
||||||
|
<!-- theme UI controls like checkboxes and text fields -->
|
||||||
|
<item name="colorAccent">@color/accent</item>
|
||||||
|
<item name="android:textColorPrimary">@color/text_primary</item>
|
||||||
|
<item name="android:textColorSecondary">@color/text_dark</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="SpinnerItem">
|
||||||
|
<item name="android:textAppearance">@color/primary_dark</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="Spinner">
|
||||||
|
<item name="android:checkMark">@color/primary</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<color name="primary">#9c27b0</color>
|
||||||
|
<color name="primary_dark">#6a1b9a</color>
|
||||||
|
<color name="accent">#ffab00</color>
|
||||||
|
<color name="text_primary">#FFFFFF</color>
|
||||||
|
<color name="text_dark">#000000</color>
|
||||||
|
<color name="background">#EEEEEE</color>
|
||||||
|
</resources>
|