121de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey/* 221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * Copyright (C) 2014 The Android Open Source Project 321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * 421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * you may not use this file except in compliance with the License. 621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * You may obtain a copy of the License at 721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * 821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 921de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * 1021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * Unless required by applicable law or agreed to in writing, software 1121de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 1221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * See the License for the specific language governing permissions and 1421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * limitations under the License. 1521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey */ 1621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 1721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeypackage com.android.documentsui; 1821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 19de021abe409a293492d998d8b837ea1aee9604ffDaichi Hironoimport android.R.string; 20de021abe409a293492d998d8b837ea1aee9604ffDaichi Hironoimport android.app.Activity; 2121de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.app.Fragment; 2221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.app.FragmentManager; 2321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.app.FragmentTransaction; 2421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.os.Bundle; 2521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.text.TextUtils; 2621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.view.LayoutInflater; 2721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.view.View; 2821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.view.ViewGroup; 2921de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport android.widget.Button; 3021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 3121de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport com.android.documentsui.model.DocumentInfo; 3221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 3321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeyimport java.util.Locale; 3421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 3521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey/** 3621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey * Display pick confirmation bar, usually for selecting a directory. 3721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey */ 3821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkeypublic class PickFragment extends Fragment { 3921de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey public static final String TAG = "PickFragment"; 4021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 41e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono private int mAction; 4221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey private DocumentInfo mPickTarget; 4321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey private View mContainer; 4421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey private Button mPick; 45de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono private Button mCancel; 4621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 4721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey public static void show(FragmentManager fm) { 48e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono // Fragment can be restored by FragmentManager automatically. 49e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono if (get(fm) != null) { 50e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono return; 51e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono } 5221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 53e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono final PickFragment fragment = new PickFragment(); 5421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey final FragmentTransaction ft = fm.beginTransaction(); 5521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey ft.replace(R.id.container_save, fragment, TAG); 5621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey ft.commitAllowingStateLoss(); 5721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey } 5821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 5921de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey public static PickFragment get(FragmentManager fm) { 6021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey return (PickFragment) fm.findFragmentByTag(TAG); 6121de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey } 6221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 6321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey @Override 6421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey public View onCreateView( 6521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 6621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey mContainer = inflater.inflate(R.layout.fragment_pick, container, false); 6721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 6821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey mPick = (Button) mContainer.findViewById(android.R.id.button1); 6921de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey mPick.setOnClickListener(mPickListener); 7021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 71de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono mCancel = (Button) mContainer.findViewById(android.R.id.button2); 72de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono mCancel.setOnClickListener(mCancelListener); 73de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono 74e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono updateView(); 7521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey return mContainer; 7621de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey } 7721de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 7821de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey private View.OnClickListener mPickListener = new View.OnClickListener() { 7921de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey @Override 8021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey public void onClick(View v) { 81ef3e2cf35fbede340d5ff830b410baea8e461a94Steve McKay final DocumentsActivity activity = DocumentsActivity.get(PickFragment.this); 8221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey activity.onPickRequested(mPickTarget); 8321de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey } 8421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey }; 8521de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 86de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono private View.OnClickListener mCancelListener = new View.OnClickListener() { 87de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono @Override 88de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono public void onClick(View v) { 89de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono final BaseActivity activity = BaseActivity.get(PickFragment.this); 90de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono activity.setResult(Activity.RESULT_CANCELED); 91de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono activity.finish(); 92de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono } 93de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono }; 9421de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey 95de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono /** 96de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono * @param action Which action defined in BaseActivity.State is the picker shown for. 97de021abe409a293492d998d8b837ea1aee9604ffDaichi Hirono */ 98e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono public void setPickTarget(int action, DocumentInfo pickTarget) { 99e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mAction = action; 100e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mPickTarget = pickTarget; 101b9fbb7290b02de1ce621deaa2d28a5e42f2e0937Jeff Sharkey if (mContainer != null) { 102e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono updateView(); 103e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono } 104e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono } 105e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono 106e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono /** 107e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono * Applies the state of fragment to the view components. 108e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono */ 109e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono private void updateView() { 110e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono switch (mAction) { 111e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono case BaseActivity.State.ACTION_OPEN_TREE: 112e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mPick.setText(R.string.button_select); 113e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mCancel.setVisibility(View.GONE); 114e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono break; 115e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono case BaseActivity.State.ACTION_OPEN_COPY_DESTINATION: 116e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mPick.setText(R.string.button_copy); 117e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mCancel.setVisibility(View.VISIBLE); 118e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono break; 119e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono default: 120b9fbb7290b02de1ce621deaa2d28a5e42f2e0937Jeff Sharkey mContainer.setVisibility(View.GONE); 121e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono return; 122e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono } 123e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono 124e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono if (mPickTarget != null && ( 125e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mAction == BaseActivity.State.ACTION_OPEN_TREE || 126e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mPickTarget.isCreateSupported())) { 127e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mContainer.setVisibility(View.VISIBLE); 128e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono } else { 129e9cbfe8e5adadfbe740836d46b8a52a066316697Daichi Hirono mContainer.setVisibility(View.GONE); 13021de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey } 13121de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey } 13221de56a94668e0fda1b8bb4ee4f99a09b40d28fdJeff Sharkey} 133