blob: 9593844f37ffdebbabf4d4de1d0131eb0e074ddd [file] [log] [blame]
/*
* Copyright (C) 2017 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.inspector;
import static androidx.core.util.Preconditions.checkArgument;
import android.text.Spannable;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
/**
* Selects all or part of a textview.
*/
public final class HeaderTextSelector implements ActionMode.Callback {
private final TextView mText;
private final Selector mSelector;
public HeaderTextSelector(TextView text, Selector selector) {
checkArgument(text != null);
checkArgument(selector != null);
mText = text;
mSelector = selector;
}
// An action mode is created when the user selects text. This method is called where
// we force it to select only the filename in the header. Meaning the name of the file would
// be selected but the extension would not.
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
CharSequence value = mText.getText();
if (value instanceof Spannable) {
mSelector.select((Spannable) value, 0, getLengthOfFilename(value));
}
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {}
/**
* Gets the length of the inspector header for selection.
*
* Example:
* filename.txt returns the end index needed to select "filename".
*
* @return the index of the last character in the filename
*/
private static int getLengthOfFilename(CharSequence text) {
String title = text.toString();
if (title != null) {
int index = title.indexOf('.');
if (index > 0) {
return index;
}
}
return text.length();
}
public interface Selector {
void select(Spannable text, int start, int stop);
}
}