diff --git a/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSAdapter.class b/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSAdapter.class index 7f1ccec..f267e77 100644 Binary files a/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSAdapter.class and b/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSAdapter.class differ diff --git a/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate$DownloadFilesTask.class b/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate$DownloadFilesTask.class index c55a678..5f89c75 100644 Binary files a/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate$DownloadFilesTask.class and b/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate$DownloadFilesTask.class differ diff --git a/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate.class b/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate.class index ba75662..c992ef4 100644 Binary files a/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate.class and b/source/bin/classes/me/caesar2011/vpherder/teachersubstitution/TSCreate.class differ diff --git a/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$HeaderViewHolder.class b/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$HeaderViewHolder.class index 9b1f94b..5cc5381 100644 Binary files a/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$HeaderViewHolder.class and b/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$HeaderViewHolder.class differ diff --git a/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$RefreshState.class b/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$RefreshState.class index 8ac71e6..cba516e 100644 Binary files a/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$RefreshState.class and b/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView$RefreshState.class differ diff --git a/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView.class b/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView.class index 15c7693..b5eb1bc 100644 Binary files a/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView.class and b/source/bin/classes/me/caesar2011/vpherder/views/PullToRefreshListView.class differ diff --git a/source/src/me/caesar2011/vpherder/teachersubstitution/TSAdapter.java b/source/src/me/caesar2011/vpherder/teachersubstitution/TSAdapter.java index 128f258..1310780 100644 --- a/source/src/me/caesar2011/vpherder/teachersubstitution/TSAdapter.java +++ b/source/src/me/caesar2011/vpherder/teachersubstitution/TSAdapter.java @@ -62,7 +62,7 @@ public class TSAdapter extends ArrayAdapter { public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; int type = getItemViewType(position); - if (convertView == null) { + if (convertView == null || convertView.getTag() == null) { switch (type) { case AnnounceType.REMARK: convertView = mInflater.inflate(R.layout.teacher_substitution_row_remark, null); diff --git a/source/src/me/caesar2011/vpherder/teachersubstitution/TSCreate.java b/source/src/me/caesar2011/vpherder/teachersubstitution/TSCreate.java index d1e9a8f..4995878 100644 --- a/source/src/me/caesar2011/vpherder/teachersubstitution/TSCreate.java +++ b/source/src/me/caesar2011/vpherder/teachersubstitution/TSCreate.java @@ -9,9 +9,11 @@ import java.io.StringWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; -import java.util.concurrent.ExecutionException; +import java.util.ArrayList; import me.caesar2011.vpherder.R; +import me.caesar2011.vpherder.views.PullToRefreshListView; +import me.caesar2011.vpherder.views.PullToRefreshListView.OnRefreshListener; import org.apache.commons.io.IOUtils; import org.json.JSONException; @@ -21,7 +23,6 @@ import android.os.AsyncTask; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ListView; /** * Class to organize the drawings of the teacher substition. @@ -35,6 +36,9 @@ public class TSCreate { private final LayoutInflater inflater; private final ViewGroup container; private static TSjsonObject JsonObject; + private boolean downloadStarted; + private TSAdapter adapter; + private PullToRefreshListView listview; /** * Constructor @@ -43,26 +47,10 @@ public class TSCreate { this.activity = activity; this.inflater = inflater; this.container = container; + this.downloadStarted = false; if(JsonObject == null){ - try { - URL url = new URL("https://vpherder.canis.uberspace.de/example.json"); - - DownloadFilesTask downloadSubstitutions = new DownloadFilesTask(); - downloadSubstitutions.execute(url); - downloadSubstitutions.get(); - String theString = downloadSubstitutions.getOutput()[0]; - - JsonObject = new TSjsonObject(theString); - } catch (ExecutionException e) { - System.out.println("ERRRRRRRRRRRRRRRRRRRRROR ExecutionException!"); - } catch (InterruptedException e) { - System.out.println("ERRRRRRRRRRRRRRRRRRRRROR InterruptedException!"); - } catch (JSONException e) { - System.out.println("ERRRRRRRRRRRRRRRRRRRRROR JSONException!"); - } catch (MalformedURLException e) { - System.out.println("ERRRRRRRRRRRRRRRRRRRRROR MalformedURLException!"); - } + StartDownload(); } } @@ -70,49 +58,71 @@ public class TSCreate { View rootView = inflater.inflate(R.layout.fragment_teacher_substitution, container, false); - final ListView listview = (ListView) rootView.findViewById(R.id.listview); - - final TSAdapter adapter = new TSAdapter(activity, - R.layout.teacher_substitution_row_remark, JsonObject.announcements); + listview = (PullToRefreshListView) rootView.findViewById(R.id.listview); + listview.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh() { + StartDownload(); + } + + }); + System.out.println(JsonObject); + adapter = new TSAdapter(activity, + R.layout.teacher_substitution_row_remark, (JsonObject!=null)?JsonObject.announcements:(new ArrayList())); listview.setAdapter(adapter); - return rootView; } - - - private class DownloadFilesTask extends AsyncTask { - private String[] outputFiles; - - protected String[] doInBackground(URL... urls) { - int count = urls.length; - String[] files = new String[count]; - for (int i = 0; i < count; i++) { - URLConnection connection; - try { - connection = urls[i].openConnection(); - InputStream inputStream = connection.getInputStream(); - publishProgress((int) ((i / (float) count) * 100)); + public void StartDownload() { + if (!downloadStarted) { + downloadStarted = true; + try { + URL url = new URL("https://vpherder.canis.uberspace.de/example.json"); + DownloadFilesTask downloadSubstitutions = new DownloadFilesTask(); + downloadSubstitutions.execute(url); + } catch (MalformedURLException e) { + downloadStarted = false; + } + } + } - StringWriter writer = new StringWriter(); - IOUtils.copy(inputStream, writer, "UTF-8"); - files[i] = writer.toString(); - } catch (IOException e) { - } - - // Escape early if cancel() is called - if (isCancelled()) break; - } - outputFiles = files; - return files; + public void FinishDownload() { + downloadStarted = false; + adapter.clear(); + adapter.addAll(JsonObject.announcements); + adapter.notifyDataSetChanged(); + listview.onRefreshComplete(); + } + + private class DownloadFilesTask extends AsyncTask { + + protected String doInBackground(URL... urls) { + String file = ""; + URL url = urls[0]; + URLConnection connection; + try { + connection = url.openConnection(); + InputStream inputStream = connection.getInputStream(); + + StringWriter writer = new StringWriter(); + IOUtils.copy(inputStream, writer, "UTF-8"); + file = writer.toString(); + } catch (IOException e) { + } + return file; } protected void onProgressUpdate(Integer... progress) { //setProgressPercent(progress[0]); } - protected String[] getOutput() { - return outputFiles; + protected void onPostExecute(String result) { + try { + JsonObject = new TSjsonObject(result); + } catch (JSONException e) { + } + FinishDownload(); } } } diff --git a/source/src/me/caesar2011/vpherder/views/PullToRefreshListView.java b/source/src/me/caesar2011/vpherder/views/PullToRefreshListView.java index 28a5298..731142f 100644 --- a/source/src/me/caesar2011/vpherder/views/PullToRefreshListView.java +++ b/source/src/me/caesar2011/vpherder/views/PullToRefreshListView.java @@ -21,6 +21,7 @@ public class PullToRefreshListView extends ListView implements OnScrollListener private View mHeaderView; private HeaderViewHolder mHeaderViewHolder; private int mLastTopVisiblePos; + private OnRefreshListener mOnRefreshListener; private static final int PULL_DOWN_LIMIT = (int) Math.round(0.75 * DisplayMetrics.DENSITY_DEFAULT); @@ -48,6 +49,7 @@ public class PullToRefreshListView extends ListView implements OnScrollListener mHeaderView = mInflater.inflate(R.layout.pull_to_refresh_header, null); mHeaderViewHolder = new HeaderViewHolder(mHeaderView); addHeaderView(mHeaderView); + System.out.println("k"+mHeaderView); mRefreshState = RefreshState.PULL_TO_REFRESH; } @@ -68,7 +70,7 @@ public class PullToRefreshListView extends ListView implements OnScrollListener boolean isHandled = false; if (event.getAction() == MotionEvent.ACTION_DOWN || mLastTopVisiblePos == 1) { - int refreshBoxHeight = (int) ((mRefreshState == RefreshState.REFRESHING)?PULL_DOWN_LIMIT+15:1); + int refreshBoxHeight = (int) ((mRefreshState == RefreshState.REFRESHING)?PULL_DOWN_LIMIT:1); mStartX = event.getRawX(); mStartY = event.getRawY()-refreshBoxHeight; mHeaderViewHolder.setVisibility(View.VISIBLE); @@ -76,9 +78,6 @@ public class PullToRefreshListView extends ListView implements OnScrollListener } if (event.getRawY()-mStartY > Math.abs(event.getRawX()-mStartX) && getFirstVisiblePosition() == 0) { int stretch = (int) Math.max(0, event.getRawY()-mStartY); - System.out.println(event.getRawY()-mStartY); - System.out.println(Math.abs(event.getRawX()-mStartX)); - System.out.println("--"); mHeaderView.setLayoutParams(new LayoutParams(mHeaderView.getLayoutParams().width, stretch)); if (mRefreshState == RefreshState.PULL_TO_REFRESH && stretch > PULL_DOWN_LIMIT) { mRefreshState = RefreshState.RELEASE_TO_REFRESH; @@ -89,7 +88,7 @@ public class PullToRefreshListView extends ListView implements OnScrollListener } else if (mRefreshState == RefreshState.ABORTING && stretch > PULL_DOWN_LIMIT) { mRefreshState = RefreshState.RELEASE_TO_REFRESH; mHeaderViewHolder.setRefreshingState(mRefreshState); - } else if (mRefreshState == RefreshState.REFRESHING && stretch <= PULL_DOWN_LIMIT) { + } else if (mRefreshState == RefreshState.REFRESHING && stretch <= PULL_DOWN_LIMIT/2) { mRefreshState = RefreshState.ABORTING; mHeaderViewHolder.setRefreshingState(mRefreshState); } @@ -104,10 +103,7 @@ public class PullToRefreshListView extends ListView implements OnScrollListener mHeaderView.setLayoutParams(new LayoutParams(mHeaderView.getLayoutParams().width, 0)); break; case RefreshState.RELEASE_TO_REFRESH: - mHeaderViewHolder.setVisibility(View.VISIBLE); - mRefreshState = RefreshState.REFRESHING; - mHeaderViewHolder.setRefreshingState(mRefreshState); - mHeaderView.setLayoutParams(new LayoutParams(mHeaderView.getLayoutParams().width, PULL_DOWN_LIMIT)); + Refresh(); break; case RefreshState.REFRESHING: mHeaderView.setLayoutParams(new LayoutParams(mHeaderView.getLayoutParams().width, PULL_DOWN_LIMIT)); @@ -162,4 +158,30 @@ public class PullToRefreshListView extends ListView implements OnScrollListener public static final int REFRESHING = 3; public static final int ABORTING = 4; } + + public void Refresh() { + mHeaderViewHolder.setVisibility(View.VISIBLE); + mRefreshState = RefreshState.REFRESHING; + mHeaderViewHolder.setRefreshingState(mRefreshState); + mHeaderView.setLayoutParams(new LayoutParams(mHeaderView.getLayoutParams().width, PULL_DOWN_LIMIT)); + System.out.print("onRefresh"); + if (mOnRefreshListener != null) { + mOnRefreshListener.onRefresh(); + } + } + + public void setOnRefreshListener(OnRefreshListener onRefreshListener) { + mOnRefreshListener = onRefreshListener; + } + + public void onRefreshComplete() { + mHeaderViewHolder.setVisibility(View.GONE); + mRefreshState = RefreshState.PULL_TO_REFRESH; + mHeaderViewHolder.setRefreshingState(mRefreshState); + mHeaderView.setLayoutParams(new LayoutParams(mHeaderView.getLayoutParams().width, 0)); + } + + public interface OnRefreshListener { + public void onRefresh(); + } }