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