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