Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 24 additions & 13 deletions src/com/androidquery/callback/AbstractAjaxCallback.java
Original file line number Diff line number Diff line change
Expand Up @@ -83,21 +83,21 @@

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.util.Xml;
import android.view.View;
import android.widget.ProgressBar;

import com.androidquery.AQuery;
import com.androidquery.auth.AccountHandle;
import com.androidquery.auth.GoogleHandle;
import com.androidquery.util.AQUtility;
import com.androidquery.util.Common;
import com.androidquery.util.Constants;
import com.androidquery.util.PredefinedBAOS;
import com.androidquery.util.Progress;
import com.androidquery.util.XmlDom;

/**
Expand All @@ -117,6 +117,7 @@ public abstract class AbstractAjaxCallback<T, K> implements Runnable{
private Object handler;
private String callback;
private WeakReference<Object> progress;
private ProgressStrategy pStrategy;

private String url;
private Map<String, Object> params;
Expand Down Expand Up @@ -451,7 +452,7 @@ public K params(Map<String, ?> params){
* @return self
*/
public K progress(View view){
return progress((Object) view);
return progress((Object) view, null);
}

/**
Expand All @@ -461,12 +462,28 @@ public K progress(View view){
* @return self
*/
public K progress(Dialog dialog){
return progress((Object) dialog);
return progress((Object) dialog, null);
}

public K progress(Object progress){
return progress(progress, null);
}

public K progress(Object progress, ProgressStrategy customStrategy){
if(progress != null){
this.progress = new WeakReference<Object>(progress);
this.pStrategy = customStrategy;
}
if(progress != null && pStrategy == null) {
if(progress instanceof ProgressBar){
pStrategy = new ProgressBarStrategy();
}else if(progress instanceof ProgressDialog){
pStrategy = new ProgressDialogStrategy();
}else if(progress instanceof Activity){
pStrategy = new ActivityStrategy();
}else if(progress instanceof View){
pStrategy = new ViewStrategy();
}
}
return self();
}
Expand Down Expand Up @@ -590,13 +607,13 @@ protected void showProgress(final boolean show){
if(p != null){

if(AQUtility.isUIThread()){
Common.showProgress(p, url, show);
pStrategy.showProgress(p, url, show);
}else{
AQUtility.post(new Runnable() {

@Override
public void run() {
Common.showProgress(p, url, show);
pStrategy.showProgress(p, url, show);
}
});
}
Expand Down Expand Up @@ -1567,13 +1584,7 @@ private void copy(InputStream is, OutputStream os, String encoding, int max) thr
o = progress.get();
}

Progress p = null;

if(o != null){
p = new Progress(o);
}

AQUtility.copy(is, os, max, p);
AQUtility.copy(is, os, max, o, pStrategy);


}
Expand Down
156 changes: 156 additions & 0 deletions src/com/androidquery/callback/ProgressStrategy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
package com.androidquery.callback;

import com.androidquery.util.Common;

import android.app.Activity;
import android.app.ProgressDialog;
import android.widget.ProgressBar;

public interface ProgressStrategy {

public void reset(Object progress);
public void setBytes(Object progress, int bytes);
public void increment(Object progress, int delta);
public void done(Object progress);
public void showProgress(Object progress, String url, boolean show);
}

/* package */ abstract class StrategyBase implements ProgressStrategy {

protected boolean unknown;
protected int bytes;
protected int current;
protected String url;

@Override
public void reset(Object progress) {
unknown = false;
current = 0;
bytes = 10000;
}

@Override
public void setBytes(Object progress, int bytes) {
if(bytes <= 0){
unknown = true;
bytes = 10000;
}

this.bytes = bytes;
}

@Override
public void increment(Object progress, int delta) {
}

@Override
public void done(Object progress) {
}

@Override
public void showProgress(Object progress, String url, boolean show) {
Common.showProgress(progress, url, show);
}

}

/* package */ class ProgressBarStrategy extends StrategyBase {

@Override
public void reset(Object progress) {
ProgressBar pb = (ProgressBar) progress;
pb.setProgress(0);
pb.setMax(10000);
super.reset(progress);
}

@Override
public void setBytes(Object progress, int bytes) {
super.setBytes(progress, bytes);
ProgressBar pb = (ProgressBar) progress;
pb.setProgress(0);
pb.setMax(bytes);
}

@Override
public void increment(Object progress, int delta) {
ProgressBar pb = (ProgressBar) progress;
pb.incrementProgressBy(unknown ? 1 : delta);
}

@Override
public void done(Object progress) {
ProgressBar pb = (ProgressBar) progress;
pb.setProgress(pb.getMax());
}

}

/* package */ class ProgressDialogStrategy extends StrategyBase {

@Override
public void reset(Object progress) {
ProgressDialog pd = (ProgressDialog) progress;
pd.setProgress(0);
pd.setMax(10000);
super.reset(progress);
}

@Override
public void setBytes(Object progress, int bytes) {
super.setBytes(progress, bytes);
ProgressDialog pd = (ProgressDialog) progress;
pd.setProgress(0);
pd.setMax(bytes);
}

@Override
public void increment(Object progress, int delta) {
ProgressDialog pd = (ProgressDialog) progress;
pd.incrementProgressBy(unknown ? 1 : delta);
}

@Override
public void done(Object progress) {
ProgressDialog pd = (ProgressDialog) progress;
pd.setProgress(pd.getMax());
}

}

/* package */ class ActivityStrategy extends StrategyBase {

@Override
public void reset(Object progress) {
Activity act = (Activity) progress;
act.setProgress(0);
super.reset(progress);
}

@Override
public void increment(Object progress, int delta) {
Activity act = (Activity) progress;
int p;
if(unknown){
p = current++;
}else{
current+= delta;
p = (10000 * current) / bytes;
}
if(p > 9999){
p = 9999;
}
act.setProgress(p);
}

@Override
public void done(Object progress) {
Activity act = (Activity) progress;
act.setProgress(9999);
}

}

/* package */ class ViewStrategy extends StrategyBase {

}
13 changes: 7 additions & 6 deletions src/com/androidquery/util/AQUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import android.view.animation.AlphaAnimation;

import com.androidquery.AQuery;
import com.androidquery.callback.ProgressStrategy;

/**
* Utility methods. Warning: Methods might changed in future versions.
Expand Down Expand Up @@ -322,29 +323,29 @@ private static byte[] getMD5(byte[] data){
private static final int IO_BUFFER_SIZE = 1024;
public static void copy(InputStream in, OutputStream out) throws IOException {
//copy(in, out, 0, null, null);
copy(in, out, 0, null);
copy(in, out, 0, null, null);
}

public static void copy(InputStream in, OutputStream out, int max, Progress progress) throws IOException {
public static void copy(InputStream in, OutputStream out, int max, Object progress, ProgressStrategy pStrategy) throws IOException {

AQUtility.debug("content header", max);

if(progress != null){
progress.reset();
progress.setBytes(max);
pStrategy.reset(progress);
pStrategy.setBytes(progress, max);
}

byte[] b = new byte[IO_BUFFER_SIZE];
int read;
while((read = in.read(b)) != -1){
out.write(b, 0, read);
if(progress != null){
progress.increment(read);
pStrategy.increment(progress, read);
}
}

if(progress != null){
progress.done();
pStrategy.done(progress);
}

}
Expand Down
Loading