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

https://github.com/tamsuiboy/FBReaderJ · Java · 185 lines · 144 code · 20 blank · 21 comment · 23 complexity · d9aa30fd3b876f6c25ba8d089fadcad5 MD5 · raw file

  1. /*
  2. * Copyright (C) 2010-2011 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 android.app.Activity;
  21. import android.content.ActivityNotFoundException;
  22. import android.content.Intent;
  23. import android.net.Uri;
  24. import org.geometerplus.zlibrary.core.network.ZLNetworkException;
  25. import org.geometerplus.fbreader.network.*;
  26. import org.geometerplus.fbreader.network.authentication.NetworkAuthenticationManager;
  27. import org.geometerplus.fbreader.network.authentication.litres.LitResAuthenticationManager;
  28. import org.geometerplus.fbreader.network.urlInfo.UrlInfo;
  29. import org.geometerplus.android.util.UIUtil;
  30. import org.geometerplus.android.util.PackageUtil;
  31. public abstract class Util implements UserRegistrationConstants {
  32. private static final String REGISTRATION_ACTION =
  33. "android.fbreader.action.NETWORK_LIBRARY_REGISTER";
  34. private static final String AUTO_SIGNIN_ACTION =
  35. "android.fbreader.action.NETWORK_LIBRARY_AUTOSIGNIN";
  36. public static Intent intentByLink(Intent intent, INetworkLink link) {
  37. if (link != null) {
  38. intent.setData(Uri.parse(link.getUrl(UrlInfo.Type.Catalog)));
  39. }
  40. return intent;
  41. }
  42. static void initLibrary(Activity activity) {
  43. final NetworkLibrary library = NetworkLibrary.Instance();
  44. if (library.isInitialized()) {
  45. return;
  46. }
  47. UIUtil.wait("loadingNetworkLibrary", new Runnable() {
  48. public void run() {
  49. if (SQLiteNetworkDatabase.Instance() == null) {
  50. new SQLiteNetworkDatabase();
  51. }
  52. library.initialize();
  53. }
  54. }, activity);
  55. }
  56. private static boolean testService(Activity activity, String action, String url) {
  57. return url != null && PackageUtil.canBeStarted(activity, new Intent(action, Uri.parse(url)), true);
  58. }
  59. public static boolean isRegistrationSupported(Activity activity, INetworkLink link) {
  60. return testService(
  61. activity,
  62. REGISTRATION_ACTION,
  63. link.getUrl(UrlInfo.Type.SignUp)
  64. );
  65. }
  66. public static boolean isAutoSignInSupported(Activity activity, INetworkLink link) {
  67. return testService(
  68. activity,
  69. AUTO_SIGNIN_ACTION,
  70. link.getUrl(UrlInfo.Type.SignUp)
  71. );
  72. }
  73. public static void runRegistrationDialog(Activity activity, INetworkLink link) {
  74. try {
  75. final Intent intent = new Intent(
  76. REGISTRATION_ACTION,
  77. Uri.parse(link.getUrl(UrlInfo.Type.SignUp))
  78. );
  79. if (PackageUtil.canBeStarted(activity, intent, true)) {
  80. activity.startActivityForResult(intent, NetworkLibraryActivity.SIGNUP_CODE);
  81. }
  82. } catch (ActivityNotFoundException e) {
  83. }
  84. }
  85. public static void runAutoSignInDialog(Activity activity, INetworkLink link) {
  86. try {
  87. final Intent intent = new Intent(
  88. AUTO_SIGNIN_ACTION,
  89. Uri.parse(link.getUrl(UrlInfo.Type.SignIn))
  90. );
  91. if (PackageUtil.canBeStarted(activity, intent, true)) {
  92. activity.startActivityForResult(intent, NetworkLibraryActivity.AUTO_SIGNIN_CODE);
  93. }
  94. } catch (ActivityNotFoundException e) {
  95. }
  96. }
  97. public static void runAuthenticationDialog(Activity activity, INetworkLink link, Runnable onSuccess) {
  98. final NetworkAuthenticationManager mgr = link.authenticationManager();
  99. final Intent intent = intentByLink(new Intent(activity, AuthenticationActivity.class), link);
  100. AuthenticationActivity.registerRunnable(intent, onSuccess);
  101. intent.putExtra(AuthenticationActivity.USERNAME_KEY, mgr.UserNameOption.getValue());
  102. intent.putExtra(AuthenticationActivity.SCHEME_KEY, "https");
  103. intent.putExtra(AuthenticationActivity.CUSTOM_AUTH_KEY, true);
  104. activity.startActivity(intent);
  105. }
  106. static void processSignup(INetworkLink link, int resultCode, Intent data) {
  107. if (resultCode == Activity.RESULT_OK && data != null) {
  108. try {
  109. final NetworkAuthenticationManager mgr = link.authenticationManager();
  110. if (mgr instanceof LitResAuthenticationManager) {
  111. ((LitResAuthenticationManager)mgr).initUser(
  112. data.getStringExtra(USER_REGISTRATION_USERNAME),
  113. data.getStringExtra(USER_REGISTRATION_LITRES_SID),
  114. "",
  115. false
  116. );
  117. }
  118. if (!mgr.isAuthorised(true)) {
  119. throw new ZLNetworkException(NetworkException.ERROR_AUTHENTICATION_FAILED);
  120. }
  121. try {
  122. mgr.initialize();
  123. } catch (ZLNetworkException e) {
  124. mgr.logOut();
  125. throw e;
  126. }
  127. } catch (ZLNetworkException e) {
  128. // TODO: show an error message
  129. }
  130. }
  131. }
  132. public static void processAutoSignIn(Activity activity, INetworkLink link, int resultCode, Intent data) {
  133. if (resultCode == Activity.RESULT_OK && data != null) {
  134. try {
  135. final NetworkAuthenticationManager mgr = link.authenticationManager();
  136. if (mgr instanceof LitResAuthenticationManager) {
  137. ((LitResAuthenticationManager)mgr).initUser(
  138. data.getStringExtra(USER_REGISTRATION_USERNAME),
  139. data.getStringExtra(USER_REGISTRATION_LITRES_SID),
  140. "",
  141. false
  142. );
  143. }
  144. if (!mgr.isAuthorised(true)) {
  145. throw new ZLNetworkException(NetworkException.ERROR_AUTHENTICATION_FAILED);
  146. }
  147. try {
  148. mgr.initialize();
  149. } catch (ZLNetworkException e) {
  150. mgr.logOut();
  151. throw e;
  152. }
  153. // TODO: implement postRunnable (e.g. buying book on "quick buy")
  154. } catch (ZLNetworkException e) {
  155. // TODO: show an error message
  156. }
  157. }
  158. }
  159. public static void openInBrowser(Activity activity, String url) {
  160. if (url != null) {
  161. url = NetworkLibrary.Instance().rewriteUrl(url, true);
  162. activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
  163. }
  164. }
  165. }