DocumentsActivity.java revision a5599ef636e37cb0b6474349936999be1afe6987
19e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey/* 29e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * Copyright (C) 2013 The Android Open Source Project 39e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * 49e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 59e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * you may not use this file except in compliance with the License. 69e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * You may obtain a copy of the License at 79e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * 89e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 99e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * 109e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 119e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 129e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * See the License for the specific language governing permissions and 149e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey * limitations under the License. 159e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey */ 169e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 179e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeypackage com.android.documentsui; 189e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 1954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.app.ActionBar; 2054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.app.ActionBar.OnNavigationListener; 219e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.app.Activity; 229fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkeyimport android.app.Fragment; 239e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.app.FragmentManager; 24be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkeyimport android.content.ClipData; 2554ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkeyimport android.content.ComponentName; 26be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkeyimport android.content.ContentResolver; 2720d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkeyimport android.content.ContentValues; 289e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.content.Intent; 2954ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkeyimport android.content.pm.ResolveInfo; 3054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.database.Cursor; 31bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.graphics.drawable.ColorDrawable; 329e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.net.Uri; 339e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.os.Bundle; 34a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkeyimport android.provider.DocumentsContract; 3554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.provider.DocumentsContract.DocumentColumns; 36bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.support.v4.app.ActionBarDrawerToggle; 37bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.support.v4.view.GravityCompat; 38bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.support.v4.widget.DrawerLayout; 39bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.support.v4.widget.DrawerLayout.DrawerListener; 409e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.util.Log; 419e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.view.LayoutInflater; 4254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.view.Menu; 4354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.view.MenuItem; 449e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.view.View; 459e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeyimport android.view.ViewGroup; 4654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.widget.BaseAdapter; 47bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.widget.SearchView; 48b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkeyimport android.widget.SearchView.OnCloseListener; 49bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkeyimport android.widget.SearchView.OnQueryTextListener; 5054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkeyimport android.widget.TextView; 517e258b31e70464bb6d80b8b42f0cef8e4417bd6aJeff Sharkeyimport android.widget.Toast; 529e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 53ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport com.android.documentsui.model.Document; 54b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkeyimport com.android.documentsui.model.DocumentStack; 55ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkeyimport com.android.documentsui.model.Root; 5620d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkey 570c2d31bfa113c2848620ac05c916802410b71da1Jeff Sharkeyimport java.io.FileNotFoundException; 58be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkeyimport java.util.Arrays; 59be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkeyimport java.util.List; 60be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey 619e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkeypublic class DocumentsActivity extends Activity { 62ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public static final String TAG = "Documents"; 639e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 64b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey public static final int ACTION_OPEN = 1; 65b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey public static final int ACTION_CREATE = 2; 6654ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey public static final int ACTION_GET_CONTENT = 3; 67a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey public static final int ACTION_MANAGE = 4; 6854e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 691482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey private int mAction; 70be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey 71bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey private SearchView mSearchView; 72bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 7366516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey private View mRootsContainer; 74bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey private DrawerLayout mDrawerLayout; 75bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey private ActionBarDrawerToggle mDrawerToggle; 76bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 771482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey private final DisplayState mDisplayState = new DisplayState(); 781482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey 79b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey /** Current user navigation stack; empty implies recents. */ 80255b4a6fdb8296e95e6ee57f7155ecc0cb995650Jeff Sharkey private DocumentStack mStack = new DocumentStack(); 81b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey /** Currently active search, overriding any stack. */ 82b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey private String mCurrentSearch; 8354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 849e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey @Override 859e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey public void onCreate(Bundle icicle) { 869e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey super.onCreate(icicle); 879e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 88be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey final Intent intent = getIntent(); 89be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey final String action = intent.getAction(); 9054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey if (Intent.ACTION_OPEN_DOCUMENT.equals(action)) { 911482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey mAction = ACTION_OPEN; 9254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } else if (Intent.ACTION_CREATE_DOCUMENT.equals(action)) { 931482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey mAction = ACTION_CREATE; 9454ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } else if (Intent.ACTION_GET_CONTENT.equals(action)) { 9554ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey mAction = ACTION_GET_CONTENT; 96a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else if (Intent.ACTION_MANAGE_DOCUMENT.equals(action)) { 97a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mAction = ACTION_MANAGE; 9854ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } 9954ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey 10054ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey if (mAction == ACTION_OPEN || mAction == ACTION_GET_CONTENT) { 10154ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey mDisplayState.allowMultiple = intent.getBooleanExtra( 10254ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey Intent.EXTRA_ALLOW_MULTIPLE, false); 103be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } 104be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey 105a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey if (mAction == ACTION_MANAGE) { 106a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDisplayState.acceptMimes = new String[] { "*/*" }; 107a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) { 108ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey mDisplayState.acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES); 109be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } else { 110ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey mDisplayState.acceptMimes = new String[] { intent.getType() }; 11154e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 11254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 11354ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey mDisplayState.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false); 1141482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey 1159e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey setResult(Activity.RESULT_CANCELED); 11654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey setContentView(R.layout.activity); 11754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 1181482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey if (mAction == ACTION_CREATE) { 11954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final String mimeType = getIntent().getType(); 12054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE); 12154e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey SaveFragment.show(getFragmentManager(), mimeType, title); 12254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 123bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 12454ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey if (mAction == ACTION_GET_CONTENT) { 12554ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey final Intent moreApps = new Intent(getIntent()); 12654ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey moreApps.setComponent(null); 12754ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey moreApps.setPackage(null); 12854ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey RootsFragment.show(getFragmentManager(), moreApps); 129a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else if (mAction == ACTION_OPEN || mAction == ACTION_CREATE) { 13054ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey RootsFragment.show(getFragmentManager(), null); 13154ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } 13266516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey 133a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey if (mAction == ACTION_MANAGE) { 134a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDisplayState.sortOrder = DisplayState.SORT_ORDER_DATE; 135a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } 136a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 13766516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey mRootsContainer = findViewById(R.id.container_roots); 13866516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey 139bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 140bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 141bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 142bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close); 143bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 144bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerLayout.setDrawerListener(mDrawerListener); 145bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 146bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 147a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey if (mAction == ACTION_MANAGE) { 148a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 149a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 150a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final Uri rootUri = intent.getData(); 151a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final String authority = rootUri.getAuthority(); 152a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final String rootId = DocumentsContract.getRootId(rootUri); 153a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 154a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final Root root = RootsCache.findRoot(this, authority, rootId); 155a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey if (root != null) { 156a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey onRootPicked(root, true); 157a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else { 158a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey Log.w(TAG, "Failed to find root: " + rootUri); 159a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey finish(); 160a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } 161a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 162a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else { 163a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDrawerLayout.openDrawer(mRootsContainer); 164a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 165a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey // Restore last stack for calling package 166a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey // TODO: move into async loader 167a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final String packageName = getCallingPackage(); 168a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final Cursor cursor = getContentResolver() 169a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey .query(RecentsProvider.buildResume(packageName), null, null, null, null); 170a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey try { 171a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey if (cursor.moveToFirst()) { 172a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final String raw = cursor.getString( 173a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey cursor.getColumnIndex(RecentsProvider.COL_PATH)); 174a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mStack = DocumentStack.deserialize(getContentResolver(), raw); 175a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } 176a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } catch (FileNotFoundException e) { 177a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey Log.w(TAG, "Failed to resume", e); 178a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } finally { 179a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey cursor.close(); 180dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 181a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 182a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey onCurrentDirectoryChanged(); 183dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 184a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } 185dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 186a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey @Override 187a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey public void onStart() { 188a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey super.onStart(); 189a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 190a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey if (mAction == ACTION_MANAGE) { 191a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDisplayState.showSize = true; 192a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else { 193a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDisplayState.showSize = SettingsActivity.getDisplayFileSize(this); 194a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } 195bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 196bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 197bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey private DrawerListener mDrawerListener = new DrawerListener() { 198bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 199bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public void onDrawerSlide(View drawerView, float slideOffset) { 200bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.onDrawerSlide(drawerView, slideOffset); 201bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 202bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 203bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 204bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public void onDrawerOpened(View drawerView) { 205bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.onDrawerOpened(drawerView); 206bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey updateActionBar(); 207bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 208bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 209bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 210bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public void onDrawerClosed(View drawerView) { 211bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.onDrawerClosed(drawerView); 212bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey updateActionBar(); 213bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 214bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 215bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 216bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public void onDrawerStateChanged(int newState) { 217bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.onDrawerStateChanged(newState); 218bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 219bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey }; 220bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 221bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 222bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey protected void onPostCreate(Bundle savedInstanceState) { 223bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey super.onPostCreate(savedInstanceState); 224bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.syncState(); 2259e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey } 2269e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 22754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public void updateActionBar() { 22854e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final ActionBar actionBar = getActionBar(); 2299e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 230bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey actionBar.setDisplayShowHomeEnabled(true); 2319e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 23266516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey if (mDrawerLayout.isDrawerOpen(mRootsContainer)) { 23354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 234bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey actionBar.setIcon(new ColorDrawable()); 23554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 23654ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey if (mAction == ACTION_OPEN || mAction == ACTION_GET_CONTENT) { 23754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey actionBar.setTitle(R.string.title_open); 2381482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey } else if (mAction == ACTION_CREATE) { 23954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey actionBar.setTitle(R.string.title_save); 24054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 241bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 242a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey actionBar.setDisplayHomeAsUpEnabled(true); 243a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDrawerToggle.setDrawerIndicatorEnabled(true); 244a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 245bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } else { 246dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final Root root = getCurrentRoot(); 247dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey actionBar.setIcon(root != null ? root.icon : null); 248ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 249b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (root.isRecents) { 250ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 251ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey actionBar.setTitle(root.title); 252ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } else { 253ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 254ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey actionBar.setTitle(null); 255ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey actionBar.setListNavigationCallbacks(mSortAdapter, mSortListener); 256ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey actionBar.setSelectedNavigationItem(mDisplayState.sortOrder); 257ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 258bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 259dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey if (mStack.size() > 1) { 260a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey actionBar.setDisplayHomeAsUpEnabled(true); 261a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey mDrawerToggle.setDrawerIndicatorEnabled(false); 262a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey } else if (mAction == ACTION_MANAGE) { 263a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey actionBar.setDisplayHomeAsUpEnabled(false); 264bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.setDrawerIndicatorEnabled(false); 265bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } else { 266a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey actionBar.setDisplayHomeAsUpEnabled(true); 267bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mDrawerToggle.setDrawerIndicatorEnabled(true); 268bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 2699e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey } 27054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 2719e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 27254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey @Override 27354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public boolean onCreateOptionsMenu(Menu menu) { 27454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey super.onCreateOptionsMenu(menu); 27554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey getMenuInflater().inflate(R.menu.activity, menu); 276bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 277bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey final MenuItem searchMenu = menu.findItem(R.id.menu_search); 278bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mSearchView = (SearchView) searchMenu.getActionView(); 279bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mSearchView.setOnQueryTextListener(new OnQueryTextListener() { 280bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 281bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public boolean onQueryTextSubmit(String query) { 282b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey mCurrentSearch = query; 2839fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onCurrentDirectoryChanged(); 284bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey mSearchView.setIconified(true); 285bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return true; 286bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 287bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 288bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 289bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public boolean onQueryTextChange(String newText) { 290bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return false; 291bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 292bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey }); 293bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 294b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey mSearchView.setOnCloseListener(new OnCloseListener() { 295b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey @Override 296b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey public boolean onClose() { 297b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey mCurrentSearch = null; 2989fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onCurrentDirectoryChanged(); 299b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey return false; 300b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 301b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey }); 302b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey 30354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey return true; 30454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 30554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 30654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey @Override 30754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public boolean onPrepareOptionsMenu(Menu menu) { 30854e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey super.onPrepareOptionsMenu(menu); 30954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 3109fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey final FragmentManager fm = getFragmentManager(); 311dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final Document cwd = getCurrentDirectory(); 312dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 31354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final MenuItem createDir = menu.findItem(R.id.menu_create_dir); 314bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey final MenuItem search = menu.findItem(R.id.menu_search); 3159fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey final MenuItem grid = menu.findItem(R.id.menu_grid); 3169fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey final MenuItem list = menu.findItem(R.id.menu_list); 317a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey final MenuItem settings = menu.findItem(R.id.menu_settings); 318dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 3199fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey grid.setVisible(mDisplayState.mode != DisplayState.MODE_GRID); 3209fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey list.setVisible(mDisplayState.mode != DisplayState.MODE_LIST); 3219fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey 3229fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey final boolean searchVisible; 323dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey if (mAction == ACTION_CREATE) { 3249fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey createDir.setVisible(cwd != null && cwd.isCreateSupported()); 3259fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey searchVisible = false; 3269fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey 3279fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey // No display options in recent directories 3289fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey if (cwd == null) { 3299fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey grid.setVisible(false); 3309fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey list.setVisible(false); 3319fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } 3329fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey 333dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey SaveFragment.get(fm).setSaveEnabled(cwd != null && cwd.isCreateSupported()); 3349fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } else { 3359fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey createDir.setVisible(false); 3369fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey searchVisible = cwd != null && cwd.isSearchSupported(); 337dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 338bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 3399fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey // TODO: close any search in-progress when hiding 3409fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey search.setVisible(searchVisible); 341b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey 342a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey settings.setVisible(mAction != ACTION_MANAGE); 343a5599ef636e37cb0b6474349936999be1afe6987Jeff Sharkey 34454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey return true; 3459e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey } 3469e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 34754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey @Override 34854e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public boolean onOptionsItemSelected(MenuItem item) { 349bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey if (mDrawerToggle.onOptionsItemSelected(item)) { 350bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return true; 351bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 352bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 35354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final int id = item.getItemId(); 35454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey if (id == android.R.id.home) { 355dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey onBackPressed(); 356bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return true; 35754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } else if (id == R.id.menu_create_dir) { 35820d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkey CreateDirectoryFragment.show(getFragmentManager()); 359bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return true; 360bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } else if (id == R.id.menu_search) { 361bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return false; 362b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else if (id == R.id.menu_grid) { 363b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey mDisplayState.mode = DisplayState.MODE_GRID; 364b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey updateDisplayState(); 365b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey invalidateOptionsMenu(); 366b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey return true; 367b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else if (id == R.id.menu_list) { 368b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey mDisplayState.mode = DisplayState.MODE_LIST; 369b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey updateDisplayState(); 370b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey invalidateOptionsMenu(); 371b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey return true; 3729fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } else if (id == R.id.menu_settings) { 3739fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey startActivity(new Intent(this, SettingsActivity.class)); 3749fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey return true; 375b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else { 376b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey return super.onOptionsItemSelected(item); 37754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 37854e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 37954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 380dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey @Override 381dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey public void onBackPressed() { 382dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final int size = mStack.size(); 383dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey if (size > 1) { 384dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey mStack.pop(); 3859fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onCurrentDirectoryChanged(); 38666516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey } else if (size == 1 && !mDrawerLayout.isDrawerOpen(mRootsContainer)) { 387dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey // TODO: open root drawer once we can capture back key 388dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey super.onBackPressed(); 389dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } else { 390dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey super.onBackPressed(); 39154e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 392dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 39354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 394bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey // TODO: support additional sort orders 395bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey private BaseAdapter mSortAdapter = new BaseAdapter() { 39654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey @Override 39754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public int getCount() { 3989fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey return mDisplayState.showSize ? 3 : 2; 39954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 4009e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 40154e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey @Override 40254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public Object getItem(int position) { 403bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey switch (position) { 404bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey case 0: 405bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return getText(R.string.sort_name); 406bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey case 1: 407bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return getText(R.string.sort_date); 4089fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey case 2: 4099fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey return getText(R.string.sort_size); 410bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey default: 411bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return null; 412bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 41354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 4149e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 41554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey @Override 41654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public long getItemId(int position) { 417bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return position; 4189e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey } 4199e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 4209e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey @Override 42154e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public View getView(int position, View convertView, ViewGroup parent) { 42254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey if (convertView == null) { 42354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey convertView = LayoutInflater.from(parent.getContext()) 424bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey .inflate(R.layout.item_title, parent, false); 425bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 426bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 427bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey final TextView title = (TextView) convertView.findViewById(android.R.id.title); 428bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey final TextView summary = (TextView) convertView.findViewById(android.R.id.summary); 429bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 430dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final Document cwd = getCurrentDirectory(); 431dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey if (cwd != null) { 432dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey title.setText(cwd.displayName); 433bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } else { 434b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey // No directory means recents 435b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey title.setText(R.string.root_recent); 436bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 437bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 438bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey summary.setText((String) getItem(position)); 439bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 440bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey return convertView; 441bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey } 442bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey 443bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey @Override 444bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey public View getDropDownView(int position, View convertView, ViewGroup parent) { 445bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey if (convertView == null) { 446bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey convertView = LayoutInflater.from(parent.getContext()) 44754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey .inflate(android.R.layout.simple_dropdown_item_1line, parent, false); 4489e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey } 4499e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 45054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1); 451bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey text1.setText((String) getItem(position)); 4529e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 45354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey return convertView; 4549e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey } 45554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey }; 4569e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey 457bc2971d2499f5bf5534ced7296ece630ca902738Jeff Sharkey private OnNavigationListener mSortListener = new OnNavigationListener() { 4589e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey @Override 45954e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public boolean onNavigationItemSelected(int itemPosition, long itemId) { 460ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey mDisplayState.sortOrder = itemPosition; 461b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey updateDisplayState(); 46254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey return true; 46354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 46454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey }; 46554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 466dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey public Root getCurrentRoot() { 467b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey final Document cwd = getCurrentDirectory(); 468b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (cwd != null) { 469b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey return RootsCache.findRoot(this, cwd); 470b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else { 471b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey return RootsCache.getRecentsRoot(this); 472b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 473dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 474dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 475dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey public Document getCurrentDirectory() { 476dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey return mStack.peek(); 477dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 478dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 4791482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey public DisplayState getDisplayState() { 4801482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey return mDisplayState; 4811482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey } 4821482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey 4839fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey private void onCurrentDirectoryChanged() { 484dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final FragmentManager fm = getFragmentManager(); 485dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final Document cwd = getCurrentDirectory(); 4869fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey 487b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (cwd == null) { 488b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey // No directory means recents 489b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (mAction == ACTION_CREATE) { 490b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey RecentsCreateFragment.show(fm); 491b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else { 492b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey DirectoryFragment.showRecentsOpen(fm); 493b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 494b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else { 495b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (mCurrentSearch != null) { 496b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey // Ongoing search 497b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey DirectoryFragment.showSearch(fm, cwd.uri, mCurrentSearch); 498b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else { 499b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey // Normal boring directory 500b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey DirectoryFragment.showNormal(fm, cwd.uri); 501b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 50254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 503b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey 5049fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey // Forget any replacement target 5059fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey if (mAction == ACTION_CREATE) { 5069fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey final SaveFragment save = SaveFragment.get(fm); 5079fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey if (save != null) { 5089fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey save.setReplaceTarget(null); 5099fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } 5109fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } 5119fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey 512dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey updateActionBar(); 51354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey invalidateOptionsMenu(); 514dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey dumpStack(); 51554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 51654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 517b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey private void updateDisplayState() { 518b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey // TODO: handle multiple directory stacks on tablets 519b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey DirectoryFragment.get(getFragmentManager()).updateDisplayState(); 520b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 521b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey 522b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey public void onStackPicked(DocumentStack stack) { 523b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey mStack = stack; 5249fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onCurrentDirectoryChanged(); 525b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 526b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey 52766516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey public void onRootPicked(Root root, boolean closeDrawer) { 528ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey // Clear entire backstack and start in new root 529ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey mStack.clear(); 530b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey 531b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (!root.isRecents) { 5320c2d31bfa113c2848620ac05c916802410b71da1Jeff Sharkey try { 5330c2d31bfa113c2848620ac05c916802410b71da1Jeff Sharkey onDocumentPicked(Document.fromRoot(getContentResolver(), root)); 5340c2d31bfa113c2848620ac05c916802410b71da1Jeff Sharkey } catch (FileNotFoundException e) { 5350c2d31bfa113c2848620ac05c916802410b71da1Jeff Sharkey } 536b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } else { 5379fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onCurrentDirectoryChanged(); 538b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey } 53966516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey 54066516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey if (closeDrawer) { 54166516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey mDrawerLayout.closeDrawers(); 54266516697a29cf00d93893a1011d3befc7c1ee37fJeff Sharkey } 543ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey } 544ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey 54554ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey public void onAppPicked(ResolveInfo info) { 54654ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey final Intent intent = new Intent(getIntent()); 54754ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 54854ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey intent.setComponent(new ComponentName( 54954ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey info.activityInfo.applicationInfo.packageName, info.activityInfo.name)); 55054ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey startActivity(intent); 55154ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey finish(); 55254ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } 55354ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey 55454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey public void onDocumentPicked(Document doc) { 55554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final FragmentManager fm = getFragmentManager(); 556b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey if (doc.isDirectory()) { 557dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey mStack.push(doc); 5589fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onCurrentDirectoryChanged(); 55954ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } else if (mAction == ACTION_OPEN || mAction == ACTION_GET_CONTENT) { 56054e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey // Explicit file picked, return 56154e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey onFinished(doc.uri); 5621482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey } else if (mAction == ACTION_CREATE) { 5639fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey // Replace selected file 5649fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey SaveFragment.get(fm).setReplaceTarget(doc); 56554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 56654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 56754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 568be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey public void onDocumentsPicked(List<Document> docs) { 569be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey final int size = docs.size(); 570be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey final Uri[] uris = new Uri[size]; 571be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey for (int i = 0; i < size; i++) { 572be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey uris[i] = docs.get(i).uri; 573be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } 574be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey onFinished(uris); 575be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } 576be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey 5779fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey public void onSaveRequested(Document replaceTarget) { 5789fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey onFinished(replaceTarget.uri); 5799fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } 58092d7e697a864a3e18bef4ef256bb3eb339a66b4eJeff Sharkey 5819fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey public void onSaveRequested(String mimeType, String displayName) { 58220d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkey final ContentValues values = new ContentValues(); 58320d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkey values.put(DocumentColumns.MIME_TYPE, mimeType); 58420d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkey values.put(DocumentColumns.DISPLAY_NAME, displayName); 58520d96d8aff2193d548977e23ce5158657cac94e0Jeff Sharkey 586dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final Document cwd = getCurrentDirectory(); 587dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final Uri childUri = getContentResolver().insert(cwd.uri, values); 588dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey if (childUri != null) { 589dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey onFinished(childUri); 5907e258b31e70464bb6d80b8b42f0cef8e4417bd6aJeff Sharkey } else { 5917e258b31e70464bb6d80b8b42f0cef8e4417bd6aJeff Sharkey Toast.makeText(this, R.string.save_error, Toast.LENGTH_SHORT).show(); 5927e258b31e70464bb6d80b8b42f0cef8e4417bd6aJeff Sharkey } 59354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 59454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 595be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey private void onFinished(Uri... uris) { 596be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey Log.d(TAG, "onFinished() " + Arrays.toString(uris)); 59754e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 598dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final ContentResolver resolver = getContentResolver(); 599dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final ContentValues values = new ContentValues(); 600dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 601b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey final String rawStack = DocumentStack.serialize(mStack); 602dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey if (mAction == ACTION_CREATE) { 603dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey // Remember stack for last create 604dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey values.clear(); 605b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey values.put(RecentsProvider.COL_PATH, rawStack); 606dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey resolver.insert(RecentsProvider.buildRecentCreate(), values); 607dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 60854ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } else if (mAction == ACTION_OPEN || mAction == ACTION_GET_CONTENT) { 609dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey // Remember opened items 610dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey for (Uri uri : uris) { 611dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey values.clear(); 612dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey values.put(RecentsProvider.COL_URI, uri.toString()); 613dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey resolver.insert(RecentsProvider.buildRecentOpen(), values); 614dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 615dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 616dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 617dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey // Remember location for next app launch 618dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey final String packageName = getCallingPackage(); 619dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey values.clear(); 620b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey values.put(RecentsProvider.COL_PATH, rawStack); 621dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey resolver.insert(RecentsProvider.buildResume(packageName), values); 622dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey 62354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey final Intent intent = new Intent(); 624be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey if (uris.length == 1) { 625be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey intent.setData(uris[0]); 626be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } else if (uris.length > 1) { 627ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey final ClipData clipData = new ClipData( 628ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey null, mDisplayState.acceptMimes, new ClipData.Item(uris[0])); 629be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey for (int i = 1; i < uris.length; i++) { 630be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey clipData.addItem(new ClipData.Item(uris[i])); 631be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } 632be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey intent.setClipData(clipData); 633be8b12e687bd10a526b1f54c2d8a52abdad15d85Jeff Sharkey } 63454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 63554ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey if (mAction == ACTION_GET_CONTENT) { 63654ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 63754ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } else { 63854ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION 63954ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey | Intent.FLAG_GRANT_WRITE_URI_PERMISSION 64054ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey | Intent.FLAG_PERSIST_GRANT_URI_PERMISSION); 64154ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey } 64254e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 64354e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey setResult(Activity.RESULT_OK, intent); 64454e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey finish(); 64554e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey } 64654e55b740fef1be654c3959aee41ef5ddfa61293Jeff Sharkey 6471482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey public static class DisplayState { 648ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public int mode = MODE_LIST; 649ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public String[] acceptMimes; 650ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public int sortOrder = SORT_ORDER_NAME; 651ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public boolean allowMultiple = false; 652b156f4bf8cdfe475a7116b627d84a281e1a281b7Jeff Sharkey public boolean showSize = false; 65354ca29a5b94c2edf461c5433825d4ae17469fd7cJeff Sharkey public boolean localOnly = false; 6541482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey 6551482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey public static final int MODE_LIST = 0; 6561482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey public static final int MODE_GRID = 1; 6571482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey 658ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public static final int SORT_ORDER_NAME = 0; 659ef7184a1aa0be5d496a5cb495a0f9e11f342af44Jeff Sharkey public static final int SORT_ORDER_DATE = 1; 6609fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey public static final int SORT_ORDER_SIZE = 2; 6611482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey } 6621482789374fb8da3abea8f6f4f272a67205b95dbJeff Sharkey 663dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey private void dumpStack() { 664dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey Log.d(TAG, "Current stack:"); 665dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey for (Document doc : mStack) { 666dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey Log.d(TAG, "--> " + doc); 667dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 668dc2963aecaf38bf53d6de82957412a486049c207Jeff Sharkey } 6699fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey 6709fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey public static DocumentsActivity get(Fragment fragment) { 6719fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey return (DocumentsActivity) fragment.getActivity(); 6729fb567b59112f99e64e0bff6f343188331bad28dJeff Sharkey } 6739e0036ed7d3260d79cc5f9ffd8e3bbe760699924Jeff Sharkey} 674