package net.rdrei.android.dirchooser; import android.annotation.SuppressLint; import android.app.ActionBar; import android.app.FragmentManager; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; /** * Let's the user choose a directory on the storage device. The selected folder * will be sent back to the starting activity as an activity result. */ public class DirectoryChooserActivity extends AppCompatActivity implements DirectoryChooserFragment.OnFragmentInteractionListener { public static final String EXTRA_CONFIG = "config"; public static final String RESULT_SELECTED_DIR = "selected_dir"; public static final int RESULT_CODE_DIR_SELECTED = 1; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupActionBar(); setContentView(R.layout.directory_chooser_activity); final DirectoryChooserConfig config = getIntent().getParcelableExtra(EXTRA_CONFIG); if (config == null) { throw new IllegalArgumentException( "You must provide EXTRA_CONFIG when starting the DirectoryChooserActivity."); } if (savedInstanceState == null) { final FragmentManager fragmentManager = getFragmentManager(); final DirectoryChooserFragment fragment = DirectoryChooserFragment.newInstance(config); fragmentManager.beginTransaction() .add(R.id.main, fragment) .commit(); } } /* package */void setupActionBar() { // there might not be an ActionBar, for example when started in Theme.Holo.Dialog.NoActionBar theme @SuppressLint("AppCompatMethod") final ActionBar actionBar = getActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } } @Override public boolean onOptionsItemSelected(MenuItem item) { final int itemId = item.getItemId(); if (itemId == android.R.id.home) { setResult(RESULT_CANCELED); finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void onSelectDirectory(@NonNull String path) { final Intent intent = new Intent(); intent.putExtra(RESULT_SELECTED_DIR, path); setResult(RESULT_CODE_DIR_SELECTED, intent); finish(); } @Override public void onCancelChooser() { setResult(RESULT_CANCELED); finish(); } }