Combines related columns and constants onto the same class so they are easier to discover. Move back to surfacing roots with columns so they are consistent with documents. Advanced roots are represented with a flag instead of distinct types. Flags to indicate supporting of well-known media types, instead of arbitrary an MIME filter. Reintroduce well-formed rootId to support recents. Always use the expanded version of "documents" in constants, methods, and argument names. Refactor DocumentProvider method names to clearly distinguish if a single item or multiple could be returned, and of which type. Add documentation to clearly define which methods have already been overridden. Bug: 10567506, 10567557 Change-Id: I981f26ab82f2b520a19aa1ce66f659de50d7fac0
145 lines
4.9 KiB
Java
145 lines
4.9 KiB
Java
/*
|
|
* Copyright (C) 2013 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.documentsui;
|
|
|
|
import android.app.Fragment;
|
|
import android.app.FragmentManager;
|
|
import android.app.FragmentTransaction;
|
|
import android.content.Context;
|
|
import android.os.Bundle;
|
|
import android.text.Editable;
|
|
import android.text.TextWatcher;
|
|
import android.util.Log;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.Button;
|
|
import android.widget.EditText;
|
|
import android.widget.ImageView;
|
|
|
|
import com.android.documentsui.model.DocumentInfo;
|
|
|
|
/**
|
|
* Display document title editor and save button.
|
|
*/
|
|
public class SaveFragment extends Fragment {
|
|
public static final String TAG = "SaveFragment";
|
|
|
|
private DocumentInfo mReplaceTarget;
|
|
private EditText mDisplayName;
|
|
private Button mSave;
|
|
private boolean mIgnoreNextEdit;
|
|
|
|
private static final String EXTRA_MIME_TYPE = "mime_type";
|
|
private static final String EXTRA_DISPLAY_NAME = "display_name";
|
|
|
|
public static void show(FragmentManager fm, String mimeType, String displayName) {
|
|
final Bundle args = new Bundle();
|
|
args.putString(EXTRA_MIME_TYPE, mimeType);
|
|
args.putString(EXTRA_DISPLAY_NAME, displayName);
|
|
|
|
final SaveFragment fragment = new SaveFragment();
|
|
fragment.setArguments(args);
|
|
|
|
final FragmentTransaction ft = fm.beginTransaction();
|
|
ft.replace(R.id.container_save, fragment, TAG);
|
|
ft.commitAllowingStateLoss();
|
|
}
|
|
|
|
public static SaveFragment get(FragmentManager fm) {
|
|
return (SaveFragment) fm.findFragmentByTag(TAG);
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(
|
|
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
final Context context = inflater.getContext();
|
|
final RootsCache roots = DocumentsApplication.getRootsCache(context);
|
|
|
|
final View view = inflater.inflate(R.layout.fragment_save, container, false);
|
|
|
|
final ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
|
|
icon.setImageDrawable(
|
|
RootsCache.resolveDocumentIcon(context, getArguments().getString(EXTRA_MIME_TYPE)));
|
|
|
|
mDisplayName = (EditText) view.findViewById(android.R.id.title);
|
|
mDisplayName.addTextChangedListener(mDisplayNameWatcher);
|
|
mDisplayName.setText(getArguments().getString(EXTRA_DISPLAY_NAME));
|
|
|
|
mSave = (Button) view.findViewById(android.R.id.button1);
|
|
mSave.setOnClickListener(mSaveListener);
|
|
mSave.setEnabled(false);
|
|
|
|
return view;
|
|
}
|
|
|
|
private TextWatcher mDisplayNameWatcher = new TextWatcher() {
|
|
@Override
|
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
if (mIgnoreNextEdit) {
|
|
mIgnoreNextEdit = false;
|
|
} else {
|
|
Log.d(TAG, "onTextChanged!");
|
|
mReplaceTarget = null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
// ignored
|
|
}
|
|
|
|
@Override
|
|
public void afterTextChanged(Editable s) {
|
|
// ignored
|
|
}
|
|
};
|
|
|
|
private View.OnClickListener mSaveListener = new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
final DocumentsActivity activity = DocumentsActivity.get(SaveFragment.this);
|
|
if (mReplaceTarget != null) {
|
|
activity.onSaveRequested(mReplaceTarget);
|
|
} else {
|
|
final String mimeType = getArguments().getString(EXTRA_MIME_TYPE);
|
|
final String displayName = mDisplayName.getText().toString();
|
|
activity.onSaveRequested(mimeType, displayName);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Set given document as target for in-place writing if user hits save
|
|
* without changing the filename. Can be set to {@code null} if user
|
|
* navigates outside the target directory.
|
|
*/
|
|
public void setReplaceTarget(DocumentInfo replaceTarget) {
|
|
mReplaceTarget = replaceTarget;
|
|
|
|
if (mReplaceTarget != null) {
|
|
getArguments().putString(EXTRA_DISPLAY_NAME, replaceTarget.displayName);
|
|
mIgnoreNextEdit = true;
|
|
mDisplayName.setText(replaceTarget.displayName);
|
|
}
|
|
}
|
|
|
|
public void setSaveEnabled(boolean enabled) {
|
|
mSave.setEnabled(enabled);
|
|
}
|
|
}
|