1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/*
2045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng * Copyright (C) 2011 The Android Open Source Project
3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License");
5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License.
6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at
7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *      http://www.apache.org/licenses/LICENSE-2.0
9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi *
10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software
11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS,
12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and
14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License.
15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor;
18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
19ca7783e6051a8fc35434ba514af2558205acc902Gil Dobjanschiimport android.app.ActionBar;
20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.app.AlertDialog;
21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.app.Dialog;
22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.DialogInterface;
23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Intent;
24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Bundle;
25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.text.InputType;
264e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Chengimport android.util.DisplayMetrics;
27045133a84c417b1469050980990f1623c6448e2cShih-chia Chengimport android.util.Log;
28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.view.Menu;
29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.view.MenuItem;
30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.view.View;
31045133a84c417b1469050980990f1623c6448e2cShih-chia Chengimport android.widget.AdapterView;
320ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Chengimport android.widget.Button;
33045133a84c417b1469050980990f1623c6448e2cShih-chia Chengimport android.widget.GridView;
34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.widget.PopupMenu;
35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.widget.TextView;
36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.widget.Toast;
37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
3881393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschiimport com.android.videoeditor.service.ApiService;
39258481be4734642b144c37f6b6572d8c85263f37Shih-chia Chengimport com.android.videoeditor.service.ApiServiceListener;
4081393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschiimport com.android.videoeditor.service.VideoEditorProject;
4181393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschiimport com.android.videoeditor.util.FileUtils;
42045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng
43045133a84c417b1469050980990f1623c6448e2cShih-chia Chengimport java.util.List;
44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/**
46045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng * Activity that lets user pick a project or create a new one.
47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */
48a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Chengpublic class ProjectsActivity extends NoSearchActivity {
49a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng    private static final String LOG_TAG = "ProjectsActivity";
50045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng
51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final int REQUEST_CODE_OPEN_PROJECT = 1;
52ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final int REQUEST_CODE_CREATE_PROJECT = 2;
53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
54045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // The project path returned by the picker
55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_OPEN_PROJECT_PATH = "path";
56ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public static final String PARAM_CREATE_PROJECT_NAME = "name";
57ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
58045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // Menu ids
59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final int MENU_NEW_PROJECT_ID = 1;
60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
61045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // Dialog ids
62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final int DIALOG_NEW_PROJECT_ID = 1;
63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final int DIALOG_REMOVE_PROJECT_ID = 2;
64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
65045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // Dialog parameters
66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private static final String PARAM_DIALOG_PATH_ID = "path";
67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
68045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // Threshold in width dip for showing title in action bar
694e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng    private static final int SHOW_TITLE_THRESHOLD_WIDTH_DIP = 1000;
704e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng
71045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    private GridView mGridView;
72045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    private List<VideoEditorProject> mProjects;
73045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    private ProjectPickerAdapter mAdapter;
74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
75045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // Listener that responds to the event when projects are loaded. It populates the grid view with
76045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    // project thumbnail and information.
77045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    private final ApiServiceListener mProjectsLoadedListener = new ApiServiceListener() {
78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        @Override
79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        public void onProjectsLoaded(List<VideoEditorProject> projects, Exception exception) {
80a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng            if (projects != null && exception == null) {
81a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng                mProjects = projects;
82a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng                // Initialize adapter with project list and populate data in the grid view.
83a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng                mAdapter = new ProjectPickerAdapter(ProjectsActivity.this, getLayoutInflater(), projects);
84a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng                mGridView.setAdapter(mAdapter);
85a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng            }
86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
87045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    };
88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public void onCreate(Bundle savedInstanceState) {
91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        super.onCreate(savedInstanceState);
92045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        setContentView(R.layout.project_picker);
93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
94045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        // Show action bar title only on large screens.
95ca7783e6051a8fc35434ba514af2558205acc902Gil Dobjanschi        final ActionBar actionBar = getActionBar();
96045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        final DisplayMetrics displayMetrics = new DisplayMetrics();
97045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
98045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        final int widthDip = (int) (displayMetrics.widthPixels / displayMetrics.scaledDensity);
994e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng        // Only show title on large screens (width >= 1000 dip).
1004e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng        if (widthDip >= SHOW_TITLE_THRESHOLD_WIDTH_DIP) {
1014e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng            actionBar.setDisplayOptions(actionBar.getDisplayOptions() |
1024e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng                    ActionBar.DISPLAY_SHOW_TITLE);
1034e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng            actionBar.setTitle(R.string.full_app_name);
1044e57f3f882e567fd5882ee2a8ff5b7dd72fb4334Shih-chia Cheng        }
105ca7783e6051a8fc35434ba514af2558205acc902Gil Dobjanschi
106045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        mGridView = (GridView) findViewById(R.id.projects);
107045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
108045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            @Override
109045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            public void onItemClick(AdapterView<?> parent, View view,
110045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                    int position, long id) {
111045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                // If user clicks on the last item, then create a new project.
112045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                if (position == mProjects.size()) {
113045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    showDialog(DIALOG_NEW_PROJECT_ID);
114045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                } else {
115045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    openProject(mProjects.get(position).getPath());
116045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                }
117045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            }
118045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        });
119045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        // Upon long press, pop up a menu with a removal option.
120045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        mGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
121045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            @Override
122045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            public boolean onItemLongClick(AdapterView<?> parent, View view,
123045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                           final int position, long id) {
124045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                // Open new project dialog when user clicks on the "create new project" card.
125045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                if (position == mProjects.size()) {
126045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    showDialog(DIALOG_NEW_PROJECT_ID);
127045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    return true;
128045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                }
129045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                // Otherwise, pop up a menu with a project removal option.
130a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng                final PopupMenu popupMenu = new PopupMenu(ProjectsActivity.this, view);
131045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                popupMenu.getMenuInflater().inflate(R.menu.project_menu, popupMenu.getMenu());
132045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
133045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    @Override
134045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    public boolean onMenuItemClick(MenuItem menuItem) {
135045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                        switch (menuItem.getItemId()) {
136045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                            case R.id.action_remove_project:
137045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                final Bundle bundle = new Bundle();
138045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                bundle.putString(PARAM_DIALOG_PATH_ID,
139045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                        mProjects.get(position).getPath());
140045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                showDialog(DIALOG_REMOVE_PROJECT_ID, bundle);
141045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                break;
142045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                            default:
143045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                break;
144045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                        }
145045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                        return true;
146045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    }
147045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                });
148045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                popupMenu.show();
149045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                return true;
150045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            }});
151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
1547a4bb5384f847bc29c01c75556188637f528b1edShih-chia Cheng    public void onResume() {
1557a4bb5384f847bc29c01c75556188637f528b1edShih-chia Cheng        super.onResume();
156045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        ApiService.registerListener(mProjectsLoadedListener);
157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        ApiService.loadProjects(this);
158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
1617a4bb5384f847bc29c01c75556188637f528b1edShih-chia Cheng    public void onPause() {
1627a4bb5384f847bc29c01c75556188637f528b1edShih-chia Cheng        super.onPause();
163045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        ApiService.unregisterListener(mProjectsLoadedListener);
164e6e5edf189ebaa1dbcec99c4ea0ea6ccaced43adChih-Chung Chang        mAdapter = null;
1657a4bb5384f847bc29c01c75556188637f528b1edShih-chia Cheng        mGridView.setAdapter(null);
166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public boolean onCreateOptionsMenu(Menu menu) {
170045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        menu.add(Menu.NONE, MENU_NEW_PROJECT_ID, Menu.NONE, R.string.projects_new_project)
171045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                .setIcon(R.drawable.ic_menu_add_video)
172045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        return true;
174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public boolean onOptionsItemSelected(MenuItem item) {
178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        switch (item.getItemId()) {
179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case MENU_NEW_PROJECT_ID: {
180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                showDialog(DIALOG_NEW_PROJECT_ID);
181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                return true;
182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            default: {
185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                return false;
186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    @Override
191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    public Dialog onCreateDialog(int id, final Bundle bundle) {
192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        switch (id) {
193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case DIALOG_NEW_PROJECT_ID: {
1944951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                return AlertDialogs.createEditDialog(
1954951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        this,
196c652e384a4b970a3ed01831320a5cfd1075687f5Shih-chia Cheng                        null,  // No title
197c652e384a4b970a3ed01831320a5cfd1075687f5Shih-chia Cheng                        null,  // No text in the edit box
1984951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        getString(android.R.string.ok),
199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                        new DialogInterface.OnClickListener() {
20005be941a5cc0347e8b67deb0a91d70e91105ccafShih-chia Cheng                            @Override
201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                            public void onClick(DialogInterface dialog, int which) {
202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                final TextView tv =
203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                    (TextView)((AlertDialog)dialog).findViewById(R.id.text_1);
204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                final String projectName = tv.getText().toString();
205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                removeDialog(DIALOG_NEW_PROJECT_ID);
206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                createProject(projectName);
207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                            }
2084951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        },
2094951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        getString(android.R.string.cancel),
210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                        new DialogInterface.OnClickListener() {
21105be941a5cc0347e8b67deb0a91d70e91105ccafShih-chia Cheng                            @Override
212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                            public void onClick(DialogInterface dialog, int which) {
213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                removeDialog(DIALOG_NEW_PROJECT_ID);
214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                            }
2154951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        },
2164951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        new DialogInterface.OnCancelListener() {
21705be941a5cc0347e8b67deb0a91d70e91105ccafShih-chia Cheng                            @Override
218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                            public void onCancel(DialogInterface dialog) {
219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                                removeDialog(DIALOG_NEW_PROJECT_ID);
220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                            }
2214951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        },
2224951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        InputType.TYPE_NULL,
223c652e384a4b970a3ed01831320a5cfd1075687f5Shih-chia Cheng                        32,
224c652e384a4b970a3ed01831320a5cfd1075687f5Shih-chia Cheng                        getString(R.string.projects_project_name));
225ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
226ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
227ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            case DIALOG_REMOVE_PROJECT_ID: {
228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                final String projectPath = bundle.getString(PARAM_DIALOG_PATH_ID);
2294951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                return AlertDialogs.createAlert(
2304951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        this,
231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                        getString(R.string.editor_delete_project),
2324951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        0,  // no icons for this dialog.
2334951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        getString(R.string.editor_delete_project_question),
234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                        getString(R.string.yes),
235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                        new DialogInterface.OnClickListener() {
2364951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            @Override
2374951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            public void onClick(DialogInterface dialog, int which) {
2384951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                                removeDialog(DIALOG_REMOVE_PROJECT_ID);
239045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                                deleteProject(projectPath);
2404951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            }
2414951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        },
2424951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        getString(R.string.no),
2434951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        new DialogInterface.OnClickListener() {
2444951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            @Override
2454951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            public void onClick(DialogInterface dialog, int which) {
2464951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                                removeDialog(DIALOG_REMOVE_PROJECT_ID);
2474951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            }
2484951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        },
2494951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        new DialogInterface.OnCancelListener() {
2504951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            @Override
2514951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            public void onCancel(DialogInterface dialog) {
2524951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                                removeDialog(DIALOG_REMOVE_PROJECT_ID);
2534951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                            }
2544951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        },
2554951bf52ba455c00d28258c331f073583dd28980Shih-chia Cheng                        true);
256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            default: {
259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi                return null;
260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            }
261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
2640ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng    @Override
2650ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng    protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
2660ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng        switch (id) {
2670ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng            // A workaround to handle the OK button. We can't access the button with getButton()
2680ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng            // when building the dialog in AlertDialogs, hence we postpone the enabling/disabling
2690ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng            // of the positive button until the dialog is to be shown here.
2700ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng            case DIALOG_NEW_PROJECT_ID:
2710ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng                final AlertDialog newProjectDialog = (AlertDialog) dialog;
2720ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng                Button positiveButton = newProjectDialog.getButton(AlertDialog.BUTTON_POSITIVE);
2730ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng                final TextView inputField =
2740ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng                        (TextView) newProjectDialog.findViewById(R.id.text_1);
2750ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng                positiveButton.setEnabled(inputField.getText().toString().trim().length() > 0);
2760ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng            default:
2770ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng                return;
2780ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng        }
2790ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng    }
2800ee036cea235d3a95cacce6d5b3c4025cbface92Shih-chia Cheng
2817a4bb5384f847bc29c01c75556188637f528b1edShih-chia Cheng    private void deleteProject(final String projectPath) {
282a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng        ApiService.deleteProject(ProjectsActivity.this, projectPath);
283045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        mAdapter.remove(projectPath);
284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private void createProject(String projectName) {
287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        try {
288045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            final Intent intent = new Intent(this, VideoEditorActivity.class);
289045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            intent.setAction(Intent.ACTION_INSERT);
290045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            intent.putExtra(PARAM_CREATE_PROJECT_NAME, projectName);
29183af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi            final String projectPath = FileUtils.createNewProjectPath(this);
292045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            intent.putExtra(PARAM_OPEN_PROJECT_PATH, projectPath);
293045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            startActivityForResult(intent, REQUEST_CODE_CREATE_PROJECT);
294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        } catch (Exception ex) {
295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi            ex.printStackTrace();
296045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            Toast.makeText(this, R.string.editor_storage_not_available,
297045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng                    Toast.LENGTH_LONG).show();
298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi        }
299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi
301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    private void openProject(String projectPath) {
302045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        final Intent intent = new Intent(this, VideoEditorActivity.class);
303045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        intent.setAction(Intent.ACTION_EDIT);
304045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        intent.putExtra(PARAM_OPEN_PROJECT_PATH, projectPath);
305045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        startActivityForResult(intent, REQUEST_CODE_OPEN_PROJECT);
306045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    }
307045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng
308045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng    private static void logd(String message) {
309045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        if (Log.isLoggable(LOG_TAG, Log.DEBUG)) {
310045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng            Log.d(LOG_TAG, message);
311045133a84c417b1469050980990f1623c6448e2cShih-chia Cheng        }
312ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi    }
313ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi}
314