SlideshowEditActivity.java revision ecb91d63c31dae86e6bccf33e7379b49723a7095
172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/* 272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG. 372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License. 772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at 872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and 1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License. 1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.ui; 1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport com.google.android.mms.MmsException; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R; 2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.IModelChangedObserver; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.Model; 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideModel; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideshowModel; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport com.google.android.mms.pdu.PduBody; 28f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport com.google.android.mms.pdu.PduPersister; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.app.ListActivity; 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Context; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Intent; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.net.Uri; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.LayoutInflater; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Menu; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.MenuItem; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.ViewGroup; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ArrayAdapter; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ImageView; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ListView; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView; 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.Toast; 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * A list of slides which allows user to edit each item in it. 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SlideshowEditActivity extends ListActivity { 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String TAG = "SlideshowEditActivity"; 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 53150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato private static final boolean LOCAL_LOGV = false; 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Menu ids. 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_MOVE_UP = 0; 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_MOVE_DOWN = 1; 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_REMOVE_SLIDE = 2; 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_ADD_SLIDE = 3; 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_DISCARD_SLIDESHOW = 4; 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int REQUEST_CODE_EDIT_SLIDE = 6; 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // State. 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String STATE = "state"; 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String SLIDE_INDEX = "slide_index"; 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String MESSAGE_URI = "message_uri"; 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ListView mList; 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideListAdapter mSlideListAdapter; 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowModel mSlideshowModel = null; 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowEditor mSlideshowEditor = null; 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Bundle mState; 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Uri mUri; 77b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick private Intent mResultIntent; 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mDirty; 7958cc5bd40f952b052e9114922b244bdff4701283Tom Taylor private View mAddSlideItem; 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onCreate(Bundle icicle) { 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onCreate(icicle); 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList = getListView(); 8658cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem = createAddSlideItem(); 8758cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mList.addFooterView(mAddSlideItem); 8858cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem.setVisibility(View.GONE); 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (icicle != null) { 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Retrieve previously saved state of this activity. 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = icicle.getBundle(STATE); 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState != null) { 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mUri = Uri.parse(mState.getString(MESSAGE_URI)); 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mUri = getIntent().getData(); 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mUri == null) { 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Cannot startup activity, null Uri."); 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 107b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick // Return the Uri of the message to whoever invoked us. 108b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick mResultIntent = new Intent(); 109b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick mResultIntent.setData(mUri); 11058cc5bd40f952b052e9114922b244bdff4701283Tom Taylor 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initSlideList(); 11358cc5bd40f952b052e9114922b244bdff4701283Tom Taylor adjustAddSlideVisibility(); 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to initialize the slide-list.", e); 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View createAddSlideItem() { 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project View v = ((LayoutInflater) getSystemService( 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.slideshow_edit_item, null); 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Add slide. 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView text = (TextView) v.findViewById(R.id.slide_number_text); 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(R.string.add_slide); 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) v.findViewById(R.id.text_preview); 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(R.string.add_slide_hint); 130836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project text.setVisibility(View.VISIBLE); 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ImageView image = (ImageView) v.findViewById(R.id.image_preview); 133ecb91d63c31dae86e6bccf33e7379b49723a7095Peter Ng image.setImageResource(R.drawable.ic_attach_slideshow_holo_light); 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return v; 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onListItemClick(ListView l, View v, int position, long id) { 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position == (l.getCount() - 1)) { 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addNewSlide(); 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project openSlide(position); 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onResume() { 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onResume(); 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState != null) { 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(mState.getInt(SLIDE_INDEX, 0)); 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /* 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * (non-Javadoc) 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @see android.app.Activity#onSaveInstanceState(android.os.Bundle) 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onSaveInstanceState(outState); 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = new Bundle(); 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mList.getSelectedItemPosition() >= 0) { 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState.putInt(SLIDE_INDEX, mList.getSelectedItemPosition()); 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mUri != null) { 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState.putString(MESSAGE_URI, mUri.toString()); 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Saving state: " + mState); 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project outState.putBundle(STATE, mState); 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onPause() { 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onPause(); 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (this) { 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mDirty) { 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduBody pb = mSlideshowModel.toPduBody(); 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduPersister.getPduPersister(this).updateParts(mUri, pb); 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.sync(pb); 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Cannot update the message: " + mUri, e); 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onDestroy() { 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onDestroy(); 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cleanupSlideshowModel(); 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void cleanupSlideshowModel() { 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mSlideshowModel != null) { 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.unregisterModelChangedObserver( 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModelChangedObserver); 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel = null; 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void initSlideList() throws MmsException { 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cleanupSlideshowModel(); 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel = SlideshowModel.createFromMessageUri(this, mUri); 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.registerModelChangedObserver(mModelChangedObserver); 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor = new SlideshowEditor(this, mSlideshowModel); 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter = new SlideListAdapter( 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project this, R.layout.slideshow_edit_item, mSlideshowModel); 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setAdapter(mSlideListAdapter); 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.clear(); 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mList.getSelectedItemPosition(); 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position != (mList.getCount() - 1))) { 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Selected one slide. 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position > 0) { 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_MOVE_UP, 0, R.string.move_up).setIcon(R.drawable.ic_menu_move_up); 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position < (mSlideListAdapter.getCount() - 1)) { 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_MOVE_DOWN, 0, R.string.move_down).setIcon( 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.drawable.ic_menu_move_down); 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_ADD_SLIDE, 0, R.string.add_slide).setIcon(R.drawable.ic_menu_add_slide); 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_REMOVE_SLIDE, 0, R.string.remove_slide).setIcon( 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project android.R.drawable.ic_menu_delete); 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_ADD_SLIDE, 0, R.string.add_slide).setIcon(R.drawable.ic_menu_add_slide); 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_DISCARD_SLIDESHOW, 0, 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.string.discard_slideshow).setIcon(R.drawable.ic_menu_delete_played); 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mList.getSelectedItemPosition(); 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (item.getItemId()) { 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_MOVE_UP: 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position > 0) && (position < mSlideshowModel.size())) { 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.moveSlideUp(position); 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(position - 1); 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_MOVE_DOWN: 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position < mSlideshowModel.size() - 1)) { 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.moveSlideDown(position); 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(position + 1); 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_REMOVE_SLIDE: 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position < mSlideshowModel.size())) { 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.removeSlide(position); 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_ADD_SLIDE: 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addNewSlide(); 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_DISCARD_SLIDESHOW: 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // delete all slides from slideshow. 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.removeAllSlides(); 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void openSlide(int index) { 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(this, SlideEditorActivity.class); 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.setData(mUri); 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.putExtra(SlideEditorActivity.SLIDE_INDEX, index); 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivityForResult(intent, REQUEST_CODE_EDIT_SLIDE); 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29658cc5bd40f952b052e9114922b244bdff4701283Tom Taylor private void adjustAddSlideVisibility() { 29758cc5bd40f952b052e9114922b244bdff4701283Tom Taylor if (mSlideshowModel.size() >= SlideshowEditor.MAX_SLIDE_NUM) { 29858cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem.setVisibility(View.GONE); 29958cc5bd40f952b052e9114922b244bdff4701283Tom Taylor } else { 30058cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem.setVisibility(View.VISIBLE); 30158cc5bd40f952b052e9114922b244bdff4701283Tom Taylor } 30258cc5bd40f952b052e9114922b244bdff4701283Tom Taylor } 30358cc5bd40f952b052e9114922b244bdff4701283Tom Taylor 30472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void addNewSlide() { 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ( mSlideshowEditor.addNewSlide() ) { 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // add successfully 30772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 30872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Select the new slide. 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.requestFocus(); 31172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(mSlideshowModel.size() - 1); 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Toast.makeText(this, R.string.cannot_add_slide_anymore, 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Toast.LENGTH_SHORT).show(); 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 31972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent data) { 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (resultCode != RESULT_OK) { 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch(requestCode) { 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case REQUEST_CODE_EDIT_SLIDE: 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (this) { 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDirty = true; 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 330b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick setResult(RESULT_OK, mResultIntent); 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((data != null) && data.getBooleanExtra("done", false)) { 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 33572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initSlideList(); 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to initialize the slide-list.", e); 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 34572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static class SlideListAdapter extends ArrayAdapter<SlideModel> { 34972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final Context mContext; 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final int mResource; 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final LayoutInflater mInflater; 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final SlideshowModel mSlideshow; 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideListAdapter(Context context, int resource, 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideshowModel slideshow) { 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, resource, slideshow); 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext = context; 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mResource = resource; 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mInflater = LayoutInflater.from(context); 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshow = slideshow; 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 36572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 36672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return createViewFromResource(position, convertView, mResource); 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View createViewFromResource(int position, View convertView, int resource) { 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideListItemView slideListItemView; 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slideListItemView = (SlideListItemView) mInflater.inflate( 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project resource, null); 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Show slide number. 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView text; 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) slideListItemView.findViewById(R.id.slide_number_text); 37761e0021ad3abc1a18db1cf0acfe30ba18913c9c9Eric Fischer text.setText(mContext.getString(R.string.slide_number, position + 1)); 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = getItem(position); 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int dur = slide.getDuration() / 1000; 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) slideListItemView.findViewById(R.id.duration_text); 38261e0021ad3abc1a18db1cf0acfe30ba18913c9c9Eric Fischer text.setText(mContext.getResources(). 38361e0021ad3abc1a18db1cf0acfe30ba18913c9c9Eric Fischer getQuantityString(R.plurals.slide_duration, dur, dur)); 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Presenter presenter = PresenterFactory.getPresenter( 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project "SlideshowPresenter", mContext, slideListItemView, mSlideshow); 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((SlideshowPresenter) presenter).setLocation(position); 38872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presenter.present(); 38972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return slideListItemView; 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final IModelChangedObserver mModelChangedObserver = 39572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project new IModelChangedObserver() { 39672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onModelChanged(Model model, boolean dataChanged) { 39772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (SlideshowEditActivity.this) { 39872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDirty = true; 39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 400b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick setResult(RESULT_OK, mResultIntent); 40158cc5bd40f952b052e9114922b244bdff4701283Tom Taylor adjustAddSlideVisibility(); 40272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 40472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 405