private void initSlideList() throws MmsException { cleanupSlideshowModel(); mSlideshowModel = SlideshowModel.createFromMessageUri(this, mUri); mSlideshowModel.registerModelChangedObserver(mModelChangedObserver); mSlideshowEditor = new SlideshowEditor(this, mSlideshowModel); if ((mSlideshowModel.size() == 0)) { boolean b = getSharedPreferences("SetDefaultLayout", 0).getBoolean("SetDefaultLayout", true); if (b) { mSlideshowEditor.changeLayout(LayoutModel.LAYOUT_BOTTOM_TEXT); } else { getSharedPreferences("SetDefaultLayout", 0) .edit() .putBoolean("SetDefaultLayout", true) .commit(); } } mSlideListAdapter = new SlideListAdapter(this, R.layout.slideshow_edit_item, mSlideshowModel); mList.setAdapter(mSlideListAdapter); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.edit_slide_activity); mSlideView = (BasicSlideEditorView) findViewById(R.id.slide_editor_view); mSlideView.setOnTextChangedListener(mOnTextChangedListener); mPreSlide = (ImageButton) findViewById(R.id.pre_slide_button); mPreSlide.setOnClickListener(mOnNavigateBackward); mNextSlide = (ImageButton) findViewById(R.id.next_slide_button); mNextSlide.setOnClickListener(mOnNavigateForward); mPreview = (Button) findViewById(R.id.preview_button); mPreview.setOnClickListener(mOnPreview); mReplaceImage = (Button) findViewById(R.id.replace_image_button); mReplaceImage.setOnClickListener(mOnReplaceImage); mRemoveSlide = (Button) findViewById(R.id.remove_slide_button); mRemoveSlide.setOnClickListener(mOnRemoveSlide); mTextEditor = (EditText) findViewById(R.id.text_message); mTextEditor.setFilters(new InputFilter[] {new LengthFilter(MmsConfig.getMaxTextLimit())}); mDone = (Button) findViewById(R.id.done_button); mDone.setOnClickListener(mDoneClickListener); initActivityState(savedInstanceState, getIntent()); try { mSlideshowModel = SlideshowModel.createFromMessageUri(this, mUri); // Confirm that we have at least 1 slide to display if (mSlideshowModel.size() == 0) { Log.e(TAG, "Loaded slideshow is empty; can't edit nothingness, exiting."); finish(); return; } // Register an observer to watch whether the data model is changed. mSlideshowModel.registerModelChangedObserver(mModelChangedObserver); mSlideshowEditor = new SlideshowEditor(this, mSlideshowModel); mPresenter = (SlideshowPresenter) PresenterFactory.getPresenter( "SlideshowPresenter", this, mSlideView, mSlideshowModel); // Sanitize mPosition if (mPosition >= mSlideshowModel.size()) { mPosition = Math.max(0, mSlideshowModel.size() - 1); } else if (mPosition < 0) { mPosition = 0; } showCurrentSlide(); } catch (MmsException e) { Log.e(TAG, "Create SlideshowModel failed!", e); finish(); return; } }
public static SlideshowModel createFromPduBody(Context context, PduBody pb) throws MmsException { SMILDocument document = SmilHelper.getDocument(pb); // Create root-layout model. SMILLayoutElement sle = document.getLayout(); SMILRootLayoutElement srle = sle.getRootLayout(); int w = srle.getWidth(); int h = srle.getHeight(); if ((w == 0) || (h == 0)) { w = LayoutManager.getInstance().getLayoutParameters().getWidth(); h = LayoutManager.getInstance().getLayoutParameters().getHeight(); srle.setWidth(w); srle.setHeight(h); } RegionModel rootLayout = new RegionModel(null, 0, 0, w, h); // Create region models. ArrayList<RegionModel> regions = new ArrayList<RegionModel>(); NodeList nlRegions = sle.getRegions(); int regionsNum = nlRegions.getLength(); for (int i = 0; i < regionsNum; i++) { SMILRegionElement sre = (SMILRegionElement) nlRegions.item(i); RegionModel r = new RegionModel( sre.getId(), sre.getFit(), sre.getLeft(), sre.getTop(), sre.getWidth(), sre.getHeight(), sre.getBackgroundColor()); regions.add(r); } LayoutModel layouts = new LayoutModel(rootLayout, regions); // Create slide models. SMILElement docBody = document.getBody(); NodeList slideNodes = docBody.getChildNodes(); int slidesNum = slideNodes.getLength(); ArrayList<SlideModel> slides = new ArrayList<SlideModel>(slidesNum); for (int i = 0; i < slidesNum; i++) { // FIXME: This is NOT compatible with the SMILDocument which is // generated by some other mobile phones. SMILParElement par = (SMILParElement) slideNodes.item(i); // Create media models for each slide. NodeList mediaNodes = par.getChildNodes(); int mediaNum = mediaNodes.getLength(); ArrayList<MediaModel> mediaSet = new ArrayList<MediaModel>(mediaNum); for (int j = 0; j < mediaNum; j++) { SMILMediaElement sme = (SMILMediaElement) mediaNodes.item(j); try { MediaModel media = MediaModelFactory.getMediaModel(context, sme, layouts, pb); SmilHelper.addMediaElementEventListeners((EventTarget) sme, media); mediaSet.add(media); } catch (DrmException e) { Log.e(TAG, e.getMessage(), e); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); } catch (IllegalArgumentException e) { Log.e(TAG, e.getMessage(), e); } } SlideModel slide = new SlideModel((int) (par.getDur() * 1000), mediaSet); slide.setFill(par.getFill()); SmilHelper.addParElementEventListeners((EventTarget) par, slide); slides.add(slide); } SlideshowModel slideshow = new SlideshowModel(layouts, slides, document, pb, context.getContentResolver()); slideshow.registerModelChangedObserver(slideshow); return slideshow; }