123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan/* 223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * Copyright (C) 2017 The Android Open Source Project 323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * 423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * Licensed under the Apache License, Version 2.0 (the "License"); 523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * you may not use this file except in compliance with the License. 623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * You may obtain a copy of the License at 723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * 823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * http://www.apache.org/licenses/LICENSE-2.0 923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * 1023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * Unless required by applicable law or agreed to in writing, software 1123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * distributed under the License is distributed on an "AS IS" BASIS, 1223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * See the License for the specific language governing permissions and 1423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * limitations under the License. 1523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan */ 1623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 1723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanpackage com.android.documentsui.picker; 1823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 1923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.app.AlertDialog; 2023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.app.Dialog; 2123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.app.DialogFragment; 2223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.app.Fragment; 2323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.app.FragmentManager; 2423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.app.FragmentTransaction; 2523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.content.DialogInterface; 2623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport android.os.Bundle; 2723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 2823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport com.android.documentsui.R; 2923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport com.android.documentsui.base.DocumentInfo; 3023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanimport com.android.documentsui.base.Shared; 3123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 3223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan/** 3323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan * Used to confirm with user that it's OK to overwrite an existing file. 3423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan */ 3523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tanpublic class OverwriteConfirmFragment extends DialogFragment { 3623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 3723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan private static final String TAG = "OverwriteConfirmFragment"; 3823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 3923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan private ActionHandler<PickActivity> mActions; 4023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan private DocumentInfo mOverwriteTarget; 4123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 4223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan @Override 4323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan public void onActivityCreated(Bundle savedInstanceState) { 4423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan super.onActivityCreated(savedInstanceState); 4523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 4623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mActions = ((PickActivity) getActivity()).getInjector().actions; 4723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan } 4823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 4923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan @Override 5023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan public Dialog onCreateDialog(Bundle savedInstanceState) { 5123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan Bundle arg = (getArguments() != null) ? getArguments() : savedInstanceState; 5223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 5323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mOverwriteTarget = arg.getParcelable(Shared.EXTRA_DOC); 5423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 5523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 5623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan final String message = String.format( 5723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan getString(R.string.overwrite_file_confirmation_message), 5823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mOverwriteTarget.displayName); 5923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan builder.setMessage(message); 6023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan builder.setPositiveButton( 6123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan android.R.string.ok, 6223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan (DialogInterface dialog, int id) -> 6323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan mActions.finishPicking(mOverwriteTarget.derivedUri)); 6423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan builder.setNegativeButton(android.R.string.cancel, null); 6523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 6623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan return builder.create(); 6723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan } 6823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 6923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan @Override 7023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan public void onSaveInstanceState(Bundle outState) { 7123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan super.onSaveInstanceState(outState); 7223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 7323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan outState.putParcelable(Shared.EXTRA_DOC, mOverwriteTarget); 7423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan } 7523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 7623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan public static void show(FragmentManager fm, DocumentInfo overwriteTarget) { 7723ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan Bundle arg = new Bundle(); 7823ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan arg.putParcelable(Shared.EXTRA_DOC, overwriteTarget); 7923ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan 8023ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan FragmentTransaction ft = fm.beginTransaction(); 8123ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan Fragment f = new OverwriteConfirmFragment(); 8223ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan f.setArguments(arg); 8323ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan ft.add(f, TAG); 8423ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan ft.commitAllowingStateLoss(); 8523ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan } 8623ac60cd2b1beb59b6cd760b91c7e1b1f7e8fe49Garfield Tan} 87