PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/src/padcms/magazine/factory/IssueViewFactory.java

https://gitlab.com/intelij/PadCMS-android
Java | 586 lines | 476 code | 89 blank | 21 comment | 85 complexity | c93efbbe1d40fde33797c5823b623322 MD5 | raw file
  1. package padcms.magazine.factory;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import padcms.application11.R;
  6. import padcms.bll.ApplicationFileHelper;
  7. import padcms.dao.application.bean.Application;
  8. import padcms.dao.application.bean.Revision;
  9. import padcms.dao.factory.DataStorageFactory;
  10. import padcms.dao.issue.bean.Menu;
  11. import padcms.dao.issue.bean.Page;
  12. import padcms.dao.issue.bean.PageHorisontal;
  13. import padcms.dao.issue.bean.PageImposition;
  14. import padcms.kiosk.RevisionStateManager;
  15. import padcms.magazine.PhotoGalleryActivity;
  16. import padcms.magazine.VideoActivity;
  17. import padcms.magazine.controls.HorisontalPageSmoothFliperAdapter;
  18. import padcms.magazine.controls.PageSmoothFliperAdapter;
  19. import padcms.magazine.controls.switcher.HorisontalPageSwitcherController;
  20. import padcms.magazine.controls.switcher.VerticalPageSwitcherController;
  21. import padcms.magazine.menu.MenuController;
  22. import padcms.magazine.page.ArticleWithFixedIllustrationPageTemplateView;
  23. import padcms.magazine.page.ArticleWithOverlayPageTemplateView;
  24. import padcms.magazine.page.BasePageView;
  25. import padcms.magazine.page.BasicArticlePageTemplateView;
  26. import padcms.magazine.page.CoverPageTemplateView;
  27. import padcms.magazine.page.DragAndDropPageTemplateView;
  28. import padcms.magazine.page.FixedIllustrationArticleTouchablePageTemplateView;
  29. import padcms.magazine.page.FlashBulletInteractivePageTemplateView;
  30. import padcms.magazine.page.GalleryFlashBulletInteractivePageTemplateView;
  31. import padcms.magazine.page.HTMLPageTemplateView;
  32. import padcms.magazine.page.HorisontalPageView;
  33. import padcms.magazine.page.Html5PageTemplateView;
  34. import padcms.magazine.page.InteractiveBulletsPageTemplateView;
  35. import padcms.magazine.page.ScrollingPageTemplateView;
  36. import padcms.magazine.page.SimplePageTemplateView;
  37. import padcms.magazine.page.SlidersBasedMiniArticlesHorizontalPageTemplateView;
  38. import padcms.magazine.page.SlidersBasedMiniArticlesTopPageTemplateView;
  39. import padcms.magazine.page.SlidersBasedMiniArticlesVerticalPageTemplateView;
  40. import padcms.magazine.page.SlideshowLandscapePageTemplateView;
  41. import padcms.magazine.page.SlideshowPageTemplateView;
  42. import padcms.magazine.page.State;
  43. import padcms.magazine.page.elementview.VideoElementView;
  44. import android.app.Activity;
  45. import android.content.Context;
  46. import android.content.Intent;
  47. import android.graphics.Color;
  48. import android.net.Uri;
  49. import android.util.Log;
  50. public class IssueViewFactory {
  51. public static String issueFolderName = "";
  52. private static IssueViewFactory inscance;
  53. private Context mContext;
  54. private Revision revisionBin;
  55. private ArrayList<Page> pageBinCollection;
  56. private ArrayList<Menu> menuBinCollection;
  57. private ArrayList<BasePageView> pageViewCollection;
  58. private ArrayList<HorisontalPageView> horisontalPageViewCollection;
  59. // private PageSmoothFliperAdapter pageAdapter;
  60. // private HorisontalPageSmoothFliperAdapter horisontalPageAdapter;
  61. private MenuController menuController;
  62. private boolean isLandscapeAllow;
  63. private int issueColor;
  64. private Application applicationBin;
  65. private VerticalPageSwitcherController verticalPageSwitcherController;
  66. private HorisontalPageSwitcherController horisontalPageSwitcherController;
  67. public static IssueViewFactory getIssueViewFactoryIstance(Context context) {
  68. if (inscance == null) {
  69. inscance = new IssueViewFactory(context);
  70. }
  71. return inscance;
  72. }
  73. public void setSensorConfiguration() {
  74. if (!isLandscapeAllow()) {
  75. ((Activity) mContext).setRequestedOrientation(-1);
  76. }
  77. }
  78. public enum PageTemplateEnum {
  79. BasicArticlePageTemplate(1), ArticleWithFixedIllustrationPageTemplate(2), SimplePageTemplate(
  80. 3), ScrollingPageTemplate(4), SlidersBasedMiniArticlesHorizontalPageTemplate(
  81. 5), SlideshowPageTemplate(6), CoverPageTemplate(7), SlidersBasedMiniArticlesVerticalPageTemplate(
  82. 8), ArticleWithOverlayPageTemplate(9), FixedIllustrationArticleTouchablePageTemplate(
  83. 10), InteractiveBulletsPageTemplate(11), SlideshowLandscapePageTemplate(
  84. 12), SlidersBasedMiniArticlesTopPageTemplate(13), HTMLPageTemplate(
  85. 14), DragAndDropPageTemplate(15), FlashBulletInteractivePageTemplate(
  86. 16), GalleryFlashBulletInteractivePageTemplate(17), Html5PageTemplate(
  87. 18), UnnownPageTemplate(-1);
  88. PageTemplateEnum(int templateID) {
  89. this.templateID = templateID;
  90. }
  91. int templateID;
  92. };
  93. public IssueViewFactory(Context mContext) {
  94. this.mContext = mContext;
  95. revisionBin = DataStorageFactory.getInstance(mContext)
  96. .getCurrentRevisionIssue();
  97. applicationBin = DataStorageFactory.getInstance(mContext)
  98. .getApplication();
  99. pageBinCollection = DataStorageFactory.getInstance(mContext)
  100. .getIssuePageCollection();
  101. menuBinCollection = DataStorageFactory.getInstance(mContext)
  102. .getIssueMenuCollection();
  103. RevisionStateManager.getInstance(mContext);
  104. // issueFolderName =
  105. // DataStorageFactory.getInstance(mContext).nameCurrentIssueFolder;
  106. if (revisionBin.getHorizontal_mode().toLowerCase().equals("none"))
  107. isLandscapeAllow = false;
  108. else
  109. isLandscapeAllow = true;
  110. issueColor = convertColor(revisionBin.getColor());
  111. }
  112. public void initData() {
  113. // initPageViewCollection();
  114. setPageViewRelations();
  115. verticalPageSwitcherController = new VerticalPageSwitcherController(
  116. mContext, getPageViewCollection().get(0));
  117. if (horisontalPageViewCollection.size() > 0)
  118. horisontalPageSwitcherController = new HorisontalPageSwitcherController(
  119. mContext, horisontalPageViewCollection);
  120. }
  121. public VerticalPageSwitcherController getVerticalPageSwitcherController() {
  122. return verticalPageSwitcherController;
  123. }
  124. public HorisontalPageSwitcherController getHorisontalPageSwitcherController() {
  125. return horisontalPageSwitcherController;
  126. }
  127. public File getPathToResourceFolder() {
  128. return ApplicationFileHelper
  129. .getFileRevisionResourcesFolder(getRevisionBin().getId()
  130. .intValue());
  131. }
  132. private int convertColor(String colorString) {
  133. int colorInt = Color.WHITE;
  134. if (colorString != null && colorString.length() > 0) {
  135. colorString = colorString.replace("#", "");
  136. if (colorString.length() < 6) {
  137. String start = "";// colorString.length();
  138. for (int i = 0; i < 6 - colorString.length(); i++) {
  139. start += "F";
  140. }
  141. colorString = "#FF" + start + colorString;
  142. } else if (colorString.length() == 6) {
  143. colorString = "#FF" + colorString;
  144. } else if (colorString.length() > 6) {
  145. colorString = "#FF"
  146. + colorString.substring(colorString.length() - 6);
  147. }
  148. colorInt = Color.parseColor(colorString);
  149. }
  150. return colorInt;
  151. }
  152. public void initPageViewCollection(Context mContext) {
  153. if (pageViewCollection == null) {
  154. pageViewCollection = new ArrayList<BasePageView>();
  155. horisontalPageViewCollection = new ArrayList<HorisontalPageView>();
  156. HorisontalPageView horisontalPageView = null;
  157. // int i = 2;
  158. for (Page page : pageBinCollection) {
  159. BasePageView pageView = createPageViewBaseOnTemplate(mContext,
  160. page);
  161. pageViewCollection.add(pageView);
  162. PageHorisontal horisontalpageBin = page.getPageHorisontal();
  163. if (horisontalpageBin != null
  164. && !isHorisontalPageExistInList(horisontalpageBin)) {
  165. horisontalPageView = new HorisontalPageView(mContext,
  166. horisontalpageBin);
  167. horisontalPageViewCollection.add(horisontalPageView);
  168. pageView.setHorisontalPageView(horisontalPageView);
  169. horisontalPageView.setRootPageView(pageView);
  170. horisontalPageView.setState(State.DOWNLOAD);
  171. } else if (horisontalPageView != null) {
  172. pageView.setHorisontalPageView(horisontalPageView);
  173. }
  174. pageView.setState(State.DOWNLOAD);
  175. }
  176. // i++;
  177. }
  178. }
  179. // public void setPageDownloadState() {
  180. //
  181. // for (Page page : pageViewCollection) {
  182. //
  183. // BasePageView pageView = createPageViewBaseOnTemplate(mContext, page);
  184. //
  185. // pageView.setState(State.DOWNLOAD);
  186. //
  187. // }
  188. // }
  189. private void setPageViewRelations() {
  190. for (BasePageView page : pageViewCollection) {
  191. page.setColor(issueColor);
  192. for (PageImposition pageImposition : page.getPageBin()
  193. .getPageImpositions()) {
  194. if (pageImposition.getPosition_type().equals("right")) {
  195. page.setRightPage(findPageViewByPageID(pageViewCollection,
  196. pageImposition.getIs_linked_to().intValue()));
  197. } else if (pageImposition.getPosition_type().equals("bottom")) {
  198. page.setBottompage(findPageViewByPageID(pageViewCollection,
  199. pageImposition.getIs_linked_to().intValue()));
  200. }
  201. }
  202. }
  203. BasePageView page = pageViewCollection.get(0);
  204. page.setActiveState();
  205. while (page != null) {
  206. BasePageView pageTop = page;
  207. int color = pageTop.getColor();
  208. Menu menu = findMenuBinByPageID(pageTop.getPageID());
  209. if (menu != null) {
  210. color = convertColor(menu.getColor());
  211. pageTop.setColor(color);
  212. }
  213. while (pageTop.getBottomPage() != null) {
  214. pageTop.getBottomPage().setColor(pageTop.getColor());
  215. pageTop = pageTop.getBottomPage();
  216. }
  217. page = page.getRightPage();
  218. }
  219. page = pageViewCollection.get(0);
  220. HorisontalPageView currentHorisontal = page.getHorisontalPageView();
  221. // if (currentHorisontal != null)
  222. // currentHorisontal.setState(State.DOWNLOAD);
  223. while (page.getRightPage() != null) {
  224. if (currentHorisontal == null)
  225. currentHorisontal = page.getHorisontalPageView();
  226. page = page.getRightPage();
  227. if (currentHorisontal != null) {
  228. HorisontalPageView nextRightHorisontal = page
  229. .getHorisontalPageView();
  230. if (nextRightHorisontal != null
  231. && nextRightHorisontal != currentHorisontal) {
  232. // currentHorisontal.setState(State.DOWNLOAD);
  233. currentHorisontal.setRightPage(nextRightHorisontal);
  234. currentHorisontal = nextRightHorisontal;
  235. }
  236. }
  237. }
  238. }
  239. private boolean isHorisontalPageExistInList(PageHorisontal horisontalpageBin) {
  240. for (HorisontalPageView currentHorisontalPageView : horisontalPageViewCollection) {
  241. if (currentHorisontalPageView.getHorisontalPageBin().getId()
  242. .equals(horisontalpageBin.getId())) {
  243. return true;
  244. }
  245. }
  246. return false;
  247. }
  248. private BasePageView createPageViewBaseOnTemplate(Context mContext,
  249. Page page) {
  250. BasePageView pageView;
  251. PageTemplateEnum pageTemplate = getPageTemplateName(page.getTemplate()
  252. .intValue());
  253. switch (pageTemplate) {
  254. case BasicArticlePageTemplate:
  255. pageView = new BasicArticlePageTemplateView(mContext, page);
  256. break;
  257. case ArticleWithFixedIllustrationPageTemplate:
  258. pageView = new ArticleWithFixedIllustrationPageTemplateView(
  259. mContext, page);
  260. break;
  261. case SimplePageTemplate:
  262. pageView = new SimplePageTemplateView(mContext, page);
  263. break;
  264. case ScrollingPageTemplate:
  265. pageView = new ScrollingPageTemplateView(mContext, page);
  266. break;
  267. case SlidersBasedMiniArticlesHorizontalPageTemplate:
  268. pageView = new SlidersBasedMiniArticlesHorizontalPageTemplateView(
  269. mContext, page);
  270. break;
  271. case SlideshowPageTemplate:
  272. pageView = new SlideshowPageTemplateView(mContext, page);
  273. break;
  274. case CoverPageTemplate:
  275. pageView = new CoverPageTemplateView(mContext, page);
  276. break;
  277. case SlidersBasedMiniArticlesVerticalPageTemplate:
  278. pageView = new SlidersBasedMiniArticlesVerticalPageTemplateView(
  279. mContext, page);
  280. break;
  281. case ArticleWithOverlayPageTemplate:
  282. pageView = new ArticleWithOverlayPageTemplateView(mContext, page);
  283. break;
  284. case FixedIllustrationArticleTouchablePageTemplate:
  285. pageView = new FixedIllustrationArticleTouchablePageTemplateView(
  286. mContext, page);
  287. break;
  288. case InteractiveBulletsPageTemplate:
  289. pageView = new InteractiveBulletsPageTemplateView(mContext, page);
  290. break;
  291. case SlideshowLandscapePageTemplate:
  292. pageView = new SlideshowLandscapePageTemplateView(mContext, page);
  293. break;
  294. case SlidersBasedMiniArticlesTopPageTemplate:
  295. pageView = new SlidersBasedMiniArticlesTopPageTemplateView(
  296. mContext, page);
  297. break;
  298. case HTMLPageTemplate:
  299. pageView = new HTMLPageTemplateView(mContext, page);
  300. break;
  301. case DragAndDropPageTemplate:
  302. pageView = new DragAndDropPageTemplateView(mContext, page);
  303. break;
  304. case FlashBulletInteractivePageTemplate:
  305. pageView = new FlashBulletInteractivePageTemplateView(mContext,
  306. page);
  307. break;
  308. case GalleryFlashBulletInteractivePageTemplate:
  309. pageView = new GalleryFlashBulletInteractivePageTemplateView(
  310. mContext, page);
  311. break;
  312. case Html5PageTemplate:
  313. pageView = new Html5PageTemplateView(mContext, page);
  314. break;
  315. default:
  316. pageView = new BasePageView(mContext, page);
  317. break;
  318. }
  319. return pageView;
  320. }
  321. private PageTemplateEnum getPageTemplateName(int templateID) {
  322. for (PageTemplateEnum tepalte : PageTemplateEnum.values()) {
  323. if (tepalte.templateID == templateID)
  324. return tepalte;
  325. }
  326. return PageTemplateEnum.UnnownPageTemplate;
  327. }
  328. public BasePageView findPageViewByPageID(
  329. ArrayList<BasePageView> pageViewCollection, int pageID) {
  330. BasePageView pageView = null;
  331. for (BasePageView pageViewCurrent : pageViewCollection) {
  332. if (pageViewCurrent.getPageID() == pageID) {
  333. pageView = pageViewCurrent;
  334. break;
  335. }
  336. }
  337. return pageView;
  338. }
  339. public Menu findMenuBinByPageID(int pageID) {
  340. Menu menuBin = null;
  341. for (Menu menu : menuBinCollection) {
  342. if (menu.getFirstpage_id().intValue() == pageID) {
  343. menuBin = menu;
  344. break;
  345. }
  346. }
  347. return menuBin;
  348. }
  349. public BasePageView findPageViewByPageID(int pageID) {
  350. BasePageView pageView = null;
  351. for (BasePageView pageViewCurrent : pageViewCollection) {
  352. if (pageViewCurrent.getPageID() == pageID) {
  353. pageView = pageViewCurrent;
  354. break;
  355. }
  356. }
  357. return pageView;
  358. }
  359. public BasePageView findPageViewByPageMachineName(String machineName) {
  360. BasePageView pageView = null;
  361. for (BasePageView pageViewCurrent : pageViewCollection) {
  362. if (pageViewCurrent.getPageMachineName() != null
  363. && pageViewCurrent.getPageMachineName().equals(machineName)) {
  364. pageView = pageViewCurrent;
  365. break;
  366. }
  367. }
  368. return pageView;
  369. }
  370. public boolean isLandscapeAllow() {
  371. return isLandscapeAllow;
  372. }
  373. public void setLandscapeAllow(boolean isLandscapeAllow) {
  374. this.isLandscapeAllow = isLandscapeAllow;
  375. }
  376. public ArrayList<Page> getPageBinCollection() {
  377. return pageBinCollection;
  378. }
  379. public void setPageBinCollection(ArrayList<Page> pageBinCollection) {
  380. this.pageBinCollection = pageBinCollection;
  381. }
  382. public ArrayList<BasePageView> getPageViewCollection() {
  383. return pageViewCollection;
  384. }
  385. public void setPageViewCollection(ArrayList<BasePageView> pageViewCollection) {
  386. this.pageViewCollection = pageViewCollection;
  387. }
  388. public ArrayList<Menu> getMenuBinCollection() {
  389. return menuBinCollection;
  390. }
  391. public void setMenuBinCollection(ArrayList<Menu> menuBinCollection) {
  392. this.menuBinCollection = menuBinCollection;
  393. }
  394. public MenuController getMenuController() {
  395. return menuController;
  396. }
  397. public void setMenuController(MenuController menuController) {
  398. this.menuController = menuController;
  399. }
  400. public ArrayList<HorisontalPageView> getHorisontalPageViewCollection() {
  401. return horisontalPageViewCollection;
  402. }
  403. public void setHorisontalPageViewCollection(
  404. ArrayList<HorisontalPageView> horisontalPageViewCollection) {
  405. this.horisontalPageViewCollection = horisontalPageViewCollection;
  406. }
  407. public int getIssueColor() {
  408. return issueColor;
  409. }
  410. public void setIssueColor(int issueColor) {
  411. this.issueColor = issueColor;
  412. }
  413. public Application getApplicationBin() {
  414. return applicationBin;
  415. }
  416. public void setApplicationBin(Application applicationBin) {
  417. this.applicationBin = applicationBin;
  418. }
  419. public void flipToPage(BasePageView basePageView) {
  420. if (basePageView != null) {
  421. verticalPageSwitcherController.swichToViewByBasePage(basePageView);
  422. menuController.hideMenu();
  423. }
  424. }
  425. public void flipToHorisontalPage(HorisontalPageView horisontalPageView) {
  426. if (horisontalPageView != null) {
  427. horisontalPageSwitcherController
  428. .swichToViewByBasePage(horisontalPageView);
  429. menuController.hideMenu();
  430. }
  431. }
  432. public void refuseDownloadBG() {
  433. ResourceFactory.refuseDownloadBG();
  434. }
  435. public void destroy() {
  436. // inscance = null;
  437. ResourceFactory.destroy();
  438. if (getMenuController() != null)
  439. getMenuController().destroy();
  440. if (pageViewCollection != null)
  441. for (BasePageView pageView : pageViewCollection) {
  442. pageView.setReleaseState();
  443. }
  444. pageViewCollection = null;
  445. if (horisontalPageViewCollection != null)
  446. for (HorisontalPageView horisontalPageView : horisontalPageViewCollection) {
  447. horisontalPageView.setReleaseState();
  448. }
  449. }
  450. public void playVideoCurrentPage(boolean isCloseOnFinish) {
  451. BasePageView pageView = verticalPageSwitcherController.getCurrentPage();
  452. if (pageView != null) {
  453. VideoElementView videoElement = pageView.getVideoElementView();
  454. if (videoElement != null)
  455. if (videoElement.getResourcePathStr().length() > 0) {
  456. runVideo(videoElement.getResourcePathStr(),
  457. isCloseOnFinish, false);
  458. } else if (videoElement.getPathToStreamStr().length() > 0) {
  459. runVideo(videoElement.getPathToStreamStr(),
  460. isCloseOnFinish, true);
  461. }
  462. }
  463. }
  464. public void runVideo(String videoUrl, boolean isCloseOnFinish,
  465. boolean isStreamMode) {
  466. Intent videoIntent = new Intent(mContext, VideoActivity.class);
  467. videoIntent.putExtra("closeOnFinish", isCloseOnFinish);
  468. videoIntent.putExtra("videoUrl", videoUrl);
  469. videoIntent.putExtra("streamMode", isStreamMode);
  470. videoIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
  471. mContext.startActivity(videoIntent);
  472. }
  473. public void runWebView(String url) {
  474. Intent viewIntent = new Intent("android.intent.action.VIEW",
  475. Uri.parse(url));
  476. ((Activity) mContext).startActivity(viewIntent);
  477. }
  478. public void showGallary(int pageID, int gallaryID, int position) {
  479. Intent intentGalary = new Intent(mContext, PhotoGalleryActivity.class);
  480. intentGalary.putExtra("pageID", pageID);
  481. intentGalary.putExtra("gallaryID", gallaryID);
  482. intentGalary.putExtra("currentPosition", position);
  483. mContext.startActivity(intentGalary);
  484. ((Activity) mContext).overridePendingTransition(R.anim.bottom_to_top,
  485. R.anim.hold_slide);
  486. }
  487. public void clickedOnScreen() {
  488. if (menuController != null)
  489. menuController.showHideMenu();
  490. }
  491. public Revision getRevisionBin() {
  492. return revisionBin;
  493. }
  494. public void setRevisionBin(Revision revisionBin) {
  495. this.revisionBin = revisionBin;
  496. }
  497. }