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