mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 10:49:24 +02:00
refactoring: method wait has been moved from ZLAndroidDialogManager to AndroidUtil
This commit is contained in:
parent
e60f361c9a
commit
4bd5314226
9 changed files with 110 additions and 72 deletions
|
@ -26,7 +26,7 @@ import android.widget.Toast;
|
|||
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
abstract class SearchActivity extends Activity {
|
||||
@Override
|
||||
|
@ -66,7 +66,7 @@ abstract class SearchActivity extends Activity {
|
|||
}
|
||||
}
|
||||
};
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait(getWaitMessageResourceKey(), runnable, getParentActivity());
|
||||
AndroidUtil.wait(getWaitMessageResourceKey(), runnable, getParentActivity());
|
||||
}
|
||||
finish();
|
||||
}
|
||||
|
|
|
@ -26,7 +26,8 @@ import android.widget.TextView;
|
|||
import android.content.DialogInterface;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
|
@ -35,7 +36,6 @@ import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationMan
|
|||
|
||||
|
||||
class AuthenticationDialog extends NetworkDialog {
|
||||
|
||||
public AuthenticationDialog() {
|
||||
super("AuthenticationDialog");
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ class AuthenticationDialog extends NetworkDialog {
|
|||
sendSuccess(false);
|
||||
}
|
||||
};
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("authentication", runnable, myActivity);
|
||||
AndroidUtil.wait("authentication", runnable, myActivity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -124,7 +124,7 @@ class AuthenticationDialog extends NetworkDialog {
|
|||
}
|
||||
}
|
||||
};
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("signOut", runnable, myActivity);
|
||||
AndroidUtil.wait("signOut", runnable, myActivity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -32,7 +32,8 @@ import org.geometerplus.zlibrary.core.resources.ZLResource;
|
|||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
import org.geometerplus.fbreader.network.*;
|
||||
import org.geometerplus.fbreader.network.opds.OPDSLinkReader;
|
||||
|
@ -193,7 +194,7 @@ class CustomCatalogDialog extends NetworkDialog {
|
|||
handler.sendMessage(handler.obtainMessage(0, error));
|
||||
}
|
||||
};
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("loadingCatalogInfo", loadInfoRunnable, myActivity);
|
||||
AndroidUtil.wait("loadingCatalogInfo", loadInfoRunnable, myActivity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -38,7 +38,8 @@ import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
|||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
import org.geometerplus.fbreader.network.*;
|
||||
import org.geometerplus.fbreader.network.tree.NetworkBookTree;
|
||||
|
@ -401,7 +402,7 @@ class NetworkBookActions extends NetworkTreeActions {
|
|||
handler.sendMessage(handler.obtainMessage(0, error));
|
||||
}
|
||||
}; // end Runnable
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("purchaseBook", runnable, activity);
|
||||
AndroidUtil.wait("purchaseBook", runnable, activity);
|
||||
} // end onClick
|
||||
}; // end listener
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ import org.geometerplus.zlibrary.core.resources.ZLResource;
|
|||
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
||||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
import org.geometerplus.fbreader.network.*;
|
||||
import org.geometerplus.fbreader.network.tree.NetworkTreeFactory;
|
||||
|
@ -463,7 +463,7 @@ class NetworkCatalogActions extends NetworkTreeActions {
|
|||
}
|
||||
}
|
||||
};
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("signOut", runnable, activity);
|
||||
AndroidUtil.wait("signOut", runnable, activity);
|
||||
}
|
||||
|
||||
private void removeCustomLink(ICustomNetworkLink link) {
|
||||
|
|
|
@ -32,7 +32,8 @@ import org.geometerplus.zlibrary.core.resources.ZLResource;
|
|||
import org.geometerplus.zlibrary.core.network.ZLNetworkException;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
import org.geometerplus.fbreader.network.NetworkTree;
|
||||
import org.geometerplus.fbreader.network.NetworkLibrary;
|
||||
|
@ -108,7 +109,7 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
|
|||
|
||||
// run this method only if myActivity != null
|
||||
private void runInitialization() {
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("loadingNetworkLibrary", new Runnable() {
|
||||
AndroidUtil.wait("loadingNetworkLibrary", new Runnable() {
|
||||
public void run() {
|
||||
String error = null;
|
||||
try {
|
||||
|
@ -276,7 +277,7 @@ public class NetworkLibraryActivity extends NetworkBaseActivity {
|
|||
}
|
||||
};
|
||||
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("updatingCatalogsList", new Runnable() {
|
||||
AndroidUtil.wait("updatingCatalogsList", new Runnable() {
|
||||
public void run() {
|
||||
String error = null;
|
||||
try {
|
||||
|
|
|
@ -33,7 +33,7 @@ import android.content.DialogInterface;
|
|||
|
||||
import org.geometerplus.zlibrary.ui.android.R;
|
||||
|
||||
import org.geometerplus.zlibrary.ui.android.dialogs.ZLAndroidDialogManager;
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
import org.geometerplus.zlibrary.core.resources.ZLResource;
|
||||
import org.geometerplus.zlibrary.core.util.ZLBoolean3;
|
||||
|
@ -171,7 +171,7 @@ class RegisterUserDialog extends NetworkDialog {
|
|||
sendSuccess(false);
|
||||
}
|
||||
};
|
||||
((ZLAndroidDialogManager)ZLAndroidDialogManager.Instance()).wait("registerUser", runnable, myActivity);
|
||||
AndroidUtil.wait("registerUser", runnable, myActivity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
88
src/org/geometerplus/android/util/AndroidUtil.java
Normal file
88
src/org/geometerplus/android/util/AndroidUtil.java
Normal file
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright (C) 2007-2010 Geometer Plus <contact@geometerplus.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package org.geometerplus.android.util;
|
||||
|
||||
import java.util.Queue;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ProgressDialog;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
|
||||
import org.geometerplus.zlibrary.core.dialogs.ZLDialogManager;
|
||||
|
||||
public abstract class AndroidUtil {
|
||||
private static final Object ourMonitor = new Object();
|
||||
private static ProgressDialog ourProgress;
|
||||
private static class Pair {
|
||||
final Runnable Action;
|
||||
final String Message;
|
||||
|
||||
Pair(Runnable action, String message) {
|
||||
Action = action;
|
||||
Message = message;
|
||||
}
|
||||
};
|
||||
private static final Queue<Pair> ourTaskQueue = new LinkedList<Pair>();
|
||||
private static final Handler ourProgressHandler = new Handler() {
|
||||
public void handleMessage(Message message) {
|
||||
try {
|
||||
synchronized (ourMonitor) {
|
||||
if (ourTaskQueue.isEmpty()) {
|
||||
ourProgress.dismiss();
|
||||
ourProgress = null;
|
||||
} else {
|
||||
ourProgress.setMessage(ourTaskQueue.peek().Message);
|
||||
}
|
||||
ourMonitor.notify();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
};
|
||||
public static void wait(String key, Runnable action, Activity activity) {
|
||||
synchronized (ourMonitor) {
|
||||
final String message = ZLDialogManager.getWaitMessageText(key);
|
||||
ourTaskQueue.offer(new Pair(action, message));
|
||||
if (ourProgress == null) {
|
||||
ourProgress = ProgressDialog.show(activity, null, message, true, false);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
final ProgressDialog currentProgress = ourProgress;
|
||||
new Thread(new Runnable() {
|
||||
public void run() {
|
||||
while ((ourProgress == currentProgress) && !ourTaskQueue.isEmpty()) {
|
||||
Pair p = ourTaskQueue.poll();
|
||||
p.Action.run();
|
||||
synchronized (ourMonitor) {
|
||||
ourProgressHandler.sendEmptyMessage(0);
|
||||
try {
|
||||
ourMonitor.wait();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
|
@ -30,6 +30,7 @@ import org.geometerplus.zlibrary.core.application.ZLApplication;
|
|||
import org.geometerplus.zlibrary.ui.android.application.ZLAndroidApplicationWindow;
|
||||
import org.geometerplus.zlibrary.ui.android.library.ZLAndroidApplication;
|
||||
|
||||
import org.geometerplus.android.util.AndroidUtil;
|
||||
|
||||
public class ZLAndroidDialogManager extends ZLDialogManager {
|
||||
private Activity myActivity;
|
||||
|
@ -66,62 +67,8 @@ public class ZLAndroidDialogManager extends ZLDialogManager {
|
|||
return new ZLAndroidOptionsDialog(myActivity, getResource().getResource(key), exitAction, applyAction);
|
||||
}
|
||||
|
||||
private ProgressDialog myProgress;
|
||||
private static class Pair {
|
||||
final Runnable Action;
|
||||
final String Message;
|
||||
|
||||
Pair(Runnable action, String message) {
|
||||
Action = action;
|
||||
Message = message;
|
||||
}
|
||||
};
|
||||
private final Queue<Pair> myTaskQueue = new LinkedList<Pair>();
|
||||
final Handler myProgressHandler = new Handler() {
|
||||
public void handleMessage(Message message) {
|
||||
try {
|
||||
synchronized (ZLAndroidDialogManager.this) {
|
||||
if (myTaskQueue.isEmpty()) {
|
||||
myProgress.dismiss();
|
||||
myProgress = null;
|
||||
} else {
|
||||
myProgress.setMessage(myTaskQueue.peek().Message);
|
||||
}
|
||||
ZLAndroidDialogManager.this.notify();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
};
|
||||
public void wait(String key, Runnable action) {
|
||||
wait(key, action, myActivity);
|
||||
}
|
||||
public void wait(String key, Runnable action, Activity activity) {
|
||||
synchronized (this) {
|
||||
final String message = getWaitMessageText(key);
|
||||
myTaskQueue.offer(new Pair(action, message));
|
||||
if (myProgress == null) {
|
||||
myProgress = ProgressDialog.show(activity, null, message, true, false);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
final ProgressDialog currentProgress = myProgress;
|
||||
new Thread(new Runnable() {
|
||||
public void run() {
|
||||
while ((myProgress == currentProgress) && !myTaskQueue.isEmpty()) {
|
||||
Pair p = myTaskQueue.poll();
|
||||
p.Action.run();
|
||||
synchronized (ZLAndroidDialogManager.this) {
|
||||
myProgressHandler.sendEmptyMessage(0);
|
||||
try {
|
||||
ZLAndroidDialogManager.this.wait();
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
AndroidUtil.wait(key, action, myActivity);
|
||||
}
|
||||
|
||||
public void startSearch() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue