SlideshowEditActivity.java revision b9bcfdd226bbb6f5b265f925343375192963d58a
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 2072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport 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 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.google.android.mms.pdu.PduBody; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport 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.Config; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.LayoutInflater; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Menu; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.MenuItem; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.ViewGroup; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ArrayAdapter; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ImageView; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ListView; 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView; 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.Toast; 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * A list of slides which allows user to edit each item in it. 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SlideshowEditActivity extends ListActivity { 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String TAG = "SlideshowEditActivity"; 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV; 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Menu ids. 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_MOVE_UP = 0; 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_MOVE_DOWN = 1; 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_REMOVE_SLIDE = 2; 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_ADD_SLIDE = 3; 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_DISCARD_SLIDESHOW = 4; 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int REQUEST_CODE_EDIT_SLIDE = 6; 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // State. 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String STATE = "state"; 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String SLIDE_INDEX = "slide_index"; 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String MESSAGE_URI = "message_uri"; 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ListView mList; 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideListAdapter mSlideListAdapter; 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowModel mSlideshowModel = null; 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowEditor mSlideshowEditor = null; 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Bundle mState; 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Uri mUri; 78b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick private Intent mResultIntent; 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mDirty; 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(); 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.addFooterView(createAddSlideItem()); 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (icicle != null) { 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Retrieve previously saved state of this activity. 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = icicle.getBundle(STATE); 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState != null) { 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mUri = Uri.parse(mState.getString(MESSAGE_URI)); 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mUri = getIntent().getData(); 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mUri == null) { 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Cannot startup activity, null Uri."); 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 105b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick // Return the Uri of the message to whoever invoked us. 106b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick mResultIntent = new Intent(); 107b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick mResultIntent.setData(mUri); 108b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initSlideList(); 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to initialize the slide-list.", e); 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View createAddSlideItem() { 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project View v = ((LayoutInflater) getSystemService( 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.slideshow_edit_item, null); 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Add slide. 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView text = (TextView) v.findViewById(R.id.slide_number_text); 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(R.string.add_slide); 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) v.findViewById(R.id.text_preview); 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(R.string.add_slide_hint); 127836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project text.setVisibility(View.VISIBLE); 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ImageView image = (ImageView) v.findViewById(R.id.image_preview); 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project image.setImageResource(R.drawable.ic_launcher_slideshow_add_sms); 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return v; 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onListItemClick(ListView l, View v, int position, long id) { 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position == (l.getCount() - 1)) { 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addNewSlide(); 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project openSlide(position); 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onResume() { 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onResume(); 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState != null) { 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(mState.getInt(SLIDE_INDEX, 0)); 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /* 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * (non-Javadoc) 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @see android.app.Activity#onSaveInstanceState(android.os.Bundle) 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onSaveInstanceState(outState); 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = new Bundle(); 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mList.getSelectedItemPosition() >= 0) { 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState.putInt(SLIDE_INDEX, mList.getSelectedItemPosition()); 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mUri != null) { 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState.putString(MESSAGE_URI, mUri.toString()); 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Saving state: " + mState); 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project outState.putBundle(STATE, mState); 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onPause() { 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onPause(); 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (this) { 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mDirty) { 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduBody pb = mSlideshowModel.toPduBody(); 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduPersister.getPduPersister(this).updateParts(mUri, pb); 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.sync(pb); 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Cannot update the message: " + mUri, e); 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onDestroy() { 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onDestroy(); 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cleanupSlideshowModel(); 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void cleanupSlideshowModel() { 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mSlideshowModel != null) { 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.unregisterModelChangedObserver( 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModelChangedObserver); 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel = null; 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void initSlideList() throws MmsException { 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cleanupSlideshowModel(); 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel = SlideshowModel.createFromMessageUri(this, mUri); 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.registerModelChangedObserver(mModelChangedObserver); 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor = new SlideshowEditor(this, mSlideshowModel); 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter = new SlideListAdapter( 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project this, R.layout.slideshow_edit_item, mSlideshowModel); 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setAdapter(mSlideListAdapter); 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.clear(); 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mList.getSelectedItemPosition(); 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position != (mList.getCount() - 1))) { 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Selected one slide. 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position > 0) { 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_MOVE_UP, 0, R.string.move_up).setIcon(R.drawable.ic_menu_move_up); 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position < (mSlideListAdapter.getCount() - 1)) { 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_MOVE_DOWN, 0, R.string.move_down).setIcon( 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.drawable.ic_menu_move_down); 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_ADD_SLIDE, 0, R.string.add_slide).setIcon(R.drawable.ic_menu_add_slide); 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_REMOVE_SLIDE, 0, R.string.remove_slide).setIcon( 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project android.R.drawable.ic_menu_delete); 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_ADD_SLIDE, 0, R.string.add_slide).setIcon(R.drawable.ic_menu_add_slide); 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_DISCARD_SLIDESHOW, 0, 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.string.discard_slideshow).setIcon(R.drawable.ic_menu_delete_played); 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mList.getSelectedItemPosition(); 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (item.getItemId()) { 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_MOVE_UP: 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position > 0) && (position < mSlideshowModel.size())) { 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.moveSlideUp(position); 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(position - 1); 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_MOVE_DOWN: 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position < mSlideshowModel.size() - 1)) { 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.moveSlideDown(position); 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(position + 1); 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_REMOVE_SLIDE: 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position < mSlideshowModel.size())) { 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.removeSlide(position); 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_ADD_SLIDE: 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addNewSlide(); 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_DISCARD_SLIDESHOW: 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // delete all slides from slideshow. 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.removeAllSlides(); 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void openSlide(int index) { 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(this, SlideEditorActivity.class); 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.setData(mUri); 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.putExtra(SlideEditorActivity.SLIDE_INDEX, index); 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivityForResult(intent, REQUEST_CODE_EDIT_SLIDE); 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void addNewSlide() { 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ( mSlideshowEditor.addNewSlide() ) { 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // add successfully 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Select the new slide. 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.requestFocus(); 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(mSlideshowModel.size() - 1); 30172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 30272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Toast.makeText(this, R.string.cannot_add_slide_anymore, 30372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Toast.LENGTH_SHORT).show(); 30472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 30872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent data) { 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (resultCode != RESULT_OK) { 31172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch(requestCode) { 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case REQUEST_CODE_EDIT_SLIDE: 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (this) { 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDirty = true; 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 319b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick setResult(RESULT_OK, mResultIntent); 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((data != null) && data.getBooleanExtra("done", false)) { 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initSlideList(); 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to initialize the slide-list.", e); 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static class SlideListAdapter extends ArrayAdapter<SlideModel> { 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final Context mContext; 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final int mResource; 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final LayoutInflater mInflater; 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final SlideshowModel mSlideshow; 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideListAdapter(Context context, int resource, 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideshowModel slideshow) { 34572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, resource, slideshow); 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext = context; 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mResource = resource; 34972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mInflater = LayoutInflater.from(context); 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshow = slideshow; 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return createViewFromResource(position, convertView, mResource); 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View createViewFromResource(int position, View convertView, int resource) { 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideListItemView slideListItemView; 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slideListItemView = (SlideListItemView) mInflater.inflate( 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project resource, null); 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Show slide number. 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView text; 36572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) slideListItemView.findViewById(R.id.slide_number_text); 36672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText("Slide " + (position + 1)); 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = getItem(position); 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int dur = slide.getDuration() / 1000; 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) slideListItemView.findViewById(R.id.duration_text); 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(dur + " secs"); 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Presenter presenter = PresenterFactory.getPresenter( 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project "SlideshowPresenter", mContext, slideListItemView, mSlideshow); 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((SlideshowPresenter) presenter).setLocation(position); 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presenter.present(); 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return slideListItemView; 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final IModelChangedObserver mModelChangedObserver = 38372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project new IModelChangedObserver() { 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onModelChanged(Model model, boolean dataChanged) { 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (SlideshowEditActivity.this) { 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDirty = true; 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 388b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick setResult(RESULT_OK, mResultIntent); 38972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 392