/FBReader/src/main/java/org/geometerplus/android/fbreader/network/Util.java

https://github.com/benetech/FBReaderJ · Java · 130 lines · 92 code · 20 blank · 18 comment · 10 complexity · 5eebe9355e4662e85554a9a650fe7e26 MD5 · raw file

  1. /*
  2. * Copyright (C) 2010-2012 Geometer Plus <contact@geometerplus.com>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  17. * 02110-1301, USA.
  18. */
  19. package org.geometerplus.android.fbreader.network;
  20. import java.util.Map;
  21. import android.app.Activity;
  22. import android.content.ActivityNotFoundException;
  23. import android.content.Intent;
  24. import android.net.Uri;
  25. import org.geometerplus.zlibrary.core.network.ZLNetworkException;
  26. import org.geometerplus.fbreader.network.*;
  27. import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
  28. import org.geometerplus.fbreader.network.urlInfo.UrlInfo;
  29. import org.geometerplus.fbreader.network.urlInfo.BookUrlInfo;
  30. import org.geometerplus.android.util.UIUtil;
  31. import org.geometerplus.android.util.PackageUtil;
  32. public abstract class Util implements UserRegistrationConstants {
  33. static final String AUTHORIZATION_ACTION = "android.fbreader.action.network.AUTHORIZATION";
  34. static final String SIGNIN_ACTION = "android.fbreader.action.network.SIGNIN";
  35. public static final String ADD_CATALOG_ACTION = "android.fbreader.action.ADD_OPDS_CATALOG";
  36. public static final String EDIT_CATALOG_ACTION = "android.fbreader.action.EDIT_OPDS_CATALOG";
  37. public static Intent intentByLink(Intent intent, INetworkLink link) {
  38. if (link != null) {
  39. intent.setData(Uri.parse(link.getUrl(UrlInfo.Type.Catalog)));
  40. }
  41. return intent;
  42. }
  43. static void initLibrary(final Activity activity) {
  44. final NetworkLibrary library = NetworkLibrary.Instance();
  45. if (library.isInitialized()) {
  46. return;
  47. }
  48. UIUtil.wait("loadingNetworkLibrary", new Runnable() {
  49. public void run() {
  50. if (SQLiteNetworkDatabase.Instance() == null) {
  51. new SQLiteNetworkDatabase(activity.getApplication());
  52. }
  53. library.initialize();
  54. }
  55. }, activity);
  56. }
  57. static Intent authorizationIntent(INetworkLink link, Uri id) {
  58. final Intent intent = new Intent(AUTHORIZATION_ACTION, id);
  59. intent.putExtra(CATALOG_URL, link.getUrl(UrlInfo.Type.Catalog));
  60. intent.putExtra(SIGNIN_URL, link.getUrl(UrlInfo.Type.SignIn));
  61. intent.putExtra(SIGNUP_URL, link.getUrl(UrlInfo.Type.SignUp));
  62. intent.putExtra(RECOVER_PASSWORD_URL, link.getUrl(UrlInfo.Type.RecoverPassword));
  63. return intent;
  64. }
  65. private static Intent registrationIntent(INetworkLink link) {
  66. return authorizationIntent(link, Uri.parse(link.getUrl(UrlInfo.Type.Catalog) + "/register"));
  67. }
  68. public static boolean isRegistrationSupported(Activity activity, INetworkLink link) {
  69. return PackageUtil.canBeStarted(activity, registrationIntent(link), true);
  70. }
  71. public static void runRegistrationDialog(Activity activity, INetworkLink link) {
  72. try {
  73. final Intent intent = registrationIntent(link);
  74. if (PackageUtil.canBeStarted(activity, intent, true)) {
  75. activity.startActivity(intent);
  76. }
  77. } catch (ActivityNotFoundException e) {
  78. }
  79. }
  80. public static void runAuthenticationDialog(Activity activity, INetworkLink link, Runnable onSuccess) {
  81. final NetworkAuthenticationManager mgr = link.authenticationManager();
  82. final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link);
  83. AuthenticationActivity.registerRunnable(intent, onSuccess);
  84. intent.putExtra(AuthenticationActivity.USERNAME_KEY, mgr.getUserName());
  85. intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https");
  86. intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true);
  87. activity.startActivity(intent);
  88. }
  89. public static void openInBrowser(Activity activity, String url) {
  90. if (url != null) {
  91. url = NetworkLibrary.Instance().rewriteUrl(url, true);
  92. activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
  93. }
  94. }
  95. public static void doDownloadBook(Activity activity, final NetworkBookItem book, boolean demo) {
  96. final UrlInfo.Type resolvedType =
  97. demo ? UrlInfo.Type.BookDemo : UrlInfo.Type.Book;
  98. final BookUrlInfo ref = book.reference(resolvedType);
  99. if (ref != null) {
  100. activity.startService(
  101. new Intent(Intent.ACTION_VIEW, Uri.parse(ref.Url),
  102. activity.getApplicationContext(), BookDownloaderService.class)
  103. .putExtra(BookDownloaderService.BOOK_FORMAT_KEY, ref.BookFormat)
  104. .putExtra(BookDownloaderService.REFERENCE_TYPE_KEY, resolvedType)
  105. .putExtra(BookDownloaderService.CLEAN_URL_KEY, ref.cleanUrl())
  106. .putExtra(BookDownloaderService.TITLE_KEY, book.Title)
  107. );
  108. }
  109. }
  110. }