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 android.app.ListActivity; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Context; 2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Intent; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.net.Uri; 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 26dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chenimport android.view.ContextMenu; 27dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chenimport android.view.ContextMenu.ContextMenuInfo; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.LayoutInflater; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.Menu; 3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.MenuItem; 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.View; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.view.ViewGroup; 33dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chenimport android.widget.AdapterView; 34dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chenimport android.widget.AdapterView.AdapterContextMenuInfo; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ArrayAdapter; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ImageView; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.ListView; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.Toast; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 41d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.R; 42d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.model.IModelChangedObserver; 43d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.model.Model; 44d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.model.SlideModel; 45d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.model.SlideshowModel; 46d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.MmsException; 47d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.pdu.PduBody; 48d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.pdu.PduPersister; 49d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chen 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * A list of slides which allows user to edit each item in it. 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SlideshowEditActivity extends ListActivity { 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String TAG = "SlideshowEditActivity"; 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 56150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato private static final boolean LOCAL_LOGV = false; 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Menu ids. 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_MOVE_UP = 0; 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_MOVE_DOWN = 1; 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_REMOVE_SLIDE = 2; 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_ADD_SLIDE = 3; 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int MENU_DISCARD_SLIDESHOW = 4; 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static int REQUEST_CODE_EDIT_SLIDE = 6; 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // State. 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String STATE = "state"; 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String SLIDE_INDEX = "slide_index"; 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final static String MESSAGE_URI = "message_uri"; 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private ListView mList; 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideListAdapter mSlideListAdapter; 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowModel mSlideshowModel = null; 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowEditor mSlideshowEditor = null; 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Bundle mState; 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private Uri mUri; 80b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick private Intent mResultIntent; 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mDirty; 8258cc5bd40f952b052e9114922b244bdff4701283Tom Taylor private View mAddSlideItem; 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onCreate(Bundle icicle) { 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onCreate(icicle); 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList = getListView(); 8958cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem = createAddSlideItem(); 9058cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mList.addFooterView(mAddSlideItem); 9158cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem.setVisibility(View.GONE); 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (icicle != null) { 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Retrieve previously saved state of this activity. 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = icicle.getBundle(STATE); 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState != null) { 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mUri = Uri.parse(mState.getString(MESSAGE_URI)); 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mUri = getIntent().getData(); 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mUri == null) { 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Cannot startup activity, null Uri."); 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 110b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick // Return the Uri of the message to whoever invoked us. 111b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick mResultIntent = new Intent(); 112b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick mResultIntent.setData(mUri); 11358cc5bd40f952b052e9114922b244bdff4701283Tom Taylor 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initSlideList(); 11658cc5bd40f952b052e9114922b244bdff4701283Tom Taylor adjustAddSlideVisibility(); 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to initialize the slide-list.", e); 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 121dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 122dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen registerForContextMenu(mList); 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View createAddSlideItem() { 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project View v = ((LayoutInflater) getSystemService( 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.slideshow_edit_item, null); 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Add slide. 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView text = (TextView) v.findViewById(R.id.slide_number_text); 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(R.string.add_slide); 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) v.findViewById(R.id.text_preview); 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(R.string.add_slide_hint); 135836945de572ac80fd6f6a7bf59036d4cce801410The Android Open Source Project text.setVisibility(View.VISIBLE); 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ImageView image = (ImageView) v.findViewById(R.id.image_preview); 138ecb91d63c31dae86e6bccf33e7379b49723a7095Peter Ng image.setImageResource(R.drawable.ic_attach_slideshow_holo_light); 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return v; 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onListItemClick(ListView l, View v, int position, long id) { 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position == (l.getCount() - 1)) { 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addNewSlide(); 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project openSlide(position); 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onResume() { 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onResume(); 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mState != null) { 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(mState.getInt(SLIDE_INDEX, 0)); 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /* 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * (non-Javadoc) 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @see android.app.Activity#onSaveInstanceState(android.os.Bundle) 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onSaveInstanceState(outState); 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState = new Bundle(); 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mList.getSelectedItemPosition() >= 0) { 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState.putInt(SLIDE_INDEX, mList.getSelectedItemPosition()); 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mUri != null) { 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mState.putString(MESSAGE_URI, mUri.toString()); 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Saving state: " + mState); 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project outState.putBundle(STATE, mState); 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onPause() { 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onPause(); 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (this) { 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mDirty) { 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduBody pb = mSlideshowModel.toPduBody(); 192469db72fcf219fd4c60bc9b01c728bdc3e866d40Tom Taylor PduPersister.getPduPersister(this).updateParts(mUri, pb, null); 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.sync(pb); 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Cannot update the message: " + mUri, e); 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onDestroy() { 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super.onDestroy(); 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cleanupSlideshowModel(); 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void cleanupSlideshowModel() { 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mSlideshowModel != null) { 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.unregisterModelChangedObserver( 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModelChangedObserver); 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel = null; 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void initSlideList() throws MmsException { 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project cleanupSlideshowModel(); 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel = SlideshowModel.createFromMessageUri(this, mUri); 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowModel.registerModelChangedObserver(mModelChangedObserver); 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor = new SlideshowEditor(this, mSlideshowModel); 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter = new SlideListAdapter( 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project this, R.layout.slideshow_edit_item, mSlideshowModel); 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setAdapter(mSlideListAdapter); 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.clear(); 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mList.getSelectedItemPosition(); 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position != (mList.getCount() - 1))) { 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Selected one slide. 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position > 0) { 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_MOVE_UP, 0, R.string.move_up).setIcon(R.drawable.ic_menu_move_up); 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (position < (mSlideListAdapter.getCount() - 1)) { 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_MOVE_DOWN, 0, R.string.move_down).setIcon( 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.drawable.ic_menu_move_down); 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 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 menu.add(0, MENU_REMOVE_SLIDE, 0, R.string.remove_slide).setIcon( 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project android.R.drawable.ic_menu_delete); 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_ADD_SLIDE, 0, R.string.add_slide).setIcon(R.drawable.ic_menu_add_slide); 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project menu.add(0, MENU_DISCARD_SLIDESHOW, 0, 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project R.string.discard_slideshow).setIcon(R.drawable.ic_menu_delete_played); 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mList.getSelectedItemPosition(); 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch (item.getItemId()) { 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_MOVE_UP: 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position > 0) && (position < mSlideshowModel.size())) { 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.moveSlideUp(position); 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(position - 1); 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_MOVE_DOWN: 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position < mSlideshowModel.size() - 1)) { 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.moveSlideDown(position); 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(position + 1); 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_REMOVE_SLIDE: 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((position >= 0) && (position < mSlideshowModel.size())) { 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.removeSlide(position); 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_ADD_SLIDE: 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addNewSlide(); 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case MENU_DISCARD_SLIDESHOW: 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // delete all slides from slideshow. 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshowEditor.removeAllSlides(); 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void openSlide(int index) { 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent intent = new Intent(this, SlideEditorActivity.class); 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.setData(mUri); 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project intent.putExtra(SlideEditorActivity.SLIDE_INDEX, index); 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project startActivityForResult(intent, REQUEST_CODE_EDIT_SLIDE); 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30158cc5bd40f952b052e9114922b244bdff4701283Tom Taylor private void adjustAddSlideVisibility() { 30258cc5bd40f952b052e9114922b244bdff4701283Tom Taylor if (mSlideshowModel.size() >= SlideshowEditor.MAX_SLIDE_NUM) { 30358cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem.setVisibility(View.GONE); 30458cc5bd40f952b052e9114922b244bdff4701283Tom Taylor } else { 30558cc5bd40f952b052e9114922b244bdff4701283Tom Taylor mAddSlideItem.setVisibility(View.VISIBLE); 30658cc5bd40f952b052e9114922b244bdff4701283Tom Taylor } 30758cc5bd40f952b052e9114922b244bdff4701283Tom Taylor } 30858cc5bd40f952b052e9114922b244bdff4701283Tom Taylor 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void addNewSlide() { 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ( mSlideshowEditor.addNewSlide() ) { 31172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // add successfully 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideListAdapter.notifyDataSetChanged(); 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Select the new slide. 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.requestFocus(); 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mList.setSelection(mSlideshowModel.size() - 1); 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Toast.makeText(this, R.string.cannot_add_slide_anymore, 31972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Toast.LENGTH_SHORT).show(); 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Intent data) { 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (resultCode != RESULT_OK) { 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project switch(requestCode) { 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project case REQUEST_CODE_EDIT_SLIDE: 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (this) { 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDirty = true; 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 335b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick setResult(RESULT_OK, mResultIntent); 33672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((data != null) && data.getBooleanExtra("done", false)) { 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project initSlideList(); 344f164314f19ff727b27455174b30fd704474651a7Arun Ravindran adjustAddSlideVisibility(); 34572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to initialize the slide-list.", e); 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project finish(); 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 34972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project break; 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static class SlideListAdapter extends ArrayAdapter<SlideModel> { 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final Context mContext; 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final int mResource; 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final LayoutInflater mInflater; 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final SlideshowModel mSlideshow; 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideListAdapter(Context context, int resource, 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideshowModel slideshow) { 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, resource, slideshow); 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext = context; 36572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mResource = resource; 36672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mInflater = LayoutInflater.from(context); 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideshow = slideshow; 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public View getView(int position, View convertView, ViewGroup parent) { 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return createViewFromResource(position, convertView, mResource); 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private View createViewFromResource(int position, View convertView, int resource) { 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideListItemView slideListItemView; 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slideListItemView = (SlideListItemView) mInflater.inflate( 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project resource, null); 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Show slide number. 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextView text; 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) slideListItemView.findViewById(R.id.slide_number_text); 38361e0021ad3abc1a18db1cf0acfe30ba18913c9c9Eric Fischer text.setText(mContext.getString(R.string.slide_number, position + 1)); 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = getItem(position); 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int dur = slide.getDuration() / 1000; 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = (TextView) slideListItemView.findViewById(R.id.duration_text); 38861e0021ad3abc1a18db1cf0acfe30ba18913c9c9Eric Fischer text.setText(mContext.getResources(). 38961e0021ad3abc1a18db1cf0acfe30ba18913c9c9Eric Fischer getQuantityString(R.plurals.slide_duration, dur, dur)); 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Presenter presenter = PresenterFactory.getPresenter( 39272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project "SlideshowPresenter", mContext, slideListItemView, mSlideshow); 39372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((SlideshowPresenter) presenter).setLocation(position); 39451e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor presenter.present(null); 39572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return slideListItemView; 39772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final IModelChangedObserver mModelChangedObserver = 40172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project new IModelChangedObserver() { 40272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onModelChanged(Model model, boolean dataChanged) { 40372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project synchronized (SlideshowEditActivity.this) { 40472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDirty = true; 40572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 406b9bcfdd226bbb6f5b265f925343375192963d58aFicus Kirkpatrick setResult(RESULT_OK, mResultIntent); 40758cc5bd40f952b052e9114922b244bdff4701283Tom Taylor adjustAddSlideVisibility(); 40872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 410dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 411dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen @Override 412dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen public void onCreateContextMenu(ContextMenu menu, View v, 413dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen ContextMenuInfo menuInfo) { 414dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen menu.setHeaderTitle(R.string.slideshow_options); 415dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 416dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 417dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen int position = info.position; 418dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 419dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen if ((position >= 0) && (position != (mList.getCount() - 1))) { 420dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen // Selected one slide. 421dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen if (position > 0) { 422dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen menu.add(0, MENU_MOVE_UP, 0, R.string.move_up).setIcon(R.drawable.ic_menu_move_up); 423dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 424dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen if (position < (mSlideListAdapter.getCount() - 1)) { 425dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen menu.add(0, MENU_MOVE_DOWN, 0, R.string.move_down).setIcon( 426dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen R.drawable.ic_menu_move_down); 427dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 428dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 429dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen menu.add(0, MENU_ADD_SLIDE, 0, R.string.add_slide).setIcon( 430dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen R.drawable.ic_menu_add_slide); 431dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 432dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen menu.add(0, MENU_REMOVE_SLIDE, 0, R.string.remove_slide).setIcon( 433dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen android.R.drawable.ic_menu_delete); 434dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 435dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 436dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 437dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen @Override 438dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen public boolean onContextItemSelected(MenuItem item) { 439dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 440dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen int position = info.position; 441dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 442dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen switch(item.getItemId()) { 443dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen case MENU_MOVE_UP: 444dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen if ((position > 0) && (position < mSlideshowModel.size())) { 445dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mSlideshowEditor.moveSlideUp(position); 446dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mSlideListAdapter.notifyDataSetChanged(); 447dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mList.setSelection(position - 1); 448dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 449dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen break; 450dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen case MENU_MOVE_DOWN: 451dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen if ((position >= 0) && (position < mSlideshowModel.size() - 1)) { 452dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mSlideshowEditor.moveSlideDown(position); 453dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mSlideListAdapter.notifyDataSetChanged(); 454dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mList.setSelection(position + 1); 455dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 456dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen break; 457dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen case MENU_REMOVE_SLIDE: 458dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen if ((position >= 0) && (position < mSlideshowModel.size())) { 459dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mSlideshowEditor.removeSlide(position); 460dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen mSlideListAdapter.notifyDataSetChanged(); 461dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 462dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen break; 463dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen case MENU_ADD_SLIDE: 464dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen addNewSlide(); 465dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen break; 466dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen default: 467dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen break; 468dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 469dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen 470dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen return true; 471dd3437a93a00940e7dc53d8f00acc16a36aaf492Roger Chen } 47272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 473