Добавлен просмотр сообщений форума

This commit is contained in:
Victor 2013-08-29 19:44:23 +03:00
parent a9f0aecd60
commit f91ddb6a83
7 changed files with 279 additions and 27 deletions

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/forum_author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/forum_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/forum_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

View File

@ -0,0 +1,66 @@
package com.annimon.client.adapters;
import java.util.List;
import com.annimon.client.R;
import com.annimon.client.entities.ForumPost;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ForumPostAdapter extends BaseAdapter {
private final LayoutInflater inflater;
private List<ForumPost> items;
public ForumPostAdapter(Context context, List<ForumPost> items) {
inflater = LayoutInflater.from(context);
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
int layoutId = R.layout.forum_post_item;
convertView = inflater.inflate(layoutId, parent, false);
holder = new ViewHolder();
holder.author = (TextView) convertView.findViewById(R.id.forum_author);
holder.date = (TextView) convertView.findViewById(R.id.forum_date);
holder.message = (TextView) convertView.findViewById(R.id.forum_message);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final ForumPost post = items.get(position);
holder.author.setText(post.getAuthor());
holder.date.setText(post.getDate());
holder.message.setText(post.getMessage());
return convertView;
}
private static class ViewHolder {
TextView author, date, message;
}
}

View File

@ -2,8 +2,8 @@ package com.annimon.client.entities;
public class Action {
public String name;
public String path;
private String name;
private String path;
public Action(String name, String path) {
this.name = name;

View File

@ -0,0 +1,43 @@
package com.annimon.client.entities;
public class ForumPost {
private String forumTitle;
private String author;
private String date;
private String message;
public String getForumTitle() {
return forumTitle;
}
public void setForumTitle(String forumTitle) {
this.forumTitle = forumTitle;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

View File

@ -1,34 +1,33 @@
package com.annimon.client.fragments;
import android.app.Fragment;
import java.util.List;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import com.annimon.client.adapters.ForumPostAdapter;
import com.annimon.client.entities.ForumPost;
import com.annimon.client.tasks.ForumPostLoader;
public class ForumFragment extends Fragment {
public class ForumFragment extends ListFragment {
private static final String URL = "http://annimon.com/rss/forumreader.php";
private ForumPostAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//final View v = inflater.inflate(R.layout.about, container, false);
update();
}
//TextView tv = new TextView(getActivity());
//tv.setText("This is forum fragment " + System.currentTimeMillis());
private void update() {
new ForumPostLoader(getActivity(), new ForumPostLoader.FinishLoadingListener() {
WebView wv = new WebView(getActivity());
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
public void onLoadingFinished(List<ForumPost> items) {
adapter = new ForumPostAdapter(getActivity(), items);
setListAdapter(adapter);
}
});
wv.loadUrl("http://annimon.com/forum/");
return wv;
}).execute(URL);
}
}

View File

@ -0,0 +1,79 @@
package com.annimon.client.tasks;
import java.util.ArrayList;
import java.util.List;
import com.annimon.client.entities.ForumPost;
import com.annimon.client.utils.InetUtils;
import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.widget.ProgressBar;
/**
*
* @author aNNiMON
*/
public class ForumPostLoader extends AsyncTask<String, Void, List<ForumPost>> {
private static final String SEPARATOR = "|$|";
private Context context;
private FinishLoadingListener listener;
private AlertDialog dialog;
public ForumPostLoader(Context context, FinishLoadingListener listener) {
this.context = context;
this.listener = listener;
}
@Override
protected List<ForumPost> doInBackground(String... params) {
final String text = InetUtils.getTextFromUri(params[0]);
if (TextUtils.isEmpty(text)) return null;
final List<ForumPost> postItems = new ArrayList<ForumPost>();
final String[] data = text.split(SEPARATOR);
final int size = data.length / 3;
for (int i = 0; i < size; i++) {
ForumPost post = new ForumPost();
String titleAuthor = data[i];
int breakCharIndex = titleAuthor.indexOf('\n');
post.setForumTitle(titleAuthor.substring(0, breakCharIndex));
post.setAuthor(titleAuthor.substring(breakCharIndex + 1));
post.setDate(data[i + 1]);
post.setMessage(data[i + 2]);
postItems.add(post);
}
return postItems;
}
@Override
protected void onPreExecute() {
ProgressBar progressBar = new ProgressBar(context);
progressBar.setIndeterminate(true);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCustomTitle(progressBar);
builder.setIcon(android.R.drawable.ic_menu_upload);
builder.setMessage("Please, wait...");
builder.setCancelable(false);
dialog = builder.create();
dialog.show();
}
@Override
protected void onPostExecute(List<ForumPost> items) {
super.onPostExecute(items);
listener.onLoadingFinished(items);
dialog.dismiss();
}
public interface FinishLoadingListener {
void onLoadingFinished(List<ForumPost> items);
}
}

View File

@ -0,0 +1,37 @@
package com.annimon.client.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
/**
*
* @author aNNiMON
*/
public class InetUtils {
public static synchronized String getTextFromUri(String urlsite) {
StringBuilder text = new StringBuilder();
BufferedReader reader = null;
try {
final URL url = new URL(urlsite);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
text.append(line);
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ex) { }
}
}
return text.toString();
}
}