Compare commits
107 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a500092625 | ||
|
05e3600504 | ||
|
0b24c89307 | ||
|
f8491fefdb | ||
|
4885aa9df6 | ||
|
0dd894a777 | ||
|
01e7a2674c | ||
|
8838fbd5a9 | ||
|
ddd99e48e5 | ||
|
b4da74dea1 | ||
|
24e7fc5904 | ||
|
6ef85c45b5 | ||
|
2c55929f9f | ||
|
e45665ece1 | ||
|
97f1be558b | ||
|
2ee5a8e904 | ||
|
c56b0f8054 | ||
|
7a6d0d3eba | ||
|
ef533e6e44 | ||
|
23d09e05c9 | ||
|
a35d95b799 | ||
|
39c7dd956c | ||
|
12c539738a | ||
|
68e8c4235a | ||
|
b7f84409db | ||
|
79d6cb6172 | ||
|
c1d658ffb1 | ||
|
a3624e6b2e | ||
|
cd20b586f1 | ||
|
02492c8d83 | ||
|
871b2cfc11 | ||
|
401814cb22 | ||
|
0269d9c210 | ||
|
46ad99aa46 | ||
|
9408fba5dd | ||
|
ebce0bd69b | ||
|
ce2c2d8b0f | ||
|
0de5a82cdf | ||
|
69f8f2b0c7 | ||
|
245b9f4230 | ||
|
3db0519ec6 | ||
|
9b7de55f55 | ||
|
66a86dc513 | ||
|
38123fd510 | ||
|
481fe94eb9 | ||
|
6a965ca560 | ||
|
a1e82b65d4 | ||
|
e399a217e5 | ||
|
68ad318388 | ||
|
1f3ad1ab12 | ||
|
2414192638 | ||
|
1cd94a5310 | ||
|
ce4d1756fb | ||
|
3234597537 | ||
|
5f77e6d7b5 | ||
|
60395106e5 | ||
|
3ee11e0bfb | ||
|
b71d27aeaa | ||
|
05e4157bed | ||
|
89673216e8 | ||
|
7a86540c60 | ||
|
b359950e34 | ||
|
614274c7d6 | ||
|
78407c292a | ||
|
4d26fa7f3d | ||
|
4b16119b53 | ||
|
bf4dcd51b8 | ||
|
e52a3cb9f5 | ||
|
5702a6c24f | ||
|
ffcd50616e | ||
|
46842a5343 | ||
|
df5a302129 | ||
|
04faa104ed | ||
|
a20f93f0f6 | ||
|
564e55385f | ||
|
2c62965a02 | ||
|
eaab21069b | ||
|
2dbab5220a | ||
|
520c4c53c0 | ||
|
2fefb3963c | ||
|
e0eb01168e | ||
|
30294f72b5 | ||
|
ed621d369e | ||
|
6507331360 | ||
|
ec4742149b | ||
|
97dd211dc2 | ||
|
fc67e5930e | ||
|
44d4a2828b | ||
|
276b831ceb | ||
|
ec5645c2a4 | ||
|
9ca7d62a8e | ||
|
28353fea8f | ||
|
ed285afadb | ||
|
3697dd51a4 | ||
|
ba0fb4ebaa | ||
|
d7a5d513c7 | ||
|
e540b8fda7 | ||
|
49f890adeb | ||
|
446a6da1fb | ||
|
474ce28737 | ||
|
fca3410f26 | ||
|
44773c2f1c | ||
|
41e9161e2b | ||
|
2d7bf9f05d | ||
|
40c9506ee2 | ||
|
b3a8539afa | ||
|
4d641485a5 |
25
.fdroid.yml
Normal file
@ -0,0 +1,25 @@
|
||||
Categories:
|
||||
- Writing
|
||||
License: GPL-3.0-or-later
|
||||
WebSite: https://github.com/adrianmalacoda/text-editor-8000
|
||||
SourceCode: https://github.com/adrianmalacoda/text-editor-8000
|
||||
IssueTracker: https://github.com/adrianmalacoda/text-editor-8000/issues
|
||||
|
||||
AutoName: Text Editor 8000
|
||||
Summary: Simple text editor
|
||||
Description: Simple, yet powerful editor for text files.
|
||||
|
||||
RepoType: git
|
||||
Repo: .
|
||||
|
||||
builds:
|
||||
- versionName: "1.20"
|
||||
versionCode: 48
|
||||
commit: HEAD
|
||||
subdir: app
|
||||
gradle: yes
|
||||
|
||||
AutoUpdateMode: None
|
||||
UpdateCheckMode: RepoManifest
|
||||
CurrentVersion: 1.20
|
||||
CurrentVersion Code: 48
|
98
.gitignore
vendored
@ -1,35 +1,63 @@
|
||||
# built application files
|
||||
*.apk
|
||||
*.ap_
|
||||
|
||||
# files for the dex VM
|
||||
*.dex
|
||||
|
||||
# Java class files
|
||||
*.class
|
||||
|
||||
# generated files
|
||||
bin/
|
||||
gen/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Eclipse project files
|
||||
.classpath
|
||||
.project
|
||||
|
||||
# Proguard folder generated by Eclipse
|
||||
proguard/
|
||||
|
||||
# Intellij project files
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# Android Studio
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/workspace.xml
|
||||
.DS_Store
|
||||
# Built application files
|
||||
*.apk
|
||||
*.ap_
|
||||
|
||||
# Files for the Dalvik VM
|
||||
*.dex
|
||||
|
||||
# Java class files
|
||||
*.class
|
||||
|
||||
# Generated files
|
||||
bin/
|
||||
gen/
|
||||
doc/
|
||||
/build
|
||||
|
||||
# Proguard folder generated by Eclipse
|
||||
proguard/
|
||||
|
||||
# Log Files
|
||||
*.log
|
||||
|
||||
# Built application files
|
||||
/*/build/
|
||||
|
||||
# Crashlytics configuations
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics-build.properties
|
||||
crashlytics.properties
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Gradle generated files
|
||||
.gradle/
|
||||
|
||||
# Signing files
|
||||
.signing/
|
||||
|
||||
# User-specific configurations
|
||||
.idea/libraries/
|
||||
.idea/workspace.xml
|
||||
.idea/tasks.xml
|
||||
.idea/.name
|
||||
.idea/compiler.xml
|
||||
.idea/copyright/profiles_settings.xml
|
||||
.idea/encodings.xml
|
||||
.idea/misc.xml
|
||||
.idea/modules.xml
|
||||
.idea/scopes/scope_settings.xml
|
||||
.idea/vcs.xml
|
||||
*.iml
|
||||
|
||||
# OS-specific files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
*~
|
||||
#*#
|
10
.gitlab-ci.yml
Normal file
@ -0,0 +1,10 @@
|
||||
image: fdroidbuild:latest
|
||||
|
||||
build-apk:
|
||||
script:
|
||||
- fdroid build
|
||||
- fdroid nightly
|
||||
artifacts:
|
||||
paths:
|
||||
- unsigned/*.apk
|
||||
- unsigned/*.tar.gz
|
23
.idea/gradle.xml
generated
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="distributionType" value="LOCAL" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleHome" value="C:\Android\android-studio\gradle\gradle-2.10" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
<option value="$PROJECT_DIR$/app-pro" />
|
||||
<option value="$PROJECT_DIR$/libraries" />
|
||||
<option value="$PROJECT_DIR$/libraries/FloatingActionButton" />
|
||||
<option value="$PROJECT_DIR$/libraries/sharedCode" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveModulePerSourceSet" value="false" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
18
README.md
@ -1,4 +1,14 @@
|
||||
turboeditor
|
||||
===========
|
||||
|
||||
simple and beatiful android file editor
|
||||
# Text Editor 8000
|
||||
Text editor for Android. Forked from [Turbo Editor](https://github.com/vmihalachi/turbo-editor) by Vlad Mihalachi.
|
||||
|
||||
Currently this fork includes a fix for hardware keyboards, as well as an updated [CommonMark](http://commonmark.org/) Markdown renderer.
|
||||
|
||||
## Notice
|
||||
This project undergoes sporadic bursts of activity. There's no timeframe for a release, and stuff gets worked on when it gets worked on.
|
||||
|
||||
The general policy is that master is always buildable and should run fine, but there's no guarantees.
|
||||
|
||||
Also, [build artifacts](https://gitlab.monarch-pass.net/malacoda/text-editor-8000/-/jobs/artifacts/master/download?job=build-apk) from master are available on the Monarch Pass GitLab. Note that as of now these builds are not signed so you'll need to sign them yourself before installing them. Use at your own risk!
|
||||
|
||||
## License
|
||||
GNU General Public License version 3, see [LICENSE](./license).
|
||||
|
@ -1,28 +0,0 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:0.5.+'
|
||||
}
|
||||
}
|
||||
apply plugin: 'android'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 18
|
||||
buildToolsVersion "18.1.0"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 18
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'com.github.gabrielemariotti.changeloglib:library:1.2.0'
|
||||
compile fileTree(dir: 'libs', include: '*.jar')
|
||||
}
|
@ -1,101 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.vmihalachi.turboeditor"
|
||||
android:versionCode="2"
|
||||
android:versionName="0.2"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="14"
|
||||
android:targetSdkVersion="18" />
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/nome_app_turbo_editor"
|
||||
android:theme="@style/AppStyle">
|
||||
|
||||
<activity
|
||||
android:name=".HomeActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
android:hardwareAccelerated="false"
|
||||
android:launchMode="singleTop"
|
||||
android:alwaysRetainTaskState="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER"/>
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<action android:name="android.intent.action.EDIT"/>
|
||||
<action android:name="android.intent.action.PICK"/>
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
|
||||
<data android:scheme="file"/>
|
||||
<data android:mimeType="text/*"/>
|
||||
<data android:pathPattern="*.txt"/>
|
||||
<data android:pathPattern="*.html"/>
|
||||
<data android:pathPattern="*.css"/>
|
||||
<data android:pathPattern="*.js"/>
|
||||
<data android:pathPattern="*.php"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name="com.vmihalachi.turboeditor.PreferenceAbout"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/aboutactivity_info_category"/>
|
||||
|
||||
<activity
|
||||
android:name="com.vmihalachi.turboeditor.SelectFileActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/open_a_file"/>
|
||||
|
||||
<meta-data
|
||||
android:name="com.sec.android.support.multiwindow"
|
||||
android:value="true"/>
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W"
|
||||
android:value="632.0dip"/>
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H"
|
||||
android:value="598.0dip"/>
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W"
|
||||
android:value="632.0dip"/>
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H"
|
||||
android:value="598.0dip"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -1,68 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 Gabriele Mariotti.
|
||||
*
|
||||
* 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.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import it.gmariotti.changelibs.library.view.ChangeLogListView;
|
||||
|
||||
/**
|
||||
* Example with Dialog
|
||||
*
|
||||
* @author Gabriele Mariotti (gabri.mariotti@gmail.com)
|
||||
*/
|
||||
public class DialogStandardFragment extends DialogFragment {
|
||||
|
||||
public DialogStandardFragment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
ChangeLogListView chgList = (ChangeLogListView) layoutInflater.inflate(R.layout.demo_changelog_fragment_dialogstandard, null);
|
||||
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.aboutactivity_changelog)
|
||||
.setView(chgList)
|
||||
.setNegativeButton(android.R.string.cancel,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
}
|
||||
)
|
||||
.setPositiveButton(R.string.vota, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final DialogInterface dialog, final int which) {
|
||||
try {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getActivity().getPackageName())));
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
})
|
||||
.create();
|
||||
|
||||
}
|
||||
}
|
@ -1,107 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.os.Bundle;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
// ...
|
||||
public class EditTextDialog extends DialogFragment implements TextView.OnEditorActionListener {
|
||||
|
||||
private EditText mEditText;
|
||||
|
||||
public static EditTextDialog newInstance(final String hint) {
|
||||
final EditTextDialog f = new EditTextDialog();
|
||||
|
||||
// Supply num input as an argument.
|
||||
final Bundle args = new Bundle();
|
||||
args.putString("hint", hint);
|
||||
f.setArguments(args);
|
||||
return f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
|
||||
final Bundle savedInstanceState) {
|
||||
|
||||
final Dialog dialog = getDialog();
|
||||
final String title = getString(R.string.codifica);
|
||||
dialog.setTitle(title);
|
||||
|
||||
final View view = inflater.inflate(R.layout.dialog_fragment_edittext, container);
|
||||
this.mEditText = (EditText) view.findViewById(android.R.id.edit);
|
||||
|
||||
// Show soft keyboard automatically
|
||||
this.mEditText.setText(getArguments().getString("hint"));
|
||||
this.mEditText.requestFocus();
|
||||
dialog.getWindow().setSoftInputMode(
|
||||
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||
this.mEditText.setOnEditorActionListener(this);
|
||||
|
||||
final Button button = (Button) view.findViewById(android.R.id.button1);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(final View v) {
|
||||
returnData();
|
||||
}
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
void returnData() {
|
||||
EditDialogListener target = (EditDialogListener) getTargetFragment();
|
||||
if (target == null) {
|
||||
target = (EditDialogListener) getActivity();
|
||||
}
|
||||
target.onFinishEditDialog(this.mEditText.getText().toString(),
|
||||
(Actions) getArguments().getSerializable("action"), getArguments().getString("hint"));
|
||||
this.dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
|
||||
if (EditorInfo.IME_ACTION_DONE == actionId) {
|
||||
returnData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public enum Actions {
|
||||
NewRemoteFolder, NewRemoteFile, NewLocalFolder, Rename, Move, EditEncoding
|
||||
}
|
||||
|
||||
public interface EditDialogListener {
|
||||
void onFinishEditDialog(String inputText, Actions action, String hint);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,980 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Canvas;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.text.Editable;
|
||||
import android.text.InputFilter;
|
||||
import android.text.Selection;
|
||||
import android.text.Spannable;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextPaint;
|
||||
import android.text.TextWatcher;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.text.style.UnderlineSpan;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.vmihalachi.turboeditor.event.ErrorOpeningFileEvent;
|
||||
import com.vmihalachi.turboeditor.event.FileSavedEvent;
|
||||
import com.vmihalachi.turboeditor.helper.PixelDipConverter;
|
||||
import com.vmihalachi.turboeditor.helper.PreferenceHelper;
|
||||
import com.vmihalachi.turboeditor.util.Patterns;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import de.greenrobot.event.EventBus;
|
||||
|
||||
public class EditorFragment extends Fragment implements EditTextDialog.EditDialogListener{
|
||||
|
||||
private static final String TAG = "A0A";
|
||||
private Editor mEditor;
|
||||
|
||||
// Editor Variables
|
||||
static boolean sWrapText;
|
||||
static boolean sColorSyntax;
|
||||
//
|
||||
private String mCurrentEncoding;
|
||||
private static String sFilePath;
|
||||
|
||||
|
||||
public static EditorFragment newInstance(String filePath) {
|
||||
EditorFragment frag = new EditorFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString("filePath", filePath);
|
||||
frag.setArguments(args);
|
||||
return frag;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
// Out custom layout
|
||||
View rootView = inflater.inflate(R.layout.fragment_editor, container, false);
|
||||
//
|
||||
mEditor = (Editor) rootView.findViewById(R.id.editor);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
//
|
||||
this.sFilePath = getArguments().getString("filePath");
|
||||
this.mCurrentEncoding = PreferenceHelper.getEncoding(getActivity());
|
||||
this.sColorSyntax = PreferenceHelper.getSyntaxHiglight(getActivity());
|
||||
this.sWrapText = PreferenceHelper.getWrapText(getActivity());
|
||||
String fileName = FilenameUtils.getName(getArguments().getString("filePath"));
|
||||
//
|
||||
getActivity().getActionBar().setTitle(fileName);
|
||||
//
|
||||
configureEditText();
|
||||
//
|
||||
try {
|
||||
final FileInputStream inputStream =
|
||||
new FileInputStream(
|
||||
new File(this.sFilePath));
|
||||
mEditor.setText(IOUtils.toString(inputStream, this.mCurrentEncoding));
|
||||
inputStream.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.getMessage(), e);
|
||||
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
|
||||
EventBus.getDefault().post(new ErrorOpeningFileEvent());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.fragment_editor, menu);
|
||||
menu.findItem(R.id.im_wrap_text).setChecked(this.sWrapText);
|
||||
menu.findItem(R.id.im_syntax_highlight).setChecked(this.sColorSyntax);
|
||||
super.onCreateOptionsMenu(menu, inflater);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int i = item.getItemId();
|
||||
if (i == R.id.im_save) {
|
||||
new SaveFile().execute();
|
||||
} else if (i == R.id.im_undo) {
|
||||
this.mEditor.onKeyShortcut(KeyEvent.KEYCODE_Z, new KeyEvent(KeyEvent.ACTION_DOWN,
|
||||
KeyEvent.KEYCODE_Z));
|
||||
} else if (i == R.id.im_redo) {
|
||||
this.mEditor.onKeyShortcut(KeyEvent.KEYCODE_Y, new KeyEvent(KeyEvent.ACTION_DOWN,
|
||||
KeyEvent.KEYCODE_Y));
|
||||
} else if (i == R.id.im_editor_encoding) {
|
||||
showEncodingDialog();
|
||||
} else if (i == R.id.im_syntax_highlight) {
|
||||
item.setChecked(!item.isChecked());
|
||||
PreferenceHelper.setSyntaxHiglight(getActivity(), item.isChecked());
|
||||
updateTextEditor();
|
||||
} else if (i == R.id.im_wrap_text) {
|
||||
item.setChecked(!item.isChecked());
|
||||
PreferenceHelper.setWrapText(getActivity(), item.isChecked());
|
||||
updateTextEditor();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
private void showEncodingDialog() {
|
||||
EditTextDialog dialogFrag = EditTextDialog.newInstance(this.mCurrentEncoding);
|
||||
dialogFrag.setTargetFragment(this, 0);
|
||||
dialogFrag.show(getFragmentManager().beginTransaction(), "encodingDialog");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onFinishEditDialog(final String inputText, final EditTextDialog.Actions action, final String hint) {
|
||||
PreferenceHelper.setEncoding(getActivity(), inputText);
|
||||
updateTextEditor();
|
||||
}
|
||||
|
||||
private void updateTextEditor() {
|
||||
final boolean countLines = PreferenceHelper.getWrapText(getActivity());
|
||||
final boolean syntaxHighlight = PreferenceHelper.getSyntaxHiglight(getActivity());
|
||||
final String encoding = PreferenceHelper.getEncoding(getActivity());
|
||||
|
||||
if (this.sWrapText != countLines) {
|
||||
this.sWrapText = countLines;
|
||||
final String s = this.mEditor.getText().toString();
|
||||
//inflateOfWrapText();
|
||||
this.mEditor.setText(s);
|
||||
configureEditText();
|
||||
}
|
||||
|
||||
if (this.sColorSyntax != syntaxHighlight) {
|
||||
this.sColorSyntax = syntaxHighlight;
|
||||
final String s = this.mEditor.getText().toString();
|
||||
//inflateOfWrapText();
|
||||
this.mEditor.setText(s);
|
||||
}
|
||||
|
||||
if (!this.mCurrentEncoding.equals(encoding)) {
|
||||
try {
|
||||
final byte[] oldText = this.mEditor.getText().toString().getBytes(this.mCurrentEncoding);
|
||||
this.mEditor.setText(new String(oldText, encoding));
|
||||
this.mCurrentEncoding = encoding;
|
||||
} catch (UnsupportedEncodingException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void configureEditText(){
|
||||
this.mEditor.setHorizontallyScrolling(!this.sWrapText);
|
||||
if (!this.sWrapText) {
|
||||
int paddingLeft = (int) PixelDipConverter.convertDpToPixel(25, getActivity());
|
||||
mEditor.setPadding(paddingLeft, 0, 0, 0);
|
||||
} else {
|
||||
int paddingLeft = (int) PixelDipConverter.convertDpToPixel(5, getActivity());
|
||||
mEditor.setPadding(paddingLeft, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
class SaveFile extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(final Void... voids) {
|
||||
try {
|
||||
FileUtils.write(new File(EditorFragment.this.sFilePath),
|
||||
EditorFragment.this.mEditor.getText(),
|
||||
EditorFragment.this.mCurrentEncoding);
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, e.getMessage(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
EventBus.getDefault().post(new FileSavedEvent(EditorFragment.this.sFilePath));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static class Editor extends EditText {
|
||||
|
||||
protected static final int
|
||||
ID_SELECT_ALL =android. R.id.selectAll,
|
||||
ID_CUT = android.R.id.cut,
|
||||
ID_COPY = android.R.id.copy,
|
||||
ID_PASTE = android.R.id.paste,
|
||||
ID_UNDO = R.id.im_undo,
|
||||
ID_REDO = R.id.im_redo;
|
||||
private static final int SYNTAX_DELAY_MILLIS =
|
||||
0;
|
||||
private static final float textSize = 16;
|
||||
private final Handler updateHandler =
|
||||
new Handler();
|
||||
private final TextPaint mPaintNumbers =
|
||||
new TextPaint();
|
||||
//private final Rect mLineBounds = new Rect();
|
||||
private final float mScale;
|
||||
private boolean modified = true;
|
||||
|
||||
/**
|
||||
* Is undo/redo being performed? This member
|
||||
* signals if an undo/redo operation is
|
||||
* currently being performed. Changes in the
|
||||
* text during undo/redo are not recorded
|
||||
* because it would mess up the undo history.
|
||||
*/
|
||||
private boolean mIsUndoOrRedo = false;
|
||||
|
||||
/**
|
||||
* The edit history.
|
||||
*/
|
||||
private EditHistory mEditHistory;
|
||||
|
||||
/**
|
||||
* The change listener.
|
||||
*/
|
||||
private EditTextChangeListener
|
||||
mChangeListener;
|
||||
|
||||
private final Runnable updateRunnable =
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
replaceTextKeepCursor(getText());
|
||||
}
|
||||
};
|
||||
|
||||
public Editor(Context context,
|
||||
AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.mScale = context.getResources()
|
||||
.getDisplayMetrics().density;
|
||||
init(context);
|
||||
}
|
||||
|
||||
// Init the class
|
||||
private void init(final Context context) {
|
||||
mEditHistory = new EditHistory();
|
||||
mChangeListener =
|
||||
new EditTextChangeListener();
|
||||
addTextChangedListener(mChangeListener);
|
||||
|
||||
this.mPaintNumbers
|
||||
.setColor(
|
||||
getTextColors().getDefaultColor());
|
||||
this.mPaintNumbers
|
||||
.setTextSize(
|
||||
textSize * this.mScale * 0.8f);
|
||||
this.mPaintNumbers.setAntiAlias(true);
|
||||
|
||||
// Syntax editor
|
||||
setFilters(new InputFilter[]{
|
||||
new InputFilter() {
|
||||
@Override
|
||||
public CharSequence filter(
|
||||
CharSequence source,
|
||||
int start,
|
||||
int end,
|
||||
Spanned dest,
|
||||
int dstart,
|
||||
int dend) {
|
||||
if (modified) {
|
||||
return autoIndent(
|
||||
source,
|
||||
start,
|
||||
end,
|
||||
dest,
|
||||
dstart,
|
||||
dend);
|
||||
}
|
||||
|
||||
return source;
|
||||
}
|
||||
}});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyShortcut(
|
||||
final int keyCode, final KeyEvent event) {
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_A:
|
||||
return onTextContextMenuItem(
|
||||
ID_SELECT_ALL);
|
||||
case KeyEvent.KEYCODE_X:
|
||||
return onTextContextMenuItem(ID_CUT);
|
||||
case KeyEvent.KEYCODE_C:
|
||||
return onTextContextMenuItem(ID_COPY);
|
||||
case KeyEvent.KEYCODE_V:
|
||||
return onTextContextMenuItem(ID_PASTE);
|
||||
case KeyEvent.KEYCODE_Z:
|
||||
if (getCanUndo()) {
|
||||
return onTextContextMenuItem(ID_UNDO);
|
||||
}
|
||||
break;
|
||||
case KeyEvent.KEYCODE_Y:
|
||||
if (getCanRedo()) {
|
||||
return onTextContextMenuItem(ID_REDO);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return super.onKeyShortcut(keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTextContextMenuItem(
|
||||
final int id) {
|
||||
if (id == ID_UNDO) {
|
||||
undo();
|
||||
return true;
|
||||
} else if (id == ID_REDO) {
|
||||
redo();
|
||||
return true;
|
||||
} else {
|
||||
return super.onTextContextMenuItem(id);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw(final Canvas canvas) {
|
||||
if (!EditorFragment.sWrapText) {
|
||||
final int max = getLineCount();
|
||||
final TextPaint paint = mPaintNumbers;
|
||||
for (int min = 0; min < max; min++) {
|
||||
canvas.drawText(String.valueOf(min + 1),
|
||||
0,
|
||||
getLineBounds(min, null),
|
||||
paint);
|
||||
}
|
||||
}
|
||||
super.onDraw(canvas);
|
||||
}
|
||||
|
||||
private CharSequence autoIndent(
|
||||
CharSequence source,
|
||||
int start,
|
||||
int end,
|
||||
Spanned dest,
|
||||
int dstart,
|
||||
int dend) {
|
||||
if (end - start != 1 ||
|
||||
start >= source.length() ||
|
||||
source.charAt(start) != '\n' ||
|
||||
dstart >= dest.length()) {
|
||||
return source;
|
||||
}
|
||||
|
||||
int istart = dstart;
|
||||
int iend;
|
||||
String indent = "";
|
||||
|
||||
// skip end of line if cursor is at the end of a line
|
||||
if (dest.charAt(istart) == '\n') {
|
||||
--istart;
|
||||
}
|
||||
|
||||
// indent next line if this one isn't terminated
|
||||
if (istart > -1) {
|
||||
// skip white space
|
||||
for (; istart > -1; --istart) {
|
||||
char c = dest.charAt(istart);
|
||||
|
||||
if (c != ' ' &&
|
||||
c != '\t') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (istart > -1) {
|
||||
char c = dest.charAt(istart);
|
||||
|
||||
if (c != ';' &&
|
||||
c != '\n') {
|
||||
indent = "\t";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// find start of previous line
|
||||
for (; istart > -1; --istart) {
|
||||
if (dest.charAt(istart) == '\n') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// cursor is in the first line
|
||||
if (istart < 0) {
|
||||
return source;
|
||||
}
|
||||
|
||||
// span over previous indent
|
||||
for (iend = ++istart;
|
||||
iend < dend;
|
||||
++iend) {
|
||||
char c = dest.charAt(iend);
|
||||
|
||||
if (c != ' ' &&
|
||||
c != '\t') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// copy white space of previous lines and append new indent
|
||||
return "\n" + dest.subSequence(
|
||||
istart,
|
||||
iend) + indent;
|
||||
}
|
||||
|
||||
private void cancelUpdate() {
|
||||
updateHandler.removeCallbacks(
|
||||
updateRunnable);
|
||||
}
|
||||
|
||||
private void replaceTextKeepCursor(
|
||||
Editable e) {
|
||||
int p = getSelectionStart();
|
||||
|
||||
replaceText(e);
|
||||
|
||||
if (p > -1) {
|
||||
setSelection(p);
|
||||
}
|
||||
}
|
||||
|
||||
private void replaceText(Editable e) {
|
||||
disconnect();
|
||||
modified = false;
|
||||
setText(highlight(e));
|
||||
modified = true;
|
||||
addTextChangedListener(mChangeListener);
|
||||
}
|
||||
|
||||
private CharSequence highlight(Editable editable) {
|
||||
final String fileExtension = FilenameUtils.getExtension(EditorFragment.sFilePath);
|
||||
editable.clearSpans();
|
||||
|
||||
if (editable.length() == 0) {
|
||||
return editable;
|
||||
}
|
||||
|
||||
if (fileExtension.contains("html")
|
||||
|| fileExtension.contains("xml")) {
|
||||
color(Patterns.HTML_OPEN_TAGS, editable);
|
||||
color(Patterns.HTML_CLOSE_TAGS, editable);
|
||||
color(Patterns.HTML_ATTRS, editable);
|
||||
color(Patterns.GENERAL_STRINGS, editable);
|
||||
color(Patterns.XML_COMMENTS, editable);
|
||||
} else if (fileExtension.equals("css")) {
|
||||
//color(CSS_STYLE_NAME, editable);
|
||||
color(Patterns.CSS_ATTRS, editable);
|
||||
color(Patterns.CSS_ATTR_VALUE, editable);
|
||||
color(Patterns.GENERAL_COMMENTS, editable);
|
||||
} else if (fileExtension.equals("js")) {
|
||||
color(Patterns.GENERAL_KEYWORDS, editable);
|
||||
color(Patterns.NUMBERS, editable);
|
||||
color(Patterns.GENERAL_COMMENTS, editable);
|
||||
} else {
|
||||
color(Patterns.GENERAL_KEYWORDS, editable);
|
||||
color(Patterns.NUMBERS, editable);
|
||||
color(Patterns.GENERAL_COMMENTS, editable);
|
||||
}
|
||||
|
||||
return editable;
|
||||
}
|
||||
|
||||
private void color(Pattern pattern,
|
||||
Editable editable) {
|
||||
int color = 0;
|
||||
if (pattern.equals(Patterns.HTML_OPEN_TAGS)
|
||||
|| pattern.equals(Patterns.HTML_CLOSE_TAGS)
|
||||
|| pattern.equals(Patterns.GENERAL_KEYWORDS)
|
||||
//|| pattern.equals(CSS_STYLE_NAME)
|
||||
) {
|
||||
color = Patterns.COLOR_KEYWORD;
|
||||
} else if (pattern.equals(Patterns.HTML_ATTRS)
|
||||
|| pattern.equals(Patterns.CSS_ATTRS)) {
|
||||
color = Patterns.COLOR_ATTR;
|
||||
} else if (pattern.equals(Patterns.CSS_ATTR_VALUE)) {
|
||||
color = Patterns.COLOR_ATTR_VALUE;
|
||||
} else if (pattern.equals(Patterns.XML_COMMENTS)
|
||||
|| pattern.equals(Patterns.GENERAL_COMMENTS)) {
|
||||
color = Patterns.COLOR_COMMENT;
|
||||
} else if (pattern.equals(
|
||||
Patterns.GENERAL_STRINGS)) {
|
||||
color = Patterns.COLOR_STRING;
|
||||
} else if (pattern.equals(Patterns.NUMBERS)) {
|
||||
color = Patterns.COLOR_NUMBER;
|
||||
}
|
||||
|
||||
for (final Matcher m =
|
||||
pattern.matcher(editable);
|
||||
m.find(); ) {
|
||||
editable.setSpan(
|
||||
new ForegroundColorSpan(color),
|
||||
m.start(),
|
||||
m.end(),
|
||||
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
|
||||
// =================================================================== //
|
||||
|
||||
/**
|
||||
* Disconnect this undo/redo from the text
|
||||
* view.
|
||||
*/
|
||||
public void disconnect() {
|
||||
removeTextChangedListener(mChangeListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the maximum history size. If size is
|
||||
* negative, then history size is only limited
|
||||
* by the device memory.
|
||||
*/
|
||||
public void setMaxHistorySize(
|
||||
int maxHistorySize) {
|
||||
mEditHistory.setMaxHistorySize(
|
||||
maxHistorySize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear history.
|
||||
*/
|
||||
public void clearHistory() {
|
||||
mEditHistory.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Can undo be performed?
|
||||
*/
|
||||
public boolean getCanUndo() {
|
||||
return (mEditHistory.mmPosition > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform undo.
|
||||
*/
|
||||
public void undo() {
|
||||
EditItem edit = mEditHistory.getPrevious();
|
||||
if (edit == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Editable text = getEditableText();
|
||||
int start = edit.mmStart;
|
||||
int end = start + (edit.mmAfter != null
|
||||
? edit.mmAfter.length() : 0);
|
||||
|
||||
mIsUndoOrRedo = true;
|
||||
text.replace(start, end, edit.mmBefore);
|
||||
mIsUndoOrRedo = false;
|
||||
|
||||
// This will get rid of underlines inserted when editor tries to come
|
||||
// up with a suggestion.
|
||||
for (Object o : text.getSpans(0,
|
||||
text.length(), UnderlineSpan.class)) {
|
||||
text.removeSpan(o);
|
||||
}
|
||||
|
||||
Selection.setSelection(text,
|
||||
edit.mmBefore == null ? start
|
||||
: (start + edit.mmBefore.length()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Can redo be performed?
|
||||
*/
|
||||
public boolean getCanRedo() {
|
||||
return (mEditHistory.mmPosition
|
||||
< mEditHistory.mmHistory.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform redo.
|
||||
*/
|
||||
public void redo() {
|
||||
EditItem edit = mEditHistory.getNext();
|
||||
if (edit == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Editable text = getEditableText();
|
||||
int start = edit.mmStart;
|
||||
int end = start + (edit.mmBefore != null
|
||||
? edit.mmBefore.length() : 0);
|
||||
|
||||
mIsUndoOrRedo = true;
|
||||
text.replace(start, end, edit.mmAfter);
|
||||
mIsUndoOrRedo = false;
|
||||
|
||||
// This will get rid of underlines inserted when editor tries to come
|
||||
// up with a suggestion.
|
||||
for (Object o : text.getSpans(0,
|
||||
text.length(), UnderlineSpan.class)) {
|
||||
text.removeSpan(o);
|
||||
}
|
||||
|
||||
Selection.setSelection(text,
|
||||
edit.mmAfter == null ? start
|
||||
: (start + edit.mmAfter.length()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store preferences.
|
||||
*/
|
||||
public void storePersistentState(
|
||||
SharedPreferences.Editor editor,
|
||||
String prefix) {
|
||||
// Store hash code of text in the editor so that we can check if the
|
||||
// editor contents has changed.
|
||||
editor.putString(prefix + ".hash",
|
||||
String.valueOf(
|
||||
getText().toString().hashCode()));
|
||||
editor.putInt(prefix + ".maxSize",
|
||||
mEditHistory.mmMaxHistorySize);
|
||||
editor.putInt(prefix + ".position",
|
||||
mEditHistory.mmPosition);
|
||||
editor.putInt(prefix + ".size",
|
||||
mEditHistory.mmHistory.size());
|
||||
|
||||
int i = 0;
|
||||
for (EditItem ei : mEditHistory.mmHistory) {
|
||||
String pre = prefix + "." + i;
|
||||
|
||||
editor.putInt(pre + ".start", ei.mmStart);
|
||||
editor.putString(pre + ".before",
|
||||
ei.mmBefore.toString());
|
||||
editor.putString(pre + ".after",
|
||||
ei.mmAfter.toString());
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore preferences.
|
||||
*
|
||||
* @param prefix The preference key prefix
|
||||
* used when state was stored.
|
||||
* @return did restore succeed? If this is
|
||||
* false, the undo history will be empty.
|
||||
*/
|
||||
public boolean restorePersistentState(
|
||||
SharedPreferences sp, String prefix)
|
||||
throws IllegalStateException {
|
||||
|
||||
boolean ok =
|
||||
doRestorePersistentState(sp, prefix);
|
||||
if (!ok) {
|
||||
mEditHistory.clear();
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
private boolean doRestorePersistentState(
|
||||
SharedPreferences sp, String prefix) {
|
||||
|
||||
String hash =
|
||||
sp.getString(prefix + ".hash", null);
|
||||
if (hash == null) {
|
||||
// No state to be restored.
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Integer.valueOf(hash)
|
||||
!= getText().toString().hashCode()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mEditHistory.clear();
|
||||
mEditHistory.mmMaxHistorySize =
|
||||
sp.getInt(prefix + ".maxSize", -1);
|
||||
|
||||
int count = sp.getInt(prefix + ".size", -1);
|
||||
if (count == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
String pre = prefix + "." + i;
|
||||
|
||||
int start = sp.getInt(pre + ".start", -1);
|
||||
String before =
|
||||
sp.getString(pre + ".before", null);
|
||||
String after =
|
||||
sp.getString(pre + ".after", null);
|
||||
|
||||
if (start == -1
|
||||
|| before == null
|
||||
|| after == null) {
|
||||
return false;
|
||||
}
|
||||
mEditHistory.add(
|
||||
new EditItem(start, before, after));
|
||||
}
|
||||
|
||||
mEditHistory.mmPosition =
|
||||
sp.getInt(prefix + ".position", -1);
|
||||
if (mEditHistory.mmPosition == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// =================================================================== //
|
||||
|
||||
/**
|
||||
* Keeps track of all the edit history of a
|
||||
* text.
|
||||
*/
|
||||
private final class EditHistory {
|
||||
|
||||
/**
|
||||
* The position from which an EditItem will
|
||||
* be retrieved when getNext() is called. If
|
||||
* getPrevious() has not been called, this
|
||||
* has the same value as mmHistory.size().
|
||||
*/
|
||||
private int mmPosition = 0;
|
||||
|
||||
/**
|
||||
* Maximum undo history size.
|
||||
*/
|
||||
private int mmMaxHistorySize = -1;
|
||||
|
||||
/**
|
||||
* The list of edits in chronological
|
||||
* order.
|
||||
*/
|
||||
private final LinkedList<EditItem>
|
||||
mmHistory = new LinkedList<EditItem>();
|
||||
|
||||
/**
|
||||
* Clear history.
|
||||
*/
|
||||
private void clear() {
|
||||
mmPosition = 0;
|
||||
mmHistory.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new edit operation to the history
|
||||
* at the current position. If executed
|
||||
* after a call to getPrevious() removes all
|
||||
* the future history (elements with
|
||||
* positions >= current history position).
|
||||
*/
|
||||
private void add(EditItem item) {
|
||||
while (mmHistory.size() > mmPosition) {
|
||||
mmHistory.removeLast();
|
||||
}
|
||||
mmHistory.add(item);
|
||||
mmPosition++;
|
||||
|
||||
if (mmMaxHistorySize >= 0) {
|
||||
trimHistory();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the maximum history size. If size is
|
||||
* negative, then history size is only
|
||||
* limited by the device memory.
|
||||
*/
|
||||
private void setMaxHistorySize(
|
||||
int maxHistorySize) {
|
||||
mmMaxHistorySize = maxHistorySize;
|
||||
if (mmMaxHistorySize >= 0) {
|
||||
trimHistory();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Trim history when it exceeds max history
|
||||
* size.
|
||||
*/
|
||||
private void trimHistory() {
|
||||
while (mmHistory.size()
|
||||
> mmMaxHistorySize) {
|
||||
mmHistory.removeFirst();
|
||||
mmPosition--;
|
||||
}
|
||||
|
||||
if (mmPosition < 0) {
|
||||
mmPosition = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Traverses the history backward by one
|
||||
* position, returns and item at that
|
||||
* position.
|
||||
*/
|
||||
private EditItem getPrevious() {
|
||||
if (mmPosition == 0) {
|
||||
return null;
|
||||
}
|
||||
mmPosition--;
|
||||
return mmHistory.get(mmPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Traverses the history forward by one
|
||||
* position, returns and item at that
|
||||
* position.
|
||||
*/
|
||||
private EditItem getNext() {
|
||||
if (mmPosition >= mmHistory.size()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
EditItem item = mmHistory.get(mmPosition);
|
||||
mmPosition++;
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the changes performed by a
|
||||
* single edit operation.
|
||||
*/
|
||||
private final class EditItem {
|
||||
private final int mmStart;
|
||||
private final CharSequence mmBefore;
|
||||
private final CharSequence mmAfter;
|
||||
|
||||
/**
|
||||
* Constructs EditItem of a modification
|
||||
* that was applied at position start and
|
||||
* replaced CharSequence before with
|
||||
* CharSequence after.
|
||||
*/
|
||||
public EditItem(int start,
|
||||
CharSequence before, CharSequence after) {
|
||||
mmStart = start;
|
||||
mmBefore = before;
|
||||
mmAfter = after;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class that listens to changes in the text.
|
||||
*/
|
||||
private final class EditTextChangeListener
|
||||
implements TextWatcher {
|
||||
|
||||
/**
|
||||
* The text that will be removed by the
|
||||
* change event.
|
||||
*/
|
||||
private CharSequence mBeforeChange;
|
||||
|
||||
/**
|
||||
* The text that was inserted by the change
|
||||
* event.
|
||||
*/
|
||||
private CharSequence mAfterChange;
|
||||
|
||||
public void beforeTextChanged(
|
||||
CharSequence s, int start, int count,
|
||||
int after) {
|
||||
if (mIsUndoOrRedo) {
|
||||
return;
|
||||
}
|
||||
|
||||
mBeforeChange =
|
||||
s.subSequence(start, start + count);
|
||||
}
|
||||
|
||||
public void onTextChanged(CharSequence s,
|
||||
int start, int before,
|
||||
int count) {
|
||||
if (mIsUndoOrRedo) {
|
||||
return;
|
||||
}
|
||||
|
||||
mAfterChange =
|
||||
s.subSequence(start, start + count);
|
||||
mEditHistory.add(
|
||||
new EditItem(start, mBeforeChange,
|
||||
mAfterChange));
|
||||
}
|
||||
|
||||
public void afterTextChanged(Editable s) {
|
||||
cancelUpdate();
|
||||
|
||||
if (!EditorFragment.sColorSyntax || !modified) {
|
||||
return;
|
||||
}
|
||||
|
||||
updateHandler.postDelayed(
|
||||
updateRunnable,
|
||||
SYNTAX_DELAY_MILLIS);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,341 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.ActionBarDrawerToggle;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
import com.vmihalachi.turboeditor.event.ErrorOpeningFileEvent;
|
||||
import com.vmihalachi.turboeditor.event.FileSavedEvent;
|
||||
import com.vmihalachi.turboeditor.event.FileSelectedEvent;
|
||||
import com.vmihalachi.turboeditor.event.NewFileOpened;
|
||||
|
||||
import de.greenrobot.event.EventBus;
|
||||
|
||||
public class HomeActivity extends Activity {
|
||||
|
||||
private String TAG = "A0A";
|
||||
public static final int SELECT_FILE_CODE = 121;
|
||||
|
||||
/*
|
||||
* This class provides a handy way to tie together the functionality of
|
||||
* {@link DrawerLayout} and the framework <code>ActionBar</code> to implement the recommended
|
||||
* design for navigation drawers.
|
||||
*/
|
||||
protected ActionBarDrawerToggle mDrawerToggle;
|
||||
/*
|
||||
* The Drawer Layout
|
||||
*/
|
||||
protected DrawerLayout mDrawerLayout;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
//
|
||||
checkTaskRoot();
|
||||
//
|
||||
setContentView(R.layout.activity_home);
|
||||
//
|
||||
setupDrawerLayout();
|
||||
// Replace fragment
|
||||
getFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_editor, new NoFileOpenedFragment())
|
||||
.commit();
|
||||
/* First Time we open this activity */
|
||||
if (savedInstanceState == null) {
|
||||
// Open
|
||||
mDrawerLayout.openDrawer(Gravity.START);
|
||||
// Set the default title
|
||||
getActionBar().setTitle(getString(R.string.nome_app_turbo_editor));
|
||||
}
|
||||
//
|
||||
receiveIntent();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected final void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
mDrawerToggle.syncState();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
// Register the Event Bus for events
|
||||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
// Unregister the Event Bus
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
try {
|
||||
closeKeyBoard();
|
||||
} catch (NullPointerException e) {
|
||||
Log.e(TAG, e.getMessage(), e);
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public final void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
mDrawerToggle.onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.activity_home, menu);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
/* If we clicked on the Navigation Drawer Menu item */
|
||||
if (mDrawerToggle.onOptionsItemSelected(item)) {
|
||||
return true;
|
||||
} else switch (item.getItemId()){
|
||||
case R.id.im_open:
|
||||
startActivityForResult(new Intent(HomeActivity.this, SelectFileActivity.class)
|
||||
.putExtra("path", "")
|
||||
.putExtra("action", SelectFileActivity.Actions.SelectFile),
|
||||
SELECT_FILE_CODE);
|
||||
return true;
|
||||
case R.id.im_info:
|
||||
startActivity(new Intent(this, PreferenceAbout.class));
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == RESULT_OK && requestCode == SELECT_FILE_CODE) {
|
||||
String path = data.getStringExtra("path");
|
||||
if(!TextUtils.isEmpty(path)){
|
||||
EventBus.getDefault().postSticky(new NewFileOpened(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param event
|
||||
*/
|
||||
public void onEvent(FileSelectedEvent event){
|
||||
// Close the drawer
|
||||
mDrawerLayout.closeDrawer(Gravity.LEFT);
|
||||
// Replace fragment
|
||||
getFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_editor, EditorFragment.newInstance(event.getPath()))
|
||||
.commit();
|
||||
}
|
||||
|
||||
/**
|
||||
* When a file is saved
|
||||
* Invoked by the EditorFragment
|
||||
* @param event The event called
|
||||
*/
|
||||
public void onEvent(FileSavedEvent event){
|
||||
try {
|
||||
closeKeyBoard();
|
||||
} catch (NullPointerException e) {
|
||||
Log.e(TAG, e.getMessage(), e);
|
||||
}
|
||||
// Get intent, action and MIME type
|
||||
final Intent intent = getIntent();
|
||||
final String action = intent.getAction();
|
||||
final String type = intent.getType();
|
||||
|
||||
if (Intent.ACTION_VIEW.equals(action)
|
||||
|| Intent.ACTION_EDIT.equals(action)
|
||||
|| Intent.ACTION_PICK.equals(action)
|
||||
&& type != null) {
|
||||
//This Activity was called by startActivityForResult
|
||||
final Intent returnIntent = new Intent();
|
||||
setResult(Activity.RESULT_OK, returnIntent);
|
||||
// finish the activity
|
||||
finish();
|
||||
} else {
|
||||
//This Activity was called by startActivity
|
||||
//
|
||||
mDrawerLayout.openDrawer(Gravity.LEFT);
|
||||
//
|
||||
getActionBar().setTitle(getString(R.string.nome_app_turbo_editor));
|
||||
// Replace fragment
|
||||
getFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_editor, new NoFileOpenedFragment())
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void onEvent(ErrorOpeningFileEvent event){
|
||||
//
|
||||
mDrawerLayout.openDrawer(Gravity.LEFT);
|
||||
//
|
||||
getActionBar().setTitle(getString(R.string.nome_app_turbo_editor));
|
||||
// Replace fragment
|
||||
getFragmentManager()
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_editor, new NoFileOpenedFragment())
|
||||
.commit();
|
||||
}
|
||||
|
||||
private void closeKeyBoard() throws NullPointerException {
|
||||
// Central system API to the overall input method framework (IMF) architecture
|
||||
InputMethodManager inputManager =
|
||||
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
|
||||
// Base interface for a remotable object
|
||||
IBinder windowToken = getCurrentFocus().getWindowToken();
|
||||
|
||||
// Hide type
|
||||
int hideType = InputMethodManager.HIDE_NOT_ALWAYS;
|
||||
|
||||
// Hide the KeyBoard
|
||||
inputManager.hideSoftInputFromWindow(windowToken, hideType);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void checkTaskRoot(){
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void setupDrawerLayout(){
|
||||
final String defaultTitle = getString(R.string.nome_app_turbo_editor);
|
||||
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||
/* Action Bar */
|
||||
final ActionBar ab = getActionBar();
|
||||
ab.setDisplayHomeAsUpEnabled(true);
|
||||
ab.setHomeButtonEnabled(true);
|
||||
/* Navigation drawer */
|
||||
mDrawerToggle =
|
||||
new ActionBarDrawerToggle(
|
||||
this,
|
||||
mDrawerLayout,
|
||||
R.drawable.ic_drawer,
|
||||
R.string.nome_app_turbo_editor,
|
||||
R.string.nome_app_turbo_editor) {
|
||||
|
||||
@Override
|
||||
public void onDrawerClosed(View view) {
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDrawerOpened(View drawerView) {
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
};
|
||||
/* link the mDrawerToggle to the Drawer Layout */
|
||||
mDrawerLayout.setDrawerListener(mDrawerToggle);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
final String action = intent.getAction();
|
||||
final String type = intent.getType();
|
||||
|
||||
if (Intent.ACTION_VIEW.equals(action)
|
||||
|| Intent.ACTION_EDIT.equals(action)
|
||||
|| Intent.ACTION_PICK.equals(action)
|
||||
&& type != null) {
|
||||
// Post the NewFileOpened Event
|
||||
EventBus.getDefault().postSticky(new NewFileOpened(intent.getData().getPath()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void receiveIntent(){
|
||||
// Get intent, action and MIME type
|
||||
final Intent intent = getIntent();
|
||||
final String action = intent.getAction();
|
||||
final String type = intent.getType();
|
||||
|
||||
if (Intent.ACTION_VIEW.equals(action)
|
||||
|| Intent.ACTION_EDIT.equals(action)
|
||||
|| Intent.ACTION_PICK.equals(action)
|
||||
&& type != null) {
|
||||
// Post the NewFileOpened Event
|
||||
EventBus.getDefault().postSticky(new NewFileOpened(intent.getData().getPath()));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
|
||||
public class LicensesActivity extends Activity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_licenses);
|
||||
ListView listView = (ListView) findViewById(android.R.id.list);
|
||||
listView.setAdapter(adapter);
|
||||
}
|
||||
}
|
@ -1,291 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.ListFragment;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.ActionMode;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AbsListView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.vmihalachi.turboeditor.event.FileSelectedEvent;
|
||||
import com.vmihalachi.turboeditor.event.NewFileOpened;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import de.greenrobot.event.EventBus;
|
||||
|
||||
public class NavigationDrawerListFragment extends ListFragment implements AbsListView.MultiChoiceModeListener {
|
||||
|
||||
List<String> fileNames;
|
||||
ArrayAdapter<String> arrayAdapter;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
// Out custom layout
|
||||
View rootView = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
getListView().setMultiChoiceModeListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
// Register the Event Bus for events
|
||||
EventBus.getDefault().registerSticky(this);
|
||||
//
|
||||
refreshList();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
// Unregister the Event Bus
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||
super.onListItemClick(l, v, position, id);
|
||||
// don't open the same file twice
|
||||
//if(this.mCurrentCheckedPosition == position) return;
|
||||
// set current checked position
|
||||
//this.mCurrentCheckedPosition = position;
|
||||
// Shared Preferences
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// File paths saved in preferences
|
||||
String[] savedPaths = sharedPreferences.getString("savedPaths", "").split(",");
|
||||
// Path of the file selected
|
||||
String filePath = savedPaths[position];
|
||||
// Send the event that a file was selected
|
||||
EventBus.getDefault().post(new FileSelectedEvent(filePath));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onItemCheckedStateChanged(ActionMode actionMode, int position, long l, boolean isChecked) {
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
|
||||
MenuInflater inflater = actionMode.getMenuInflater();
|
||||
inflater.inflate(R.menu.action_mode_navigation_drawer, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
|
||||
switch (menuItem.getItemId()) {
|
||||
case R.id.im_remove:
|
||||
// Shared Preferences
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// File paths saved in preferences
|
||||
String[] savedPaths = sharedPreferences.getString("savedPaths", "").split(",");
|
||||
//
|
||||
SparseBooleanArray checkedItems = getListView().getCheckedItemPositions();
|
||||
//
|
||||
if (checkedItems != null) {
|
||||
for (int i=0; i<checkedItems.size(); i++) {
|
||||
if (checkedItems.valueAt(i)) {
|
||||
removePath(savedPaths[checkedItems.keyAt(i)], false);
|
||||
}
|
||||
}
|
||||
refreshList();
|
||||
}
|
||||
actionMode.finish();
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onDestroyActionMode(ActionMode actionMode) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* When a new file is opened
|
||||
* Invoked by the main activity which receive the intent
|
||||
* @param event The event called
|
||||
*/
|
||||
public void onEvent(NewFileOpened event){
|
||||
EventBus.getDefault().removeStickyEvent(event);
|
||||
// Shared Preferences
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// File paths saved in preferences
|
||||
String[] savedPaths = sharedPreferences.getString("savedPaths", "").split(",");
|
||||
|
||||
for(int i = 0; i < savedPaths.length; i++){
|
||||
if(savedPaths[i].equals(event.getFilePath())){
|
||||
// Send the event that a file was selected
|
||||
EventBus.getDefault().post(new FileSelectedEvent(event.getFilePath()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
addPath(event.getFilePath());
|
||||
// Send the event that a file was selected
|
||||
EventBus.getDefault().post(new FileSelectedEvent(event.getFilePath()));
|
||||
}
|
||||
|
||||
private void addPath(String path){
|
||||
addPath(path, true);
|
||||
}
|
||||
|
||||
private void addPath(String path, boolean refresh){
|
||||
// Shared Preferences
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// Editor
|
||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
||||
// File paths saved in preferences
|
||||
String[] savedPaths = sharedPreferences.getString("savedPaths", "").split(",");
|
||||
// StringBuilder
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// for cycle
|
||||
for (int count = 0; count < savedPaths.length; count++) {
|
||||
sb.append(savedPaths[count]).append(",");
|
||||
}
|
||||
// Append new path
|
||||
sb.append(path);
|
||||
// Put the string
|
||||
editor.putString("savedPaths", sb.toString());
|
||||
// Commit
|
||||
editor.commit();
|
||||
// Update list
|
||||
//arrayAdapter.add(FilenameUtils.getName(path));
|
||||
//arrayAdapter.notifyDataSetChanged();
|
||||
if(refresh){
|
||||
refreshList();
|
||||
}
|
||||
}
|
||||
|
||||
private void removePath(String path){
|
||||
removePath(path, true);
|
||||
}
|
||||
|
||||
private void removePath(String path, boolean refresh){
|
||||
// Shared Preferences
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// Editor
|
||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
||||
// File paths saved in preferences
|
||||
String[] savedPaths = sharedPreferences.getString("savedPaths", "").split(",");
|
||||
// StringBuilder
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// for cycle
|
||||
for (int count = 0; count < savedPaths.length; count++) {
|
||||
if(path.equals(savedPaths[count])) continue;
|
||||
sb.append(savedPaths[count]).append(",");
|
||||
}
|
||||
// Put the string
|
||||
editor.putString("savedPaths", sb.toString());
|
||||
// Commit
|
||||
editor.commit();
|
||||
// Update list
|
||||
//arrayAdapter.remove(FilenameUtils.getName(path));
|
||||
//arrayAdapter.notifyDataSetChanged();
|
||||
if(refresh){
|
||||
refreshList();
|
||||
}
|
||||
}
|
||||
|
||||
/* package */ void refreshList(){
|
||||
// Shared Preferences
|
||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
// File paths saved in preferences
|
||||
String[] savedPaths = sharedPreferences.getString("savedPaths", "").split(",");
|
||||
// File names for the list
|
||||
fileNames = new ArrayList<String>(savedPaths.length);
|
||||
//
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// for cycle to convert paths to names
|
||||
for(String path : savedPaths){
|
||||
|
||||
if(!path.isEmpty()){
|
||||
File file = new File(path);
|
||||
if(file.exists()){
|
||||
fileNames.add(FilenameUtils.getName(path));
|
||||
sb.append(path).append(",");
|
||||
}
|
||||
}
|
||||
}
|
||||
// save list without empty or non existed files
|
||||
sharedPreferences.edit().putString("savedPaths", sb.toString()).commit();
|
||||
// Adapter
|
||||
arrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.item_drawer_list, fileNames);
|
||||
// Set adapter
|
||||
setListAdapter(arrayAdapter);
|
||||
}
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
/**
|
||||
* Created by Vlad on 9/23/13.
|
||||
*/
|
||||
public class NoFileOpenedFragment extends Fragment {
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
// Out custom layout
|
||||
View rootView = inflater.inflate(R.layout.fragment_no_file_open, container, false);
|
||||
return rootView;
|
||||
}
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentManager;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
|
||||
public class PreferenceAbout extends PreferenceActivity {
|
||||
@Override
|
||||
public void onCreate(final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.about);
|
||||
setupClickablePreferences();
|
||||
}
|
||||
|
||||
public void setupClickablePreferences() {
|
||||
final Preference email = findPreference("aboutactivity_authoremail"),
|
||||
changelog = findPreference("aboutactivity_changelog"),
|
||||
open_source_licenses = findPreference("aboutactivity_open_source_licenses"),
|
||||
market = findPreference("aboutactivity_authormarket");
|
||||
if (email != null) {
|
||||
email.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(final Preference preference) {
|
||||
Intent i = new Intent(Intent.ACTION_SEND);
|
||||
i.setType("message/rfc822");
|
||||
i.putExtra(Intent.EXTRA_EMAIL, new String[]{"app.feedback.mail@gmail.com"});
|
||||
i.putExtra(Intent.EXTRA_SUBJECT, getApplicationName(getBaseContext()) + " " + getCurrentVersion(getBaseContext()));
|
||||
i.putExtra(Intent.EXTRA_TEXT, "");
|
||||
try {
|
||||
startActivity(Intent.createChooser(i, getString(R.string.aboutactivity_authoremail_summary)));
|
||||
} catch (android.content.ActivityNotFoundException ex) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (changelog != null) {
|
||||
changelog.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(final Preference preference) {
|
||||
openDialogFragment(new DialogStandardFragment());
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (open_source_licenses != null) {
|
||||
open_source_licenses.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(final Preference preference) {
|
||||
startActivity(new Intent(PreferenceAbout.this, LicensesActivity.class));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (market != null) {
|
||||
market.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(final Preference preference) {
|
||||
try {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pub:Vlad+Mihalachi"))
|
||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void openDialogFragment(DialogStandardFragment dialogStandardFragment) {
|
||||
if (dialogStandardFragment != null) {
|
||||
FragmentManager fm = getFragmentManager();
|
||||
FragmentTransaction ft = fm.beginTransaction();
|
||||
Fragment prev = fm.findFragmentByTag("changelogdemo_dialog");
|
||||
if (prev != null) {
|
||||
ft.remove(prev);
|
||||
}
|
||||
ft.addToBackStack(null);
|
||||
|
||||
dialogStandardFragment.show(ft, "changelogdemo_dialog");
|
||||
}
|
||||
}
|
||||
|
||||
public static String getApplicationName(final Context context) {
|
||||
final ApplicationInfo applicationInfo = context.getApplicationInfo();
|
||||
return context.getString(applicationInfo.labelRes);
|
||||
}
|
||||
|
||||
public static String getCurrentVersion(final Context context) {
|
||||
try {
|
||||
final PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),
|
||||
0);
|
||||
return packageInfo.versionName;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
@ -1,224 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.vmihalachi.turboeditor.adapter.AdapterDetailedList;
|
||||
import com.vmihalachi.turboeditor.util.AlphanumComparator;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
|
||||
/**
|
||||
* Created by Vlad on 9/24/13.
|
||||
*/
|
||||
public class SelectFileActivity extends Activity implements AdapterView.OnItemClickListener {
|
||||
private String currentFolder;
|
||||
private ListView listView;
|
||||
private boolean wantAFile, wantAFolder;
|
||||
|
||||
// The android SD card root path
|
||||
public static final String SD_CARD_ROOT =
|
||||
Environment.getExternalStorageDirectory()
|
||||
.getAbsolutePath();
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_select_file);
|
||||
final Actions action = (Actions) getIntent().getExtras().getSerializable("action");
|
||||
wantAFile = action == Actions.SelectFile;
|
||||
wantAFolder = action == Actions.SelectFolder;
|
||||
|
||||
this.listView = (ListView) findViewById(android.R.id.list);
|
||||
this.listView.setOnItemClickListener(this);
|
||||
|
||||
String path = getIntent().getExtras().getString("path");
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
new UpdateList().execute(SD_CARD_ROOT);
|
||||
} else {
|
||||
new UpdateList().execute(path);
|
||||
}
|
||||
}
|
||||
|
||||
void returnData(String path) {
|
||||
final Intent returnIntent = new Intent();
|
||||
returnIntent.putExtra("path", path);
|
||||
setResult(RESULT_OK, returnIntent);
|
||||
// finish the activity
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent,
|
||||
View view, int position, long id) {
|
||||
final String name = ((TextView) view.findViewById(android.R.id.title)).getText().toString();
|
||||
if (name.equals("..")) {
|
||||
vaiIndietro();
|
||||
return;
|
||||
} else if (name.equals(getString(R.string.home))) {
|
||||
new UpdateList().execute(SD_CARD_ROOT);
|
||||
return;
|
||||
}
|
||||
|
||||
final File selectedFile = new File(currentFolder, name);
|
||||
|
||||
if (selectedFile.isFile() && wantAFile) {
|
||||
returnData(selectedFile.getAbsolutePath());
|
||||
} else if (selectedFile.isDirectory()) {
|
||||
new UpdateList().execute(selectedFile.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.activity_select_file, menu);
|
||||
menu.findItem(R.id.im_button).setTitle(getString(wantAFolder ? R.string.seleziona
|
||||
: android.R.string.cancel));
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int i = item.getItemId();
|
||||
if (i == R.id.im_button) {
|
||||
if (wantAFolder) {
|
||||
returnData(currentFolder);
|
||||
} else if (wantAFile) {
|
||||
returnData("");
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
void vaiIndietro() {
|
||||
if (currentFolder.equals("/")) {
|
||||
new UpdateList().execute(SD_CARD_ROOT);
|
||||
} else {
|
||||
File tempFile = new File(currentFolder);
|
||||
if (tempFile.isFile()) {
|
||||
tempFile = tempFile.getParentFile()
|
||||
.getParentFile();
|
||||
} else {
|
||||
tempFile = tempFile.getParentFile();
|
||||
}
|
||||
new UpdateList().execute(tempFile.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
private class UpdateList extends
|
||||
AsyncTask<String, Void, LinkedList<AdapterDetailedList.FileDetail>> {
|
||||
|
||||
@Override
|
||||
protected LinkedList<AdapterDetailedList.FileDetail> doInBackground(final String... params) {
|
||||
try {
|
||||
|
||||
final String path = params[0];
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
File tempFile = new File(path);
|
||||
if (tempFile.isFile()) {
|
||||
tempFile = tempFile.getParentFile();
|
||||
}
|
||||
|
||||
final File[] files = tempFile.listFiles();
|
||||
Arrays.sort(files,
|
||||
getFileNameComparator());
|
||||
|
||||
final LinkedList<AdapterDetailedList.FileDetail> fileDetails = new LinkedList<AdapterDetailedList.FileDetail>();
|
||||
final LinkedList<AdapterDetailedList.FileDetail>
|
||||
folderDetails = new LinkedList<AdapterDetailedList.FileDetail>();
|
||||
final AbstractMap<String, File> tempList = new HashMap<String, File>();
|
||||
currentFolder = tempFile.getAbsolutePath();
|
||||
|
||||
if (files != null) {
|
||||
for (final File f : files) {
|
||||
if (f.isHidden()) {
|
||||
continue;
|
||||
} else if (f.isDirectory()
|
||||
&& f.canRead()) {
|
||||
folderDetails.add(new AdapterDetailedList.FileDetail(f.getName(),
|
||||
getString(R.string.folder),
|
||||
""));
|
||||
} else if (f.isFile()) {
|
||||
final long fileSize = f.length();
|
||||
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy hh:mm a");
|
||||
String date = format.format(f.lastModified());
|
||||
fileDetails.add(new AdapterDetailedList.FileDetail(f.getName(),
|
||||
FileUtils.byteCountToDisplaySize(fileSize), date));
|
||||
}
|
||||
tempList.put(f.getName(), f);
|
||||
}
|
||||
}
|
||||
|
||||
folderDetails.addAll(fileDetails);
|
||||
return folderDetails;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final LinkedList<AdapterDetailedList.FileDetail> names) {
|
||||
boolean isRoot = currentFolder.equals("/");
|
||||
if (names != null) {
|
||||
listView.setAdapter(new AdapterDetailedList(getBaseContext(), names, isRoot));
|
||||
}
|
||||
super.onPostExecute(names);
|
||||
}
|
||||
|
||||
public final Comparator<File> getFileNameComparator() {
|
||||
return new AlphanumComparator() {
|
||||
@Override
|
||||
public String getTheString(Object obj) {
|
||||
return ((File) obj).getName()
|
||||
.toLowerCase();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public enum Actions {
|
||||
SelectFile, SelectFolder
|
||||
}
|
||||
}
|
@ -1,260 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Typeface;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.vmihalachi.turboeditor.R;
|
||||
import com.vmihalachi.turboeditor.helper.FileHelper;
|
||||
import com.vmihalachi.turboeditor.util.MimeTypes;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Set;
|
||||
|
||||
public class AdapterDetailedList extends
|
||||
ArrayAdapter<AdapterDetailedList.FileDetail> {
|
||||
|
||||
// Layout Inflater
|
||||
final LayoutInflater inflater;
|
||||
|
||||
// The Context to get drawables from resources
|
||||
private final Context context;
|
||||
|
||||
// The list of names
|
||||
final LinkedList<FileDetail> fileDetails;
|
||||
|
||||
// Change HashMap<Integer, Boolean> to SparseBooleanArray
|
||||
private HashMap<String, Boolean> mSelection =
|
||||
new HashMap<String, Boolean>();
|
||||
|
||||
private final int default_text_color;
|
||||
private final int highlight_text_color;
|
||||
|
||||
public static class ViewHolder {
|
||||
|
||||
// Text view with the name of the file
|
||||
public TextView label;
|
||||
|
||||
// Text view with the name of the file
|
||||
public TextView sizeLabel;
|
||||
|
||||
public TextView dateLabel;
|
||||
|
||||
// The icon of the file
|
||||
public ImageView icon;
|
||||
}
|
||||
|
||||
public AdapterDetailedList(final Context context,
|
||||
final LinkedList<FileDetail> fileDetails,
|
||||
final boolean isRoot) {
|
||||
// super
|
||||
super(context,
|
||||
R.layout.item_file_list,
|
||||
fileDetails);
|
||||
this.context = context;
|
||||
this.fileDetails = fileDetails;
|
||||
// Cache the LayoutInflate to avoid asking for a new one each time.
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
this.default_text_color = context.getResources().getColor(android.R.color.primary_text_dark);
|
||||
this.highlight_text_color = context.getResources().getColor(android.R.color.holo_blue_dark);
|
||||
if (!isRoot) {
|
||||
this.fileDetails.addFirst(new FileDetail("..",
|
||||
context.getString(R.string.folder), ""));
|
||||
} else {
|
||||
this.fileDetails.addFirst(new FileDetail(context.getString(R.string.home),
|
||||
context.getString(R.string.folder),
|
||||
""));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int position,
|
||||
View convertView, final ViewGroup parent) {
|
||||
if (convertView == null) {
|
||||
convertView = this.inflater
|
||||
.inflate(R.layout.item_file_list,
|
||||
null);
|
||||
final ViewHolder hold = new ViewHolder();
|
||||
hold.label = (TextView) convertView.findViewById(android.R.id.title);
|
||||
hold.sizeLabel = (TextView) convertView.findViewById(android.R.id.text1);
|
||||
hold.dateLabel = (TextView) convertView.findViewById(android.R.id.text2);
|
||||
hold.icon = (ImageView) convertView.findViewById(android.R.id.icon);
|
||||
convertView.setTag(hold);
|
||||
final FileDetail fileDetail = fileDetails.get(position);
|
||||
final String fileName = fileDetail.getName();
|
||||
setIcon(hold, fileDetail);
|
||||
hold.label
|
||||
.setText(fileName);
|
||||
hold.sizeLabel
|
||||
.setText(fileDetail.getSize());
|
||||
hold.dateLabel
|
||||
.setText(fileDetail.getDateModified());
|
||||
if (isPositionChecked(fileName)) {
|
||||
hold.label
|
||||
.setTextColor(this.highlight_text_color);
|
||||
hold.label
|
||||
.setTypeface(null, Typeface.ITALIC);
|
||||
} else {
|
||||
hold.label
|
||||
.setTextColor(this.default_text_color);
|
||||
hold.label
|
||||
.setTypeface(null, Typeface.NORMAL);
|
||||
}
|
||||
} else {
|
||||
final ViewHolder hold = ((ViewHolder) convertView.getTag());
|
||||
final FileDetail fileDetail = fileDetails.get(position);
|
||||
final String fileName = fileDetail.getName();
|
||||
setIcon(hold, fileDetail);
|
||||
hold.label
|
||||
.setText(fileName);
|
||||
hold.sizeLabel
|
||||
.setText(fileDetail.getSize());
|
||||
hold.dateLabel
|
||||
.setText(fileDetail.getDateModified());
|
||||
if (isPositionChecked(fileName)) {
|
||||
hold.label
|
||||
.setTextColor(this.highlight_text_color);
|
||||
hold.label
|
||||
.setTypeface(null, Typeface.ITALIC);
|
||||
} else {
|
||||
hold.label
|
||||
.setTextColor(this.default_text_color);
|
||||
hold.label
|
||||
.setTypeface(null, Typeface.NORMAL);
|
||||
}
|
||||
}
|
||||
return convertView;
|
||||
}
|
||||
|
||||
private void setIcon(final ViewHolder viewHolder,
|
||||
final FileDetail fileDetail) {
|
||||
final String fileName = fileDetail.getName();
|
||||
final String ext = FileHelper.getExtension(fileName);
|
||||
if (fileDetail.isFolder()) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_folder);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_HTML)
|
||||
.contains(ext) || ext.endsWith("html")) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_html);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_CODE)
|
||||
.contains(ext)
|
||||
|| fileName.endsWith("css")
|
||||
|| fileName.endsWith("js")) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_code);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_ARCHIVE).contains(ext)) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_archive);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_MUSIC)
|
||||
.contains(ext)) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_media_music);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_PICTURE).contains(ext)) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_media_picture);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_VIDEO)
|
||||
.contains(ext)) {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_media_video);
|
||||
} else {
|
||||
viewHolder.icon
|
||||
.setImageResource(R.color.file_text);
|
||||
}
|
||||
}
|
||||
|
||||
public void checkPosition(final String name) {
|
||||
if (isPositionChecked(name)) {
|
||||
removeSelection(name);
|
||||
} else {
|
||||
setNewSelection(name, true);
|
||||
}
|
||||
}
|
||||
|
||||
void setNewSelection(final String name,
|
||||
final boolean value) {
|
||||
this.mSelection.put(name, value);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
boolean isPositionChecked(final String name) {
|
||||
final Boolean result = this.mSelection.get(name);
|
||||
return (result == null) ? false : result;
|
||||
}
|
||||
|
||||
public Set<String> getCurrentCheckedPosition() {
|
||||
return this.mSelection.keySet();
|
||||
}
|
||||
|
||||
private void removeSelection(final String name) {
|
||||
this.mSelection.remove(name);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void clearSelection() {
|
||||
this.mSelection = new HashMap<String, Boolean>();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public static class FileDetail {
|
||||
private String name;
|
||||
private String size;
|
||||
private String dateModified;
|
||||
private boolean isFolder;
|
||||
|
||||
public FileDetail(String name, String size,
|
||||
String dateModified) {
|
||||
this.name = name;
|
||||
this.size = size;
|
||||
this.dateModified = dateModified;
|
||||
if (TextUtils.isEmpty(dateModified)) {
|
||||
isFolder = true;
|
||||
} else {
|
||||
isFolder = false;
|
||||
}
|
||||
}
|
||||
|
||||
public String getDateModified() {
|
||||
return dateModified;
|
||||
}
|
||||
|
||||
public String getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public boolean isFolder() {
|
||||
return isFolder;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.event;
|
||||
|
||||
public class CloseDrawerEvent {
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.event;
|
||||
|
||||
public class FileSavedEvent {
|
||||
private String filePath;
|
||||
|
||||
public FileSavedEvent(String filePath) {
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
public String getFilePath() {
|
||||
return filePath;
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.event;
|
||||
|
||||
public class FileSelectedEvent {
|
||||
|
||||
private String path;
|
||||
|
||||
public FileSelectedEvent(String path){
|
||||
this.path = path;
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return path;
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.event;
|
||||
|
||||
public class NewFileOpened {
|
||||
private String filePath;
|
||||
|
||||
public NewFileOpened(String filePath) {
|
||||
this.filePath = filePath;
|
||||
}
|
||||
|
||||
public String getFilePath() {
|
||||
return filePath;
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.event;
|
||||
|
||||
public class OpenDrawerEvent {
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.helper;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class FileHelper {
|
||||
/**
|
||||
* Get the extension of a file
|
||||
* @param f the file
|
||||
* @return the extension of a file
|
||||
*/
|
||||
public static String getExtension(File f) {
|
||||
return getExtension(f.getAbsolutePath());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the extension from a file path
|
||||
* @param path the path
|
||||
* @return the extension from a file path
|
||||
*/
|
||||
public static String getExtension(String path) {
|
||||
String ext = null;
|
||||
String s = path;
|
||||
int i = s.lastIndexOf('.');
|
||||
|
||||
if (i > 0 && i < s.length() - 1) {
|
||||
ext = s.substring(i+1).toLowerCase();
|
||||
}
|
||||
return ext;
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
public final class PreferenceHelper {
|
||||
|
||||
private PreferenceHelper() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter Methods
|
||||
*/
|
||||
public static SharedPreferences getPrefs(Context context) {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context);
|
||||
}
|
||||
|
||||
public static SharedPreferences.Editor getEditor(Context context) {
|
||||
return getPrefs(context).edit();
|
||||
}
|
||||
|
||||
public static boolean getWrapText(Context context) {
|
||||
return getPrefs(context).getBoolean("editor_wrap_text", true);
|
||||
}
|
||||
|
||||
public static boolean getSyntaxHiglight(Context context) {
|
||||
return getPrefs(context).getBoolean("editor_syntax_highlight", true);
|
||||
}
|
||||
|
||||
public static String getEncoding(Context context) {
|
||||
return getPrefs(context).getString("editor_encoding", "UTF-8");
|
||||
}
|
||||
/**
|
||||
* Setter Methods
|
||||
*/
|
||||
|
||||
public static void setWrapText(Context context, boolean value) {
|
||||
getEditor(context).putBoolean("editor_wrap_text", value).commit();
|
||||
}
|
||||
|
||||
public static void setSyntaxHiglight(Context context, boolean value) {
|
||||
getEditor(context).putBoolean("editor_syntax_highlight", value).commit();
|
||||
}
|
||||
|
||||
public static void setEncoding(Context context, String value) {
|
||||
getEditor(context).putString("editor_encoding", value).commit();
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.helper;
|
||||
|
||||
public final class StringHelper {
|
||||
|
||||
private StringHelper() {
|
||||
}
|
||||
|
||||
public static String join(final String... strings) {
|
||||
final StringBuffer buffer = new StringBuffer();
|
||||
for (String string : strings) {
|
||||
if (!string.endsWith("/")) {
|
||||
string += "/";
|
||||
}
|
||||
buffer.append(string);
|
||||
}
|
||||
String result = buffer.toString();
|
||||
if (result.endsWith("/")) {
|
||||
result = result.substring(0, result.length() - 1);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
@ -1,146 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.util;
|
||||
|
||||
public class MimeTypes {
|
||||
public static final String[] MIME_TEXT = {
|
||||
"ajx",
|
||||
"am",
|
||||
"asa",
|
||||
"asc",
|
||||
"asp",
|
||||
"aspx",
|
||||
"awk",
|
||||
"bat",
|
||||
"c",
|
||||
"cdf",
|
||||
"cf",
|
||||
"cfg",
|
||||
"cfm",
|
||||
"cgi",
|
||||
"cnf",
|
||||
"conf",
|
||||
"cpp",
|
||||
"css",
|
||||
"csv",
|
||||
"ctl",
|
||||
"dat",
|
||||
"dhtml",
|
||||
"diz",
|
||||
"file",
|
||||
"forward",
|
||||
"grp",
|
||||
"h",
|
||||
"hpp",
|
||||
"hqx",
|
||||
"hta",
|
||||
"htaccess",
|
||||
"htc",
|
||||
"htm",
|
||||
"html",
|
||||
"htpasswd",
|
||||
"htt",
|
||||
"htx",
|
||||
"in",
|
||||
"inc",
|
||||
"info",
|
||||
"ini",
|
||||
"ink",
|
||||
"java",
|
||||
"js",
|
||||
"jsp",
|
||||
"key",
|
||||
"log",
|
||||
"logfile",
|
||||
"m3u",
|
||||
"m4",
|
||||
"m4a",
|
||||
"mak",
|
||||
"map",
|
||||
"model",
|
||||
"msg",
|
||||
"nfo",
|
||||
"nsi",
|
||||
"info",
|
||||
"old",
|
||||
"pas",
|
||||
"patch",
|
||||
"perl",
|
||||
"php",
|
||||
"php2",
|
||||
"php3",
|
||||
"php4",
|
||||
"php5",
|
||||
"php6",
|
||||
"phtml",
|
||||
"pix",
|
||||
"pl",
|
||||
"pm",
|
||||
"po",
|
||||
"pwd",
|
||||
"py",
|
||||
"qmail",
|
||||
"rb",
|
||||
"rbl",
|
||||
"rbw",
|
||||
"readme",
|
||||
"reg",
|
||||
"rss",
|
||||
"rtf",
|
||||
"ruby",
|
||||
"session",
|
||||
"setup",
|
||||
"sh",
|
||||
"shtm",
|
||||
"shtml",
|
||||
"sql",
|
||||
"ssh",
|
||||
"stm",
|
||||
"style",
|
||||
"svg",
|
||||
"tcl",
|
||||
"text",
|
||||
"threads",
|
||||
"tmpl",
|
||||
"tpl",
|
||||
"txt",
|
||||
"ubb",
|
||||
"vbs",
|
||||
"xhtml",
|
||||
"xml",
|
||||
"xrc",
|
||||
"xsl"};
|
||||
public static final String[] MIME_CODE =
|
||||
{"xml", "php", "asp", "json", "wiki"};
|
||||
public static final String[] MIME_HTML =
|
||||
{"htm"};
|
||||
public static final String[] MIME_PICTURE = {
|
||||
"png", "jpeg", "jpg", "ico", "gif", "bmp",
|
||||
"tiff"
|
||||
};
|
||||
public static final String[] MIME_MUSIC =
|
||||
{"mp3", "avi", "flac", "mpga"};
|
||||
public static final String[] MIME_VIDEO =
|
||||
{"mp4", "mkv", "wmw"};
|
||||
public static final String[] MIME_ARCHIVE = {
|
||||
"zip", "tar", "gz", "bz2", "rar", "7z"
|
||||
};
|
||||
public static String[] USER_MIME_TEXT;
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.util;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Patterns {
|
||||
public static final int COLOR_NUMBER = 0xffff6600;
|
||||
public static final int COLOR_KEYWORD = 0xff2f6f9f;
|
||||
public static final int COLOR_ATTR = 0xff4f9fcf;
|
||||
public static final int COLOR_ATTR_VALUE = 0xffd44950;
|
||||
public static final int COLOR_STRING = 0xffd44950;
|
||||
public static final int COLOR_COMMENT = 0xff999999;
|
||||
|
||||
// Strings
|
||||
public static final Pattern GENERAL_STRINGS = Pattern.compile("\"(.*?)\"|'(.*?)'");
|
||||
|
||||
public static final Pattern HTML_OPEN_TAGS = Pattern.compile(
|
||||
"<([A-Za-z][A-Za-z0-9]*)\\b[^>]*>");
|
||||
public static final Pattern HTML_CLOSE_TAGS = Pattern.compile(
|
||||
"</([A-Za-z][A-Za-z0-9]*)\\b[^>]*>");
|
||||
public static final Pattern HTML_ATTRS = Pattern.compile(
|
||||
"(\\S+)=[\"']?((?:.(?![\"']?\\s+(?:\\S+)=|[>\"']))+.)[\"']?");
|
||||
|
||||
//static final Pattern CSS_STYLE_NAME= Pattern.compile(
|
||||
// "[ \\t\\n\\r\\f](.+?)\\{([^\\)]+)\\}");
|
||||
public static final Pattern CSS_ATTRS = Pattern.compile(
|
||||
"(.+?):(.+?);");
|
||||
public static final Pattern CSS_ATTR_VALUE = Pattern.compile(
|
||||
":[ \t](.+?);");
|
||||
|
||||
public static final Pattern NUMBERS = Pattern.compile(
|
||||
"\\b(\\d*[.]?\\d+)\\b");
|
||||
public static final Pattern CSS_NUMBERS = Pattern.compile(
|
||||
"/^auto$|^[+-]?[0-9]+\\.?([0-9]+)?(px|em|ex|%|in|cm|mm|pt|pc)?$/ig");
|
||||
public static final Pattern GENERAL_KEYWORDS = Pattern.compile(
|
||||
"\\b(alignas|alignof|and|and_eq|asm|auto|bitand|bitorbool|break|case|catch|char|"
|
||||
+ "char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype"
|
||||
+ "|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|"
|
||||
+ "false|float|for|friend|function|goto|if|inline|int|mutable|namespace|new|noexcept|"
|
||||
+ "not|not_eq|nullptr|operator|or|or_eq|private|protected|public|register|"
|
||||
+ "reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast"
|
||||
+ "|struct|switch|template|this|thread_local|throw|true|try|typedef|typeid|typename"
|
||||
+ "|union|unsigned|using|var|virtual|void|volatile|wchar_t|while|xor|xor_eq)\\b");
|
||||
// Comments
|
||||
public static final Pattern XML_COMMENTS = Pattern.compile("(?s)<!--.*?-->");
|
||||
public static final Pattern GENERAL_COMMENTS = Pattern.compile(
|
||||
"/\\*(?:.|[\\n\\r])*?\\*/|//.*");
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2013 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Turbo Editor.
|
||||
*
|
||||
* Turbo Editor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Turbo Editor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.vmihalachi.turboeditor.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class CapitalizedTextView extends TextView {
|
||||
|
||||
public CapitalizedTextView(final Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public CapitalizedTextView(final Context context, final AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public CapitalizedTextView(final Context context, final AttributeSet attrs, final int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setText(final CharSequence text, final BufferType type) {
|
||||
super.setText(text.toString().toUpperCase(), type);
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 729 B |
Before Width: | Height: | Size: 393 B |
Before Width: | Height: | Size: 716 B |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 481 B |
Before Width: | Height: | Size: 332 B |
Before Width: | Height: | Size: 485 B |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 886 B |
Before Width: | Height: | Size: 327 B |
Before Width: | Height: | Size: 926 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 777 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 14 KiB |
@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:exitFadeDuration="@android:integer/config_shortAnimTime">
|
||||
|
||||
<item
|
||||
android:drawable="@android:color/holo_blue_light"
|
||||
android:state_pressed="true"/>
|
||||
<item
|
||||
android:drawable="@android:color/holo_blue_light"
|
||||
android:state_enabled="true"
|
||||
android:state_focused="true"/>
|
||||
<item
|
||||
android:drawable="@android:color/transparent"/>
|
||||
|
||||
</selector>
|
@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<android.support.v4.widget.DrawerLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@id/drawer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@id/fragment_editor"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<fragment android:layout_width="@dimen/navigation_drawer_width"
|
||||
android:layout_height="match_parent"
|
||||
android:name="com.vmihalachi.turboeditor.NavigationDrawerListFragment"
|
||||
android:id="@id/drawer_list"
|
||||
android:layout_gravity="left"/>
|
||||
|
||||
|
||||
</android.support.v4.widget.DrawerLayout>
|
@ -1,30 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<ListView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:listSelector="@drawable/holo_selector"
|
||||
android:cacheColorHint="@null"
|
||||
android:id="@android:id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:smoothScrollbar="true"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"/>
|
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<view xmlns:android="http://schemas.oiandroid.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
class="it.gmariotti.changelibs.library.view.ChangeLogListView"
|
||||
android:id="@+id/view"
|
||||
android:layout_gravity="center" />
|
@ -1,50 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<EditText
|
||||
android:id="@android:id/edit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="text"
|
||||
android:imeOptions="actionDone"
|
||||
android:layout_margin="@dimen/dialog_edittext_margin"/>
|
||||
|
||||
<View
|
||||
android:background="?android:attr/listDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/line_dimension"/>
|
||||
|
||||
<Button
|
||||
android:background="@drawable/holo_selector"
|
||||
android:gravity="center_vertical|center_horizontal"
|
||||
android:id="@android:id/button1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/dialog_button_padding"
|
||||
android:maxLines="1"
|
||||
android:text="@android:string/ok"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
||||
</LinearLayout>
|
@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="vertical"
|
||||
android:fillViewport="true">
|
||||
|
||||
<view
|
||||
class="com.vmihalachi.turboeditor.EditorFragment$Editor"
|
||||
android:id="@id/editor"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@null"
|
||||
android:bufferType="normal"
|
||||
android:gravity="top|left"
|
||||
android:imeOptions="actionDone|flagNoFullscreen"
|
||||
android:inputType="textMultiLine|textImeMultiLine|textNoSuggestions"
|
||||
android:maxLength="@integer/editor_max_file_size"
|
||||
android:singleLine="false"
|
||||
android:text="@null"
|
||||
android:textSize="@dimen/text_size_editor" />
|
||||
</ScrollView>
|
||||
|
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="@color/navigation_drawer_background">
|
||||
|
||||
<ListView
|
||||
android:id="@id/android:list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fadingEdge="none"
|
||||
android:choiceMode="multipleChoiceModal"
|
||||
android:cacheColorHint="@android:color/transparent"/>
|
||||
|
||||
<include android:id="@android:id/empty"
|
||||
layout="@layout/fragment_no_file_open"/>
|
||||
</LinearLayout>
|
@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:textSize="@dimen/text_size_mega_title"
|
||||
android:fontFamily="sans-serif-light"
|
||||
android:text="@string/open_a_file"
|
||||
android:clickable="true" />
|
@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceListItem"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/item_drawer_list_padding"
|
||||
android:paddingRight="@dimen/item_drawer_list_padding"
|
||||
android:maxLines="1"
|
||||
android:fontFamily="sans-serif-light"
|
||||
android:background="?android:attr/activatedBackgroundIndicator"
|
||||
android:minHeight="@dimen/item_drawer_list_height"/>
|
@ -1,71 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/item_file_list_height">
|
||||
|
||||
<ImageView
|
||||
android:id="@android:id/icon"
|
||||
android:layout_width="@dimen/icon_dimension"
|
||||
android:layout_height="@dimen/icon_dimension"
|
||||
android:padding="@dimen/icon_padding"
|
||||
android:layout_alignParentLeft="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@android:id/icon"
|
||||
android:maxLines="1"
|
||||
android:textSize="@dimen/text_size_title"
|
||||
android:ellipsize="end"
|
||||
android:padding="@dimen/minimum_padding" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_toRightOf="@android:id/icon"
|
||||
android:layout_below="@android:id/title"
|
||||
android:padding="@dimen/minimum_padding">
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:textSize="@dimen/text_size_subtitle"
|
||||
android:enabled="false"
|
||||
android:ellipsize="end"/>
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/text2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="2"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="1"
|
||||
android:textSize="@dimen/text_size_subtitle"
|
||||
android:enabled="false"
|
||||
android:ellipsize="end"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@id/im_remove"
|
||||
android:showAsAction="always"
|
||||
android:icon="@android:drawable/ic_menu_close_clear_cancel"/>
|
||||
</menu>
|
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@id/im_open"
|
||||
android:title="@string/open_a_file"
|
||||
android:titleCondensed="@string/open"
|
||||
android:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@id/im_info"
|
||||
android:title="@string/info"
|
||||
android:showAsAction="ifRoom"/>
|
||||
</menu>
|
@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@id/im_button"
|
||||
android:showAsAction="ifRoom|withText"/>
|
||||
</menu>
|
@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@id/im_save"
|
||||
android:showAsAction="always"
|
||||
android:icon="@drawable/ic_action_tick"
|
||||
android:title="@string/salva"/>
|
||||
<item
|
||||
android:id="@id/im_undo"
|
||||
android:showAsAction="always"
|
||||
android:icon="@drawable/ic_action_undo"
|
||||
android:title="@string/testo_indietro"
|
||||
/>
|
||||
<item
|
||||
android:id="@id/im_redo"
|
||||
android:showAsAction="always"
|
||||
android:icon="@drawable/ic_action_redo"
|
||||
android:title="@string/testo_rifai"
|
||||
/>
|
||||
<item
|
||||
android:title="@string/preferenze"
|
||||
android:showAsAction="ifRoom|withText">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@id/im_editor_encoding"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/codifica"/>
|
||||
<item
|
||||
android:id="@id/im_wrap_text"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/wrap_the_text"
|
||||
android:checkable="true"/>
|
||||
<item
|
||||
android:id="@id/im_syntax_highlight"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/menu_syntax_highlight"
|
||||
android:checkable="true"/>
|
||||
</menu>
|
||||
</item>
|
||||
</menu>
|
@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aggiungi_account">Neues Benutzerkonto</string>
|
||||
<string name="attiva">Aktiv</string>
|
||||
<string name="cancella">Löschen</string>
|
||||
<string name="cancellazione">Dateien löschen…</string>
|
||||
<string name="caricamento">Laden…</string>
|
||||
<string name="cartella_locale_corrente">Aktueller lokaler Ordner</string>
|
||||
<string name="chiave_privata">Privater Schlüssel</string>
|
||||
<string name="chiaro">Hell</string>
|
||||
<string name="codifica">Verschlüsseln</string>
|
||||
<string name="condividi">Teilen</string>
|
||||
<string name="crea_cartella_locale">Neuer lokaler Ordner</string>
|
||||
<string name="crea_cartella_remota">Neuer Remote-Ordner</string>
|
||||
<string name="disconneti">Trennen</string>
|
||||
<string name="default_local_folder">Standard lokaler Ordner</string>
|
||||
<string name="dove_scaricare">Wohin herunterladen?</string>
|
||||
<string name="download">Herunterladen</string>
|
||||
<string name="download_completato">Download abgeschlossen</string>
|
||||
<string name="duplicate">Duplizieren</string>
|
||||
<string name="fatto">Fertig</string>
|
||||
<string name="home">Home</string>
|
||||
<string name="host">Server</string>
|
||||
<string name="info">Informationen</string>
|
||||
<string name="locale">lokal</string>
|
||||
<string name="log_in">Einloggen…</string>
|
||||
<string name="modifica">bearbeiten</string>
|
||||
<string name="muovi">Verschieben</string>
|
||||
<string name="nascondi">Ausblenden</string>
|
||||
<string name="nome_app">Turbo Client</string>
|
||||
<string name="nome_app_turbo_editor">Turbo-Editor</string>
|
||||
<string name="nome_utente">Benutzername</string>
|
||||
<string name="passiva">Passiver Modus</string>
|
||||
<string name="passphrase">Passphrase</string>
|
||||
<string name="password">Kennwort</string>
|
||||
<string name="password_summary">Leave it empty to prompt for it every session</string>
|
||||
<string name="porta">Port</string>
|
||||
<string name="preferenze">Einstellungen</string>
|
||||
<string name="remoto">Remote</string>
|
||||
<string name="riavva_per_tema">Um das Theme zu ändern, starten Sie die Anwendung neu</string>
|
||||
<string name="rinomina">Umbenennen</string>
|
||||
<string name="root">Standardverzeichnis</string>
|
||||
<string name="salva">Speichern</string>
|
||||
<string name="scuro">Dunkel</string>
|
||||
<string name="seleziona">Auswählen</string>
|
||||
<string name="seleziona_account">Benutzerkonto auswählen</string>
|
||||
<string name="sicuro">Sind sie sicher?</string>
|
||||
<string name="something_failed">Something failed</string>
|
||||
<string name="skip_same_file">Dieselbe Datei nicht übertragen</string>
|
||||
<string name="tema_app">Design</string>
|
||||
<string name="tipo_connessione">Verbindungsart</string>
|
||||
<string name="tipo_protocollo">Protokoll</string>
|
||||
<string name="un_altra_cartella">Anderer Ordner</string>
|
||||
<string name="use_passphrase">Passphrase benutzen</string>
|
||||
<string name="upload">Hochladen</string>
|
||||
<string name="upload_completato">Hochladen abgeschlossen</string>
|
||||
<string name="what_to_do">Was möchten Sie tun?</string>
|
||||
<string name="wrap_the_text">Zeilenumbruch</string>
|
||||
<string name="menu_syntax_highlight">Syntax Hervorhebung</string>
|
||||
<string name="testo_indietro">Ungeschehen machen</string>
|
||||
<string name="testo_rifai">Rückgängig machen</string>
|
||||
<string name="sync">Synchronisieren</string>
|
||||
<string name="remote_folder_to_sync">Entfernten Ordner zum synchronisieren</string>
|
||||
<string name="local_folder_to_sync">Lokalen Ordner zum synchronisieren</string>
|
||||
<string name="vota">Bewerten</string>
|
||||
<string name="inapp_unavailable">Kann keine Verbindung zu Google Play herstellen</string>
|
||||
<string name="inapp_description">Unterstützen Sie die Entwicklung weiterer großer Features</string>
|
||||
<string name="upgrade_premium">Auf Premium upgraden</string>
|
||||
<string name="upgrade_premium_summary">Auf Premium upgraden und die Entwicklung von Turbo Client unterstützen</string>
|
||||
<string name="download_unlocked_version">Entsperrte Version herunterladen</string>
|
||||
<string name="inapp_second_description">Was ist ihnen Turbo Client wert? Geben sie einen Preis ein! </string>
|
||||
<string name="inapp_first_description">Upgraden um diese Funktion freizuschalten:</string>
|
||||
<string name="inapp_item_openandeditfiles">Beliebige Dateien öffnen und ändern</string>
|
||||
<string name="inapp_item_backup_service">Backup Service für Backup und sichere Wiederherstellung Ihrer Daten. </string>
|
||||
<string name="inapp_unlock_features">Premium Funktionen freischalten</string>
|
||||
<string name="inapp_seconditem_description">Ich mag diese App!</string>
|
||||
<string name="inapp_thirditem_description">Ich liebe diese App!</string>
|
||||
<string name="backup_accounts">Backup the accounts</string>
|
||||
<string name="restore_accounts">Accounts wiederherstellen</string>
|
||||
<string name="share_accounts">Backup and share the accounts</string>
|
||||
<string name="importing_accounts">Konten werden importiert...</string>
|
||||
<string name="exporting_accounts">Konten werden exportiert...</string>
|
||||
<string name="backup_not_found">Keine Sicherungen gefunden</string>
|
||||
<string name="err_cant_open_the_file">Datei kann nicht geöffnet werden</string>
|
||||
<string name="err_temp_folder_doesnt_exist">Temporärer Ordner ist nicht vorhanden</string>
|
||||
<string name="err_occured">Es ist ein Fehler aufgetreten</string>
|
||||
<string name="ui_ux">Benutzeroberfläche</string>
|
||||
<string name="folder">Ordner</string>
|
||||
<string name="remove">Entfernen</string>
|
||||
<string name="modification_date">Änderungsdatum</string>
|
||||
<string name="name">Name </string>
|
||||
<string name="size">Größe</string>
|
||||
<string name="sort">Sortieren</string>
|
||||
<string name="open">Öffnen</string>
|
||||
<string name="file_modified">Die Datei %1$s wurde geändert? Möchten Sie sie hochladen?</string>
|
||||
<string name="file_saved_with_success">Die Datei %1$s wurde erfolgreich gespeichert!</string>
|
||||
<string name="number_of_things_selected">%1$d ausgewählt</string>
|
||||
<string name="crea_file_remoto">New remote file</string>
|
||||
<string name="new_local_file">Neue lokale Datei</string>
|
||||
<string name="create_new_account">Erstelle ein neues Benutzerkonto</string>
|
||||
<string name="create_new_account_to_start">Erstellen Sie ein neues Konto um zu starten.</string>
|
||||
<string name="type">Typ</string>
|
||||
<string name="send_feedback">Feedback senden</string>
|
||||
<string name="copy_url">URL kopieren</string>
|
||||
<string name="cut">Ausschneiden</string>
|
||||
<string name="paste">einfügen</string>
|
||||
<string name="advanced">Erweitert</string>
|
||||
<string name="auto">Auto</string>
|
||||
<string name="bytes">Bytes</string>
|
||||
<string name="unit_measurement_for_file_size">Maßeinheit für Dateigröße</string>
|
||||
<string name="open_source_license">Open Source Lizenzen</string>
|
||||
<string name="open_source_license_summary">Open-Source-Lizenzen anzeigen</string>
|
||||
<string name="show_navigation_breadcrumb">Show navigation breadcrumb</string>
|
||||
<string name="open_a_file">Datei öffnen</string>
|
||||
<string name="open_this_time_only">Nur dieses Mal öffnen</string>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Informationen</string>
|
||||
<string name="aboutactivity_app_category">App-Informationen</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Sonstiges</string>
|
||||
<string name="aboutactivity_version">v %1$s</string>
|
||||
<string name="aboutactivity_author">Autor</string>
|
||||
<string name="aboutactivity_authorsite">Website</string>
|
||||
<string name="aboutactivity_authorsite_summary">Die Website des Autors anzeigen</string>
|
||||
<string name="aboutactivity_authoremail">E-Mail</string>
|
||||
<string name="aboutactivity_authoremail_summary">Dem Autor eine E-Mail senden</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Twitter Profil anzeigen</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google\u002B</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Google\u002B Profil anzeigen</string>
|
||||
<string name="aboutactivity_betatester">Werde Betatester</string>
|
||||
<string name="aboutactivity_betatester_summary">Sei Teil der Community um Beta-Updates zu erhalten</string>
|
||||
<string name="aboutactivity_helptranslate">Übersetze diese Anwendung</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Korrigiere Fehler oder füge eine neue Übersetzung hinzu</string>
|
||||
<string name="aboutactivity_readme">Readme</string>
|
||||
<string name="aboutactivity_readme_summary">Readme-Datei anzeigen</string>
|
||||
<string name="aboutactivity_faq">Häufige Fragen / FAQ</string>
|
||||
<string name="aboutactivity_faq_summary">App-FAQ anzeigen</string>
|
||||
<string name="aboutactivity_changelog">Changelog</string>
|
||||
<string name="aboutactivity_changelog_summary">Changelog anzeigen</string>
|
||||
<string name="aboutactivity_license">Nutzungsbedingungen</string>
|
||||
<string name="aboutactivity_license_summary">Nutzungsbedingungen anzeigen</string>
|
||||
<string name="aboutactivity_license_accept">Akzeptieren</string>
|
||||
<string name="aboutactivity_license_refuse">Ablehnen</string>
|
||||
<string name="aboutactivity_privacy">Datenschutzrichtlinien</string>
|
||||
<string name="aboutactivity_privacy_summary">Datenschutzrichtlinien anzeigen</string>
|
||||
<string name="aboutactivity_todo">ToDo-Liste</string>
|
||||
<string name="aboutactivity_todo_summary">ToDo-Liste anzeigen</string>
|
||||
<string name="aboutactivity_donate">Spenden</string>
|
||||
<string name="aboutactivity_donate_summary">Danke, dass du mich unterstützst</string>
|
||||
<string name="aboutactivity_market">Play Store</string>
|
||||
<string name="aboutactivity_market_summary">Feedback abgeben</string>
|
||||
<string name="aboutactivity_authormarket">Weitere App</string>
|
||||
<string name="aboutactivity_authormarket_summary">Weitere Apps des Autors anzeigen</string>
|
||||
</resources>
|
@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aggiungi_account">Νέος λογαριασμός</string>
|
||||
<string name="attiva">Ενεργό</string>
|
||||
<string name="cancella">Διαγραφή</string>
|
||||
<string name="cancellazione">Διαγραφή αρχείων…</string>
|
||||
<string name="caricamento">Φόρτωση…</string>
|
||||
<string name="cartella_locale_corrente">Τρέχον τοπικός φάκελος</string>
|
||||
<string name="chiave_privata">Ιδιωτικό Κλειδί</string>
|
||||
<string name="chiaro">Φωτεινό</string>
|
||||
<string name="codifica">Κωδικοποίηση</string>
|
||||
<string name="condividi">Μοίρασε</string>
|
||||
<string name="crea_cartella_locale">Νέος τοπικός φάκελος</string>
|
||||
<string name="crea_cartella_remota">Νέος απομακρυσμένος φάκελος</string>
|
||||
<string name="disconneti">Αποσύνδεση</string>
|
||||
<string name="default_local_folder">Προεπιλεγμένος τοπικός φάκελος</string>
|
||||
<string name="dove_scaricare">Που να γίνει η λήψη;</string>
|
||||
<string name="download">Λήψη</string>
|
||||
<string name="download_completato">Η λήψη ολοκληρώθηκε</string>
|
||||
<string name="duplicate">Διπλότυπο</string>
|
||||
<string name="fatto">Ολοκληρώθηκε</string>
|
||||
<string name="home">Αρχή</string>
|
||||
<string name="host">Διακομιστής</string>
|
||||
<string name="info">Πληροφορίες</string>
|
||||
<string name="locale">Τοπικά</string>
|
||||
<string name="log_in">Σύνδεση με…</string>
|
||||
<string name="modifica">Επεξεργασία</string>
|
||||
<string name="muovi">Μετακίνηση</string>
|
||||
<string name="nascondi">Απόκρυψη</string>
|
||||
<string name="nome_app">Turbo Client</string>
|
||||
<string name="nome_app_turbo_editor">Turbo Editor</string>
|
||||
<string name="nome_utente">Όνομα χρήστη</string>
|
||||
<string name="passiva">Παθητικό</string>
|
||||
<string name="passphrase">Συνθηματικό</string>
|
||||
<string name="password">Κωδικός</string>
|
||||
<string name="password_summary">Αφήστε το κενό για να σας ρωτάει σε κάθε συνεδρία</string>
|
||||
<string name="porta">Θύρα</string>
|
||||
<string name="preferenze">Προτιμήσεις</string>
|
||||
<string name="remoto">Απομακρυσμένα</string>
|
||||
<string name="riavva_per_tema">Για να αλλάξετε το θέμα, κάντε επανεκκίνηση της εφαρμογής</string>
|
||||
<string name="rinomina">Μετονομασία</string>
|
||||
<string name="root">Προεπιλεγμένος απομακρυσμένος φάκελος</string>
|
||||
<string name="salva">Αποθήκευση</string>
|
||||
<string name="scuro">Σκοτεινό</string>
|
||||
<string name="seleziona">Επιλογή</string>
|
||||
<string name="seleziona_account">Επιλέξτε έναν λογαριασμό</string>
|
||||
<string name="sicuro">Θέλετε σίγουρα;</string>
|
||||
<string name="something_failed">Προέκυψε κάποια αποτυχία</string>
|
||||
<string name="skip_same_file">Να μην γίνει μεταφορά του ίδιου αρχείου</string>
|
||||
<string name="tema_app">Θέμα εφαρμογής</string>
|
||||
<string name="tipo_connessione">Τύπος σύνδεσης</string>
|
||||
<string name="tipo_protocollo">Τύπος πρωτοκόλλου</string>
|
||||
<string name="un_altra_cartella">Άλλος φάκελος</string>
|
||||
<string name="use_passphrase">Χρησιμοποιήστε ένα Συνθηματικό</string>
|
||||
<string name="upload">Αποστολή</string>
|
||||
<string name="upload_completato">Το ανέβασμα ολοκληρώθηκε</string>
|
||||
<string name="what_to_do">Τι θέλετε να κάνετε;</string>
|
||||
<string name="wrap_the_text">Αναδίπλωση κειμένου</string>
|
||||
<string name="menu_syntax_highlight">Επισήμανση σύνταξης</string>
|
||||
<string name="testo_indietro">Αναίρεση</string>
|
||||
<string name="testo_rifai">Ακύρωση αναίρεσης</string>
|
||||
<string name="sync">Συγχρονισμός</string>
|
||||
<string name="remote_folder_to_sync">Απομακρυσμένος φάκελος για συγχρονισμό</string>
|
||||
<string name="local_folder_to_sync">Τοπικός φάκελος για συγχρονισμό</string>
|
||||
<string name="vota">Βαθμολογία</string>
|
||||
<string name="inapp_unavailable">Δεν είναι δυνατή η επικοινωνία με το Google Play</string>
|
||||
<string name="inapp_description">Και υποστιρίξτε την ανάπτυξη άλλων σπουδαίων δυνατοτήτων</string>
|
||||
<string name="upgrade_premium">Αναβάθμιση σε Premium</string>
|
||||
<string name="upgrade_premium_summary">Αναβάθμιση σε Premium και υποστήριξη της ανάπτυξης του Turbo Client!</string>
|
||||
<string name="download_unlocked_version">Κατεβάστε την ξεκλειδωμένη έκδοση</string>
|
||||
<string name="inapp_second_description">Τι αξίζει το Turbo Client για εσάς; Ορίστε την τιμή! </string>
|
||||
<string name="inapp_first_description">Αναβάθμιση για ξεκλείδωμα των χαρακτηριστικών:</string>
|
||||
<string name="inapp_item_openandeditfiles">Δυνατότητα να ανοίξετε και να τροποποιήσετε οποιοδήποτε τύπο αρχείου.</string>
|
||||
<string name="inapp_item_backup_service">Υπηρεσία αντιγράφων ασφαλείας για να δημιουργήσετε αντίγραφα και να επαναφέρετε τα δεδομένα σας με ασφάλεια. </string>
|
||||
<string name="inapp_unlock_features">Ξεκλείδωμα των Premium χαρακτηριστικών</string>
|
||||
<string name="inapp_seconditem_description">Συμπαθώ πραγματικά αυτή την εφαρμογή!</string>
|
||||
<string name="inapp_thirditem_description">Αγαπώ αυτή την εφαρμογή!</string>
|
||||
<string name="backup_accounts">Αντίγραφα ασφαλείας λογαριασμών</string>
|
||||
<string name="restore_accounts">Επαναφορά των λογαριασμών</string>
|
||||
<string name="share_accounts">Αντίγραφα ασφαλείας και μοίρασμα λογαριασμών</string>
|
||||
<string name="importing_accounts">Εισαγωγή λογαριασμών…</string>
|
||||
<string name="exporting_accounts">Εξαγωγή λογαριασμών...</string>
|
||||
<string name="backup_not_found">Δεν βρέθηκε κανένα αντίγραφο ασφαλείας</string>
|
||||
<string name="err_cant_open_the_file">Δεν μπορεί να ανοίξει το αρχείο</string>
|
||||
<string name="err_temp_folder_doesnt_exist">Ο φάκελος προσωρινής αποθήκευσης δεν υπάρχει</string>
|
||||
<string name="err_occured">Προέκυψε ένα σφάλμα</string>
|
||||
<string name="ui_ux">Περιβάλλον χρήσης</string>
|
||||
<string name="folder">Φάκελος</string>
|
||||
<string name="remove">Αφαίρεση</string>
|
||||
<string name="modification_date">Ημ. τροποποίησης</string>
|
||||
<string name="name">Όνομα</string>
|
||||
<string name="size">Μέγεθος</string>
|
||||
<string name="sort">Ταξινόμηση</string>
|
||||
<string name="open">Άνοιγμα</string>
|
||||
<string name="file_modified">Το αρχείο %1$s τροποποιήθηκε, θέλετε να το ανεβάσετε;</string>
|
||||
<string name="file_saved_with_success">Το αρχείο %1$s αποθηκεύτηκε με επιτυχία!</string>
|
||||
<string name="number_of_things_selected">%1$d επιλέχθηκε</string>
|
||||
<string name="crea_file_remoto">Νέα απομακρυσμένο αρχείο</string>
|
||||
<string name="new_local_file">Νέο τοπικό αρχείο</string>
|
||||
<string name="create_new_account">Δημιουργία νέου λογαριασμού</string>
|
||||
<string name="create_new_account_to_start">Δημιουργήσετε ένα νέο λογαριασμό για να ξεκινήσετε.</string>
|
||||
<string name="type">Τύπος</string>
|
||||
<string name="send_feedback">Αποστολή σχολίων</string>
|
||||
<string name="copy_url">Αντιγραφή συνδέσμου</string>
|
||||
<string name="cut">Αποκοπή</string>
|
||||
<string name="paste">επικόληση</string>
|
||||
<string name="advanced">Για προχωρημένους</string>
|
||||
<string name="auto">Αυτόματα</string>
|
||||
<string name="bytes">Bytes</string>
|
||||
<string name="unit_measurement_for_file_size">Μονάδα μέτρησης για το μέγεθος του αρχείου</string>
|
||||
<string name="open_source_license">Άδειες χρήσης ανοιχτού κώδικα</string>
|
||||
<string name="open_source_license_summary">Προβολή αδειών χρήσης ανοιχτού κώδικα</string>
|
||||
<string name="show_navigation_breadcrumb">Εμφάνιση βοηθού πλοήγησης</string>
|
||||
<string name="open_a_file">Άνοιγμα αρχείου</string>
|
||||
<string name="open_this_time_only">Open this time only</string>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Πληροφορίες</string>
|
||||
<string name="aboutactivity_app_category">Πληροφορίες εφαρμογής</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Διάφορα</string>
|
||||
<string name="aboutactivity_version">Έκδοση %1$s</string>
|
||||
<string name="aboutactivity_author">Δημιουργός</string>
|
||||
<string name="aboutactivity_authorsite">Ιστότοπος δημιουργού</string>
|
||||
<string name="aboutactivity_authorsite_summary">Προβολή ιστότοπου δημιουργού</string>
|
||||
<string name="aboutactivity_authoremail">Email δημιουργού</string>
|
||||
<string name="aboutactivity_authoremail_summary">Αποστολή email στον δημιουργό</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Προβολή σελίδας στο Twitter</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google Plus</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Προβολή σελίδας στο Google Plus</string>
|
||||
<string name="aboutactivity_betatester">Γίνετε beta tester</string>
|
||||
<string name="aboutactivity_betatester_summary">Γίνετε μέρος της κοινότητας για να λαμβάνετε ενημερώσεις beta εκδόσεων</string>
|
||||
<string name="aboutactivity_helptranslate">Μεταφράστε την εφαρμογή</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Διορθώσει κάποια λάθη ή προσθέσετε μια νέα μετάφραση</string>
|
||||
<string name="aboutactivity_readme">Αρχείο πληροφοριών</string>
|
||||
<string name="aboutactivity_readme_summary">Διαβάστε την αναφορά</string>
|
||||
<string name="aboutactivity_faq">ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ</string>
|
||||
<string name="aboutactivity_faq_summary">Προβολή ΣΕΑ εφαρμογής</string>
|
||||
<string name="aboutactivity_changelog">Αρχείο καταγραφής αλλαγών</string>
|
||||
<string name="aboutactivity_changelog_summary">Προβολή αρχείου καταγραφής αλλαγών</string>
|
||||
<string name="aboutactivity_license">Όροι παροχής υπηρεσιών</string>
|
||||
<string name="aboutactivity_license_summary">Διαβάστε τους όρους παροχής υπηρεσιών</string>
|
||||
<string name="aboutactivity_license_accept">Αποδοχή</string>
|
||||
<string name="aboutactivity_license_refuse">Άρνηση</string>
|
||||
<string name="aboutactivity_privacy">Πολιτική απορρήτου</string>
|
||||
<string name="aboutactivity_privacy_summary">Διαβάζετε την πολιτική απορρήτου</string>
|
||||
<string name="aboutactivity_todo">Λίστα ToDo</string>
|
||||
<string name="aboutactivity_todo_summary">Διαβάστε τη λίστα todo</string>
|
||||
<string name="aboutactivity_donate">Κάντε μια δωρεά</string>
|
||||
<string name="aboutactivity_donate_summary">Σας ευχαριστούμε για την υποστήριξη!</string>
|
||||
<string name="aboutactivity_market">Play Store</string>
|
||||
<string name="aboutactivity_market_summary">Αποστολή σχολίων και βαθμολογίας!</string>
|
||||
<string name="aboutactivity_authormarket">Κατάστημα του δημιουργού</string>
|
||||
<string name="aboutactivity_authormarket_summary">Προβολή άλλων εφαρμογών του δημιουργού!</string>
|
||||
</resources>
|
@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aggiungi_account">Nuovo account</string>
|
||||
<string name="attiva">Attiva</string>
|
||||
<string name="cancella">Cancella</string>
|
||||
<string name="cancellazione">Cancella files…</string>
|
||||
<string name="caricamento">Caricamento…</string>
|
||||
<string name="cartella_locale_corrente">Cartella locale corrente</string>
|
||||
<string name="chiave_privata">Chiave Privata</string>
|
||||
<string name="chiaro">Chiaro</string>
|
||||
<string name="codifica">Codifica</string>
|
||||
<string name="condividi">Condividi</string>
|
||||
<string name="crea_cartella_locale">Nuova cartella locale</string>
|
||||
<string name="crea_cartella_remota">Nuova cartella remota</string>
|
||||
<string name="disconneti">Disconnetti</string>
|
||||
<string name="default_local_folder">Cartella locale di default</string>
|
||||
<string name="dove_scaricare">Dove scaricare?</string>
|
||||
<string name="download">Scarica</string>
|
||||
<string name="download_completato">Completato il download</string>
|
||||
<string name="duplicate">Duplica</string>
|
||||
<string name="fatto">Fatto</string>
|
||||
<string name="home">Home</string>
|
||||
<string name="host">Host</string>
|
||||
<string name="info">Informazioni</string>
|
||||
<string name="locale">Locale</string>
|
||||
<string name="log_in">Accesso in corso…</string>
|
||||
<string name="modifica">Modifica</string>
|
||||
<string name="muovi">Sposta</string>
|
||||
<string name="nascondi">Nascondi</string>
|
||||
<string name="nome_app">Turbo Client</string>
|
||||
<string name="nome_app_turbo_editor">Turbo Editor</string>
|
||||
<string name="nome_utente">Nome Utente</string>
|
||||
<string name="passiva">Passiva</string>
|
||||
<string name="passphrase">Frase segreta</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="password_summary">Lasciala vuota per richiederla a ogni sessione</string>
|
||||
<string name="porta">Porta</string>
|
||||
<string name="preferenze">Preferenze</string>
|
||||
<string name="remoto">Remoto</string>
|
||||
<string name="riavva_per_tema">Per cambiare il tema, riavvia l applicazione</string>
|
||||
<string name="rinomina">Rinomina</string>
|
||||
<string name="root">Root</string>
|
||||
<string name="salva">Salva</string>
|
||||
<string name="scuro">Scuro</string>
|
||||
<string name="seleziona">Seleziona</string>
|
||||
<string name="seleziona_account">Seleziona un account</string>
|
||||
<string name="sicuro">Sei sicuro?</string>
|
||||
<string name="something_failed">Qualcosa è fallito</string>
|
||||
<string name="skip_same_file">Non trasferire lo stesso file</string>
|
||||
<string name="tema_app">Tema</string>
|
||||
<string name="tipo_connessione">Tipo di Connessione</string>
|
||||
<string name="tipo_protocollo">Tipo di Protocollo</string>
|
||||
<string name="un_altra_cartella">Un altra cartella</string>
|
||||
<string name="use_passphrase">Usa una frase segreta</string>
|
||||
<string name="upload">Carica</string>
|
||||
<string name="upload_completato">Caricamento completato</string>
|
||||
<string name="what_to_do">Cosa vuoi fare?</string>
|
||||
<string name="wrap_the_text">Vai a capo</string>
|
||||
<string name="menu_syntax_highlight">Colora la sinstassi</string>
|
||||
<string name="testo_indietro">Annulla</string>
|
||||
<string name="testo_rifai">Rifai</string>
|
||||
<string name="sync">Sincronizza</string>
|
||||
<string name="remote_folder_to_sync">Cartella remota da sincronizzare</string>
|
||||
<string name="local_folder_to_sync">Cartella locale da sincronizzare</string>
|
||||
<string name="vota">Vota</string>
|
||||
<string name="inapp_unavailable">Impossibile contattare il Google Play</string>
|
||||
<string name="inapp_description">E supporta lo sviluppo di nuove funzionalita</string>
|
||||
<string name="upgrade_premium">Aggiorna a Premium</string>
|
||||
<string name="upgrade_premium_summary">Aggiorna a Premium e supporta lo sviluppo di Turbo Client!</string>
|
||||
<string name="download_unlocked_version">Scarica la versione sbloccata</string>
|
||||
<string name="inapp_second_description">Quanto vale Turbo Client per te? Metti il tuo prezzo! </string>
|
||||
<string name="inapp_first_description">Aggiorna per sbloccare queste funzionalita:</string>
|
||||
<string name="inapp_item_openandeditfiles">Abilita di aprire e modificare ogni tipo di file</string>
|
||||
<string name="inapp_item_backup_service">Servizio di backup per salvare e caricare i tuoi account in modo sicuro. </string>
|
||||
<string name="inapp_unlock_features">Sblocca le funzioni Premium</string>
|
||||
<string name="inapp_seconditem_description">Mi piace l\'app!</string>
|
||||
<string name="inapp_thirditem_description">Amo quest\'app!</string>
|
||||
<string name="backup_accounts">Fai un backup degli account</string>
|
||||
<string name="restore_accounts">Ripristina gli account</string>
|
||||
<string name="share_accounts">Salva e condividi gli account</string>
|
||||
<string name="importing_accounts">Importando gli account…</string>
|
||||
<string name="exporting_accounts">Esportando gli account…</string>
|
||||
<string name="backup_not_found">Nessun backup trovato</string>
|
||||
<string name="err_cant_open_the_file">Impossibile aprire il file</string>
|
||||
<string name="err_temp_folder_doesnt_exist">La cartella temporanea non esiste</string>
|
||||
<string name="err_occured">Si è verificato un errore</string>
|
||||
<string name="ui_ux">Interfaccia utente</string>
|
||||
<string name="folder">Cartella</string>
|
||||
<string name="remove">Rimuovi</string>
|
||||
<string name="modification_date">Data della modifica</string>
|
||||
<string name="name">Nome</string>
|
||||
<string name="size">Peso</string>
|
||||
<string name="sort">Ordina</string>
|
||||
<string name="open">Apri</string>
|
||||
<string name="file_modified">Il file %1$s è stato modificato, vuoi caricarlo?</string>
|
||||
<string name="file_saved_with_success">Il file %1$s è stato salvato con successo!</string>
|
||||
<string name="number_of_things_selected">%1$d selezionato</string>
|
||||
<string name="crea_file_remoto">Nuovo file remoto</string>
|
||||
<string name="new_local_file">Nuovo file locale</string>
|
||||
<string name="create_new_account">Crea un nuovo account</string>
|
||||
<string name="create_new_account_to_start">Creare un nuovo account per iniziare.</string>
|
||||
<string name="type">Tipo</string>
|
||||
<string name="send_feedback">Invia Feedback</string>
|
||||
<string name="copy_url">Copia l\'URL</string>
|
||||
<string name="cut">Taglia</string>
|
||||
<string name="paste">Incolla</string>
|
||||
<string name="advanced">Avanzate</string>
|
||||
<string name="auto">Automatico</string>
|
||||
<string name="bytes">Byte</string>
|
||||
<string name="unit_measurement_for_file_size">Unità di misura per la dimensione del file</string>
|
||||
<string name="open_source_license">Licenze Open Source</string>
|
||||
<string name="open_source_license_summary">Visualizza licenze open source</string>
|
||||
<string name="show_navigation_breadcrumb">Visualizza navigazione breadcrumb</string>
|
||||
<string name="open_a_file">Apri come file</string>
|
||||
<string name="open_this_time_only">Apri solo questa volta</string>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Informazioni</string>
|
||||
<string name="aboutactivity_app_category">Informazioni applicazione</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Varie</string>
|
||||
<string name="aboutactivity_version">Versione %1$s</string>
|
||||
<string name="aboutactivity_author">Autore</string>
|
||||
<string name="aboutactivity_authorsite">Sito Web Autore</string>
|
||||
<string name="aboutactivity_authorsite_summary">Visualizza il sito dell\'autore</string>
|
||||
<string name="aboutactivity_authoremail">Email Autore</string>
|
||||
<string name="aboutactivity_authoremail_summary">Manda una mail all\'autore</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Visualizza la pagina twitter</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google Plus</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Visualizza pagina Google Plus</string>
|
||||
<string name="aboutactivity_betatester">Diventa un beta tester</string>
|
||||
<string name="aboutactivity_betatester_summary">Diventa una parte della gruppo per ricevere gli aggiornamenti beta</string>
|
||||
<string name="aboutactivity_helptranslate">Traduci l\'applicazione</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Correggi alcuni errori o aggiunggi una nuova traduzione</string>
|
||||
<string name="aboutactivity_readme">Leggimi</string>
|
||||
<string name="aboutactivity_readme_summary">Leggi la guida</string>
|
||||
<string name="aboutactivity_faq">Domande frequenti</string>
|
||||
<string name="aboutactivity_faq_summary">Visualizza le FAQ</string>
|
||||
<string name="aboutactivity_changelog">ChangeLog</string>
|
||||
<string name="aboutactivity_changelog_summary">Visualizza i cambiamenti</string>
|
||||
<string name="aboutactivity_license">Termini di servizio</string>
|
||||
<string name="aboutactivity_license_summary">Leggi i termini di servizio</string>
|
||||
<string name="aboutactivity_license_accept">Accetta</string>
|
||||
<string name="aboutactivity_license_refuse">Rifiuta</string>
|
||||
<string name="aboutactivity_privacy">Norme sulla privacy</string>
|
||||
<string name="aboutactivity_privacy_summary">Leggi le norme sulla privacy</string>
|
||||
<string name="aboutactivity_todo">Da Fare</string>
|
||||
<string name="aboutactivity_todo_summary">Leggi la lista delle cosa da fare</string>
|
||||
<string name="aboutactivity_donate">Fai una donazione</string>
|
||||
<string name="aboutactivity_donate_summary">Grazie per il tuo supporto!</string>
|
||||
<string name="aboutactivity_market">Android Market</string>
|
||||
<string name="aboutactivity_market_summary">Visualizza l\'app nel market!</string>
|
||||
<string name="aboutactivity_authormarket">Market Autore</string>
|
||||
<string name="aboutactivity_authormarket_summary">Visualizza altre app!</string>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Maklumat</string>
|
||||
<string name="aboutactivity_app_category">Maklumat Aplikasi</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Lain-lain</string>
|
||||
<string name="aboutactivity_version">Versi %1$s</string>
|
||||
<string name="aboutactivity_author">Pencipta</string>
|
||||
<string name="aboutactivity_authorsite">Laman Pencipta</string>
|
||||
<string name="aboutactivity_authorsite_summary">Buka laman pencipta</string>
|
||||
<string name="aboutactivity_authoremail">Hubungi pencipta</string>
|
||||
<string name="aboutactivity_authoremail_summary">Hantar e-mail kepada pencipta</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Buka laman Twitter</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google Plus</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Buka laman Google Plus</string>
|
||||
<string name="aboutactivity_betatester">Menjadi penguji versi beta</string>
|
||||
<string name="aboutactivity_betatester_summary">Jadi sebahagian daripada komuniti untuk menerima versi beta terkini</string>
|
||||
<string name="aboutactivity_helptranslate">Menterjemahkan aplikasi</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Membetulkan kesalahan atau menambah terjemahan baru</string>
|
||||
<string name="aboutactivity_readme">Read Me</string>
|
||||
<string name="aboutactivity_readme_summary">Baca rujukan</string>
|
||||
<string name="aboutactivity_faq">FAQ</string>
|
||||
<string name="aboutactivity_faq_summary">Tunjukkan FAQ aplikasi</string>
|
||||
<string name="aboutactivity_changelog">ChangeLog</string>
|
||||
<string name="aboutactivity_changelog_summary">Tunjukkan changelog aplikasi</string>
|
||||
<string name="aboutactivity_license">Syarat-syarat Penggunaan</string>
|
||||
<string name="aboutactivity_license_summary">Baca syarat-syarat Penggunaan</string>
|
||||
<string name="aboutactivity_license_accept">Terima</string>
|
||||
<string name="aboutactivity_license_refuse">Menolak</string>
|
||||
<string name="aboutactivity_privacy">Dasar privasi</string>
|
||||
<string name="aboutactivity_privacy_summary">Baca dasar privasi</string>
|
||||
<string name="aboutactivity_todo">Senarai cadangan penambahbaikan</string>
|
||||
<string name="aboutactivity_todo_summary">Baca cadangan penambahbaikan</string>
|
||||
<string name="aboutactivity_donate">Beri sumbangan</string>
|
||||
<string name="aboutactivity_donate_summary">Terima kasih kerana menyokong saya!</string>
|
||||
<string name="aboutactivity_market">Play Store</string>
|
||||
<string name="aboutactivity_market_summary">Hantar maklum balas dan menilai aplikasi!</string>
|
||||
<string name="aboutactivity_authormarket">Lebih banyak berkenaan pencipta</string>
|
||||
<string name="aboutactivity_authormarket_summary">Tunjukkan semua aplikasi pencipta!</string>
|
||||
</resources>
|
@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aggiungi_account">Nieuwe account</string>
|
||||
<string name="attiva">Actief</string>
|
||||
<string name="cancella">Verwijderen</string>
|
||||
<string name="cancellazione">Bestanden verwijderen…</string>
|
||||
<string name="caricamento">Laden…</string>
|
||||
<string name="cartella_locale_corrente">Huidige lokale map</string>
|
||||
<string name="chiave_privata">Privesleutel</string>
|
||||
<string name="chiaro">Licht</string>
|
||||
<string name="codifica">Codering</string>
|
||||
<string name="condividi">Delen</string>
|
||||
<string name="crea_cartella_locale">Nieuwe lokale map</string>
|
||||
<string name="crea_cartella_remota">Nieuwe externe map</string>
|
||||
<string name="disconneti">Loskoppelen</string>
|
||||
<string name="default_local_folder">Standaard lokale map</string>
|
||||
<string name="dove_scaricare">Waar wilt u dit bestand opslaan?</string>
|
||||
<string name="download">Downloaden</string>
|
||||
<string name="download_completato">Download voltooid</string>
|
||||
<string name="duplicate">Dupliceer</string>
|
||||
<string name="fatto">Klaar</string>
|
||||
<string name="home">Home</string>
|
||||
<string name="host">Host</string>
|
||||
<string name="info">Info</string>
|
||||
<string name="locale">Lokaal</string>
|
||||
<string name="log_in">Inloggen…</string>
|
||||
<string name="modifica">Bewerken</string>
|
||||
<string name="muovi">Verplaatsen</string>
|
||||
<string name="nascondi">Verberg</string>
|
||||
<string name="nome_app">Turbo Client</string>
|
||||
<string name="nome_app_turbo_editor">Turbo Editor</string>
|
||||
<string name="nome_utente">Gebruikersnaam</string>
|
||||
<string name="passiva">Passief</string>
|
||||
<string name="passphrase">Wachtwoord</string>
|
||||
<string name="password">Wachtwoord</string>
|
||||
<string name="password_summary">Leeg laten om bij elke sessie te vragen</string>
|
||||
<string name="porta">Poort</string>
|
||||
<string name="preferenze">Voorkeuren</string>
|
||||
<string name="remoto">Extern</string>
|
||||
<string name="riavva_per_tema">Start de applicatie opnieuw om het thema van kracht te laten worden</string>
|
||||
<string name="rinomina">Hernoemen</string>
|
||||
<string name="root">Root</string>
|
||||
<string name="salva">Opslaan</string>
|
||||
<string name="scuro">Donker</string>
|
||||
<string name="seleziona">Selecteren</string>
|
||||
<string name="seleziona_account">Selecteer een account</string>
|
||||
<string name="sicuro">Weet je dit zeker?</string>
|
||||
<string name="something_failed">Er is een fout opgetreden</string>
|
||||
<string name="skip_same_file">Sla hetzelfde bestand over</string>
|
||||
<string name="tema_app">Applicatiethema</string>
|
||||
<string name="tipo_connessione">Verbindingstype</string>
|
||||
<string name="tipo_protocollo">Protocoltype</string>
|
||||
<string name="un_altra_cartella">Andere map</string>
|
||||
<string name="use_passphrase">Gebruik een wachtwoord</string>
|
||||
<string name="upload">Uploaden</string>
|
||||
<string name="upload_completato">Uploaden voltooid</string>
|
||||
<string name="what_to_do">Wat wil je doen?</string>
|
||||
<string name="wrap_the_text">Comprimeer de tekst</string>
|
||||
<string name="menu_syntax_highlight">Gekleurde code</string>
|
||||
<string name="testo_indietro">Ongedaan maken</string>
|
||||
<string name="testo_rifai">Opnieuw uitvoeren</string>
|
||||
<string name="sync">Synchroniseer</string>
|
||||
<string name="remote_folder_to_sync">Map op afstand om te synchroniseren</string>
|
||||
<string name="local_folder_to_sync">Lokale map om te synchroniseren</string>
|
||||
<string name="vota">Beoordelen</string>
|
||||
<string name="inapp_unavailable">Kan Google Play niet bereiken</string>
|
||||
<string name="inapp_description">Ondersteun de ontwikkeling van andere geweldige features.</string>
|
||||
<string name="upgrade_premium">Upgrade naar Premium</string>
|
||||
<string name="upgrade_premium_summary">Upgrade naar Premium versie en ondersteun de ontwikkeling van Turbo Client!</string>
|
||||
<string name="download_unlocked_version">Download de premium versie</string>
|
||||
<string name="inapp_second_description">Wat is Turbo Client waard volgens jou? Bepaal jouw prijs! </string>
|
||||
<string name="inapp_first_description">Upgrade om deze feature te ontsleutelen:</string>
|
||||
<string name="inapp_item_openandeditfiles">De mogelijkheid om elk type bestand te openen of aan te passen.</string>
|
||||
<string name="inapp_item_backup_service">Backup functionaliteit om je data veilig te backuppen en te herstellen. </string>
|
||||
<string name="inapp_unlock_features">Ontgrendel de betaalde functies</string>
|
||||
<string name="inapp_seconditem_description">I vind het echt een leuke app!</string>
|
||||
<string name="inapp_thirditem_description">I hou van deze app!</string>
|
||||
<string name="backup_accounts">Accounts backuppen</string>
|
||||
<string name="restore_accounts">Accounts herstellen</string>
|
||||
<string name="share_accounts">Accounts backuppen en delen</string>
|
||||
<string name="importing_accounts">Accounts importeren…</string>
|
||||
<string name="exporting_accounts">Accounts exporteren...</string>
|
||||
<string name="backup_not_found">Geen back-ups gevonden</string>
|
||||
<string name="err_cant_open_the_file">Kan het bestand niet openen</string>
|
||||
<string name="err_temp_folder_doesnt_exist">Tijdelijke map bestaat niet</string>
|
||||
<string name="err_occured">Er is een fout opgetreden</string>
|
||||
<string name="ui_ux">UI</string>
|
||||
<string name="folder">Map</string>
|
||||
<string name="remove">Verwijder</string>
|
||||
<string name="modification_date">Verander datum</string>
|
||||
<string name="name">Naam</string>
|
||||
<string name="size">Grote</string>
|
||||
<string name="sort">Soort</string>
|
||||
<string name="open">Openen</string>
|
||||
<string name="file_modified">Het bestand %1$s is aangepast, wilt u het uploaden?</string>
|
||||
<string name="file_saved_with_success">Het bestand %1$s is met succes opgeslagen!</string>
|
||||
<string name="number_of_things_selected">%1$d geselecteerd</string>
|
||||
<string name="crea_file_remoto">Nieuw extern bestand</string>
|
||||
<string name="new_local_file">Nieuw lokaal bestand</string>
|
||||
<string name="create_new_account">Nieuwe account toevoegen</string>
|
||||
<string name="create_new_account_to_start">Maak een account aan om te beginnen.</string>
|
||||
<string name="type">Type</string>
|
||||
<string name="send_feedback">Commentaar verzenden</string>
|
||||
<string name="copy_url">URL kopiëren</string>
|
||||
<string name="cut">Knippen</string>
|
||||
<string name="paste">plakken</string>
|
||||
<string name="advanced">Geavanceerd</string>
|
||||
<string name="auto">Auto</string>
|
||||
<string name="bytes">Bytes</string>
|
||||
<string name="unit_measurement_for_file_size">Maateenheid voor bestandsgrootte</string>
|
||||
<string name="open_source_license">Open Source-licenties</string>
|
||||
<string name="open_source_license_summary">Toon open source-licenties</string>
|
||||
<string name="show_navigation_breadcrumb">Toon navigatie breadcrumb</string>
|
||||
<string name="open_a_file">Open een bestand</string>
|
||||
<string name="open_this_time_only">Alleen deze keer openen</string>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Info</string>
|
||||
<string name="aboutactivity_app_category">Applicatie informatie</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Diversen</string>
|
||||
<string name="aboutactivity_version">Versie %1$s</string>
|
||||
<string name="aboutactivity_author">Auteur</string>
|
||||
<string name="aboutactivity_authorsite">Website auteur</string>
|
||||
<string name="aboutactivity_authorsite_summary">Toon de website van de auteur</string>
|
||||
<string name="aboutactivity_authoremail">E-mailadres auteur</string>
|
||||
<string name="aboutactivity_authoremail_summary">Stuur een e-mail naar de auteur</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Toon de Twitter pagina</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google+</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Toon de Google+ pagina</string>
|
||||
<string name="aboutactivity_betatester">Een betatester worden</string>
|
||||
<string name="aboutactivity_betatester_summary">Word lid van de community om beta updates te ontvangen</string>
|
||||
<string name="aboutactivity_helptranslate">Vertaal de applicatie</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Verbeter de vertalingen of voeg nieuwe onderdelen toe</string>
|
||||
<string name="aboutactivity_readme">Lees mij</string>
|
||||
<string name="aboutactivity_readme_summary">Lees meer over de app</string>
|
||||
<string name="aboutactivity_faq">Veelgestelde vragen</string>
|
||||
<string name="aboutactivity_faq_summary">Toon de veelgestelde vragen</string>
|
||||
<string name="aboutactivity_changelog">Aanpassingslogboek</string>
|
||||
<string name="aboutactivity_changelog_summary">Toon het logboek</string>
|
||||
<string name="aboutactivity_license">Algemene gebruikersvoorwaarden</string>
|
||||
<string name="aboutactivity_license_summary">Lees de algemene gebruiksvoorwaarden</string>
|
||||
<string name="aboutactivity_license_accept">Accepteren</string>
|
||||
<string name="aboutactivity_license_refuse">Weigeren</string>
|
||||
<string name="aboutactivity_privacy">Privacybeleid</string>
|
||||
<string name="aboutactivity_privacy_summary">Lees het privacybeleid</string>
|
||||
<string name="aboutactivity_todo">TODO lijst</string>
|
||||
<string name="aboutactivity_todo_summary">Lees de todolijst</string>
|
||||
<string name="aboutactivity_donate">Maak een donatie</string>
|
||||
<string name="aboutactivity_donate_summary">Bedankt voor uw ondersteuning!</string>
|
||||
<string name="aboutactivity_market">Play Store</string>
|
||||
<string name="aboutactivity_market_summary">Geef je reactie en een waardering!</string>
|
||||
<string name="aboutactivity_authormarket">Meer applicaties</string>
|
||||
<string name="aboutactivity_authormarket_summary">Toon alle apps van dezelfde ontwikkelaar!</string>
|
||||
</resources>
|
@ -1,117 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aggiungi_account">Nowe konto</string>
|
||||
<string name="attiva">Aktywny</string>
|
||||
<string name="cancella">Usuń</string>
|
||||
<string name="cancellazione">Usuwanie plików…</string>
|
||||
<string name="caricamento">Ładuje…</string>
|
||||
<string name="cartella_locale_corrente">Obecny folder lokalny</string>
|
||||
<string name="chiave_privata">Klucz prywatny</string>
|
||||
<string name="chiaro">Jasny</string>
|
||||
<string name="codifica">Kodowanie</string>
|
||||
<string name="condividi">Udostępnij</string>
|
||||
<string name="crea_cartella_locale">Nowy folder lokalny</string>
|
||||
<string name="crea_cartella_remota">Nowy folder zdalny</string>
|
||||
<string name="disconneti">Rozłącz</string>
|
||||
<string name="default_local_folder">Domyślny folder lokalny</string>
|
||||
<string name="dove_scaricare">Gdzie pobrać?</string>
|
||||
<string name="download">Ściągnij</string>
|
||||
<string name="download_completato">Pobieranie zakończone</string>
|
||||
<string name="duplicate">Duplikuj</string>
|
||||
<string name="fatto">Zrobione</string>
|
||||
<string name="home">Folder domowy</string>
|
||||
<string name="host">Host</string>
|
||||
<string name="info">Informacje</string>
|
||||
<string name="locale">Lokalny</string>
|
||||
<string name="log_in">Loguje się…</string>
|
||||
<string name="modifica">Edytuj</string>
|
||||
<string name="muovi">Przenieś</string>
|
||||
<string name="nascondi">Ukryj</string>
|
||||
<string name="nome_app">Turbo Client</string>
|
||||
<string name="nome_app_turbo_editor">Turbo Edytor</string>
|
||||
<string name="nome_utente">Użytkownik</string>
|
||||
<string name="passiva">Pasywny</string>
|
||||
<string name="passphrase">Hasło</string>
|
||||
<string name="password">Hasło</string>
|
||||
<string name="password_summary">Pozostaw puste, aby pytać o nie podczas każdej sesji</string>
|
||||
<string name="porta">Port</string>
|
||||
<string name="preferenze">Ustawienia</string>
|
||||
<string name="remoto">Zdalny</string>
|
||||
<string name="riavva_per_tema">Aby zmienić motyw, uruchom ponownie aplikację</string>
|
||||
<string name="rinomina">Zmień nazwę</string>
|
||||
<string name="root">Root</string>
|
||||
<string name="salva">Zapisz</string>
|
||||
<string name="scuro">Ciemny</string>
|
||||
<string name="seleziona">Wybierz</string>
|
||||
<string name="seleziona_account">Wybierz konto</string>
|
||||
<string name="sicuro">Jesteś pewny?</string>
|
||||
<string name="something_failed">Coś nie powiodło się</string>
|
||||
<string name="skip_same_file">Nie transferuj tego samego pliku</string>
|
||||
<string name="tema_app">Wygląd aplikacji</string>
|
||||
<string name="tipo_connessione">Typ połączenia</string>
|
||||
<string name="tipo_protocollo">Typ protokołu</string>
|
||||
<string name="un_altra_cartella">Inny folder</string>
|
||||
<string name="use_passphrase">Użyj hasła</string>
|
||||
<string name="upload">Prześlij</string>
|
||||
<string name="upload_completato">Przesyłanie zakończone</string>
|
||||
<string name="what_to_do">Co chcesz zrobić?</string>
|
||||
<string name="wrap_the_text">Zawijanie wyrazów</string>
|
||||
<string name="menu_syntax_highlight">Syntax highlight</string>
|
||||
<string name="testo_indietro">Cofnij</string>
|
||||
<string name="testo_rifai">Powtórz</string>
|
||||
<string name="sync">Synchronizuj</string>
|
||||
<string name="remote_folder_to_sync">Synchronij folder zdalny</string>
|
||||
<string name="local_folder_to_sync">Synchronizuj folder lokalny</string>
|
||||
<string name="vota">Oceń</string>
|
||||
<string name="inapp_unavailable">Nie można połączyć się z Google Play</string>
|
||||
<string name="inapp_description">Support the development of other great features.</string>
|
||||
<string name="upgrade_premium">Zaktualizuj do wersji Premium</string>
|
||||
<string name="upgrade_premium_summary">Zaktualizuj do wersji Premium i wspieraj rozwój klienta Turbo!</string>
|
||||
<string name="download_unlocked_version">Pobierz odblokowaną wersję</string>
|
||||
<string name="inapp_second_description">Jak oceniasz Turbo Client\'a? Wystaw ocenę! </string>
|
||||
<string name="inapp_first_description">Zaktualizuj, aby odblokować te funkcje:</string>
|
||||
<string name="inapp_item_openandeditfiles">Uprawnienia do otwierania i modyfikowania dowolnego typu pliku.</string>
|
||||
<string name="inapp_item_backup_service">Backup service to backup and restore your data safely. </string>
|
||||
<string name="inapp_unlock_features">Odblokuj funkcje Premium</string>
|
||||
<string name="inapp_seconditem_description">Bardzo podoba mi się ta aplikacja!</string>
|
||||
<string name="inapp_thirditem_description">Kocham tę aplikację!</string>
|
||||
<string name="backup_accounts">Kopia zapasowa kont</string>
|
||||
<string name="restore_accounts">Przywracanie kont</string>
|
||||
<string name="share_accounts">Kopia zapasowa i udostępnianie kont</string>
|
||||
<string name="importing_accounts">Importowanie kont...</string>
|
||||
<string name="exporting_accounts">Eksportowanie kont...</string>
|
||||
<string name="backup_not_found">Nie znaleziono kopii zapasowych</string>
|
||||
<string name="err_cant_open_the_file">Nie można otworzyć pliku</string>
|
||||
<string name="err_temp_folder_doesnt_exist">Tymczasowy folder nie istnieje</string>
|
||||
<string name="err_occured">Wystąpił błąd</string>
|
||||
<string name="ui_ux">Interfejs użytkownika</string>
|
||||
<string name="folder">Folder</string>
|
||||
<string name="remove">Usuń</string>
|
||||
<string name="modification_date">Data modyfikacji</string>
|
||||
<string name="name">Nazwa</string>
|
||||
<string name="size">Rozmiar</string>
|
||||
<string name="sort">Sortuj</string>
|
||||
<string name="open">Otwórz</string>
|
||||
<string name="file_modified">The file %1$s was modified, do you want to upload it?</string>
|
||||
<string name="file_saved_with_success">The file %1$s was saved with success!</string>
|
||||
<string name="number_of_things_selected">%1$d selected</string>
|
||||
<string name="crea_file_remoto">Nowy plik zdalny</string>
|
||||
<string name="new_local_file">Nowy plik lokalny</string>
|
||||
<string name="create_new_account">Utwórz nowe konto</string>
|
||||
<string name="create_new_account_to_start">Utwórz nowe konto, aby rozpocząć.</string>
|
||||
<string name="type">Typ</string>
|
||||
<string name="send_feedback">Prześlij sugestię</string>
|
||||
<string name="copy_url">Kopiuj adres URL</string>
|
||||
<string name="cut">wytnij</string>
|
||||
<string name="paste">wklej</string>
|
||||
<string name="advanced">Zaawansowane</string>
|
||||
<string name="auto">Automatyczna</string>
|
||||
<string name="bytes">Bajty</string>
|
||||
<string name="unit_measurement_for_file_size">Jednostka miary dla rozmiaru pliku</string>
|
||||
<string name="open_source_license">Licencje Open Source</string>
|
||||
<string name="open_source_license_summary">Pokaż licencje open source</string>
|
||||
<string name="show_navigation_breadcrumb">Show navigation breadcrumb</string>
|
||||
<string name="open_a_file">Otwórz plik</string>
|
||||
<string name="open_this_time_only">Open this time only</string>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Informacje</string>
|
||||
<string name="aboutactivity_app_category">Informacje o aplikacji</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Różne</string>
|
||||
<string name="aboutactivity_version">Wersja %1$ s</string>
|
||||
<string name="aboutactivity_author">Autor</string>
|
||||
<string name="aboutactivity_authorsite">Strona autora</string>
|
||||
<string name="aboutactivity_authorsite_summary">Pokaż stronę autora</string>
|
||||
<string name="aboutactivity_authoremail">Adres mail\'owy autora</string>
|
||||
<string name="aboutactivity_authoremail_summary">Wyślij e-mail do autora</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Pokaż stronę na twitter\'ze</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google Plus</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Pokaż stronę na Google Plus</string>
|
||||
<string name="aboutactivity_betatester">Zostań beta testerem</string>
|
||||
<string name="aboutactivity_betatester_summary">Zostań częścią społeczności, aby otrzymywać aktualizacje beta</string>
|
||||
<string name="aboutactivity_helptranslate">Tłumaczenie aplikacji</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Popraw pewne błędy lub dodaj nowe tłumaczenie</string>
|
||||
<string name="aboutactivity_readme">Read Me</string>
|
||||
<string name="aboutactivity_readme_summary">Read the reference</string>
|
||||
<string name="aboutactivity_faq">FAQ</string>
|
||||
<string name="aboutactivity_faq_summary">Pokaż FAQ aplikacji</string>
|
||||
<string name="aboutactivity_changelog">Lista zmian</string>
|
||||
<string name="aboutactivity_changelog_summary">Pokaż listę zmian aplikacji</string>
|
||||
<string name="aboutactivity_license">Regulamin</string>
|
||||
<string name="aboutactivity_license_summary">Przeczytaj regulamin</string>
|
||||
<string name="aboutactivity_license_accept">Akceptuj</string>
|
||||
<string name="aboutactivity_license_refuse">Odmów</string>
|
||||
<string name="aboutactivity_privacy">Polityka prywatności</string>
|
||||
<string name="aboutactivity_privacy_summary">Przeczytaj o polityce prywatności</string>
|
||||
<string name="aboutactivity_todo">Lista rzeczy do zrobienia</string>
|
||||
<string name="aboutactivity_todo_summary">Przeczytaj listy rzeczy do zrobienia</string>
|
||||
<string name="aboutactivity_donate">Przekaż darowiznę</string>
|
||||
<string name="aboutactivity_donate_summary">Dziękuję za wspieranie mnie!</string>
|
||||
<string name="aboutactivity_market">Sklep Play</string>
|
||||
<string name="aboutactivity_market_summary">Wyślij opinię i Oceń go!</string>
|
||||
<string name="aboutactivity_authormarket">Sklep autora</string>
|
||||
<string name="aboutactivity_authormarket_summary">Pokaż inne aplikcje autora!</string>
|
||||
</resources>
|
@ -1,23 +0,0 @@
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<!-- Customize dimensions originally defined in res/values/dimens.xml (such as
|
||||
screen margins) for sw600dp devices (e.g. 7" tablets) here. -->
|
||||
</resources>
|
@ -1,24 +0,0 @@
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<!-- Customize dimensions originally defined in res/values/dimens.xml (such as
|
||||
screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. -->
|
||||
<dimen name="activity_horizontal_margin">128dp</dimen>
|
||||
</resources>
|
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<resources>
|
||||
<!-- action bar background color -->
|
||||
<color name="actionbar_background">#111111</color>
|
||||
<!-- activity background color -->
|
||||
<color name="activity_background">#202020</color>
|
||||
<!-- activity text color -->
|
||||
<color name="activity_text_color">#fff7f7f9</color>
|
||||
<!-- navigation drawer background color -->
|
||||
<color name="navigation_drawer_background">#1d1d1d</color>
|
||||
<!-- colors used as file icons -->
|
||||
<color name="file_folder">#ffbb33</color>
|
||||
<color name="file_code">#00a569</color>
|
||||
<color name="file_html">#00a569</color>
|
||||
<color name="file_text">#717171</color>
|
||||
<color name="file_archive">#aa66cc</color>
|
||||
<color name="file_media_music">#ff4444</color>
|
||||
<color name="file_media_picture">#33b5e5</color>
|
||||
<color name="file_media_video">#ff00607d</color>
|
||||
</resources>
|
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<resources>
|
||||
<!-- menu item ids -->
|
||||
<item type="id" name="im_undo"/>
|
||||
<item type="id" name="im_redo"/>
|
||||
<item type="id" name="im_editor"/>
|
||||
<item type="id" name="im_remove"/>
|
||||
<item type="id" name="im_open"/>
|
||||
<item type="id" name="im_info"/>
|
||||
<item type="id" name="im_button"/>
|
||||
<item type="id" name="im_save"/>
|
||||
<item type="id" name="im_editor_encoding"/>
|
||||
<item type="id" name="im_wrap_text"/>
|
||||
<item type="id" name="im_syntax_highlight"/>
|
||||
<!-- layout item ids -->
|
||||
<item type="id" name="drawer_layout"/>
|
||||
<item type="id" name="fragment_editor"/>
|
||||
<item type="id" name="drawer_list"/>
|
||||
<item type="id" name="editor"/>
|
||||
</resources>
|
@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="aboutactivity_info_category">Info</string>
|
||||
<string name="aboutactivity_app_category">Application Info</string>
|
||||
<string name="aboutactivity_miscellaneous_category">Miscellaneous</string>
|
||||
<string name="aboutactivity_version">Version %1$s</string>
|
||||
<string name="aboutactivity_author">Author</string>
|
||||
<string name="aboutactivity_authorsite">Author site</string>
|
||||
<string name="aboutactivity_authorsite_summary">Show author site</string>
|
||||
<string name="aboutactivity_authoremail">Author mail</string>
|
||||
<string name="aboutactivity_authoremail_summary">Send mail to author</string>
|
||||
<string name="aboutactivity_authortwitter">Twitter</string>
|
||||
<string name="aboutactivity_authortwitter_summary">Show twitter page</string>
|
||||
<string name="aboutactivity_authorgoogleplus">Google Plus</string>
|
||||
<string name="aboutactivity_authorgoogleplus_summary">Show Google Plus page</string>
|
||||
<string name="aboutactivity_betatester">Become a beta tester</string>
|
||||
<string name="aboutactivity_betatester_summary">Be a part of the community to receive beta updates</string>
|
||||
<string name="aboutactivity_helptranslate">Translate the Application</string>
|
||||
<string name="aboutactivity_helptranslate_summary">Correct some mistakes or add a new translation</string>
|
||||
<string name="aboutactivity_readme">Read Me</string>
|
||||
<string name="aboutactivity_readme_summary">Read the reference</string>
|
||||
<string name="aboutactivity_faq">FAQ</string>
|
||||
<string name="aboutactivity_faq_summary">Show app faq</string>
|
||||
<string name="aboutactivity_changelog">ChangeLog</string>
|
||||
<string name="aboutactivity_changelog_summary">Show app changelog</string>
|
||||
<string name="aboutactivity_license">Terms of service</string>
|
||||
<string name="aboutactivity_license_summary">Read the Terms of service</string>
|
||||
<string name="aboutactivity_license_accept">Accept</string>
|
||||
<string name="aboutactivity_license_refuse">Refuse</string>
|
||||
<string name="aboutactivity_privacy">Privacy policy</string>
|
||||
<string name="aboutactivity_privacy_summary">Read the Privacy policy</string>
|
||||
<string name="aboutactivity_todo">ToDo List</string>
|
||||
<string name="aboutactivity_todo_summary">Read the todo list</string>
|
||||
<string name="aboutactivity_donate">Make a donation</string>
|
||||
<string name="aboutactivity_donate_summary">Thank you for supporting me!</string>
|
||||
<string name="aboutactivity_market">Play Store</string>
|
||||
<string name="aboutactivity_market_summary">Send feedback and rate it!</string>
|
||||
<string name="aboutactivity_authormarket">Author Store</string>
|
||||
<string name="aboutactivity_authormarket_summary">Show author applications!</string>
|
||||
</resources>
|
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<resources>
|
||||
<style name="AppStyle"
|
||||
parent="android:Theme.Holo">
|
||||
<item name="android:windowBackground">@color/activity_background</item>
|
||||
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
|
||||
<item name="android:textColor">@color/activity_text_color</item>
|
||||
</style>
|
||||
|
||||
<style name="ActionBarStyle"
|
||||
parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
|
||||
<item name="android:background">@color/actionbar_background</item>
|
||||
<item name="android:backgroundStacked">@color/actionbar_background</item>
|
||||
<item name="android:backgroundSplit">@color/actionbar_background</item>
|
||||
<item name="android:titleTextStyle">@style/ActionBarStyle.Title.Inverse</item>
|
||||
<item name="android:subtitleTextStyle">@style/ActionBarStyle.Subtitle</item>
|
||||
</style>
|
||||
|
||||
<style name="ActionBarStyle.Title.Inverse"
|
||||
parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
|
||||
<item name="android:textColor">@android:color/primary_text_dark_nodisable</item>
|
||||
</style>
|
||||
|
||||
<style name="ActionBarStyle.Subtitle"
|
||||
parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle">
|
||||
<item name="android:textColor">@android:color/primary_text_dark_nodisable</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
@ -1,100 +0,0 @@
|
||||
<!--
|
||||
~ Copyright (C) 2013 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Turbo Editor.
|
||||
~
|
||||
~ Turbo Editor is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Turbo Editor is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:title="@string/aboutactivity_info_category">
|
||||
<Preference
|
||||
android:key="aboutactivity_author"
|
||||
android:title="@string/aboutactivity_author"
|
||||
android:summary="Vlad Mihalachi" />
|
||||
<Preference
|
||||
android:key="aboutactivity_authorsite"
|
||||
android:title="@string/aboutactivity_authorsite"
|
||||
android:summary="@string/aboutactivity_authorsite_summary">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://vmihalachi.com" />
|
||||
|
||||
</Preference>
|
||||
<Preference
|
||||
android:key="aboutactivity_authoremail"
|
||||
android:title="@string/aboutactivity_authoremail"
|
||||
android:summary="@string/aboutactivity_authoremail_summary" />
|
||||
<Preference
|
||||
android:key="aboutactivity_authorgoogleplus"
|
||||
android:title="@string/aboutactivity_authorgoogleplus"
|
||||
android:summary="@string/aboutactivity_authorgoogleplus_summary">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="https://plus.google.com/u/0/116753921964371818338" />
|
||||
|
||||
</Preference>
|
||||
<Preference
|
||||
android:key="aboutactivity_authortwitter"
|
||||
android:title="@string/aboutactivity_authortwitter"
|
||||
android:summary="@string/aboutactivity_authortwitter_summary">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="https://twitter.com/vmihalachi" />
|
||||
|
||||
</Preference>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/aboutactivity_app_category">
|
||||
<Preference
|
||||
android:key="aboutactivity_betatester"
|
||||
android:title="@string/aboutactivity_betatester"
|
||||
android:summary="@string/aboutactivity_betatester_summary">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="https://plus.google.com/u/0/communities/111974095419108178946" />
|
||||
|
||||
</Preference>
|
||||
<Preference
|
||||
android:key="aboutactivity_helptranslate"
|
||||
android:title="@string/aboutactivity_helptranslate"
|
||||
android:summary="@string/aboutactivity_helptranslate_summary">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="http://crowdin.net/project/turbo-client" />
|
||||
|
||||
</Preference>
|
||||
<Preference
|
||||
android:key="aboutactivity_changelog"
|
||||
android:title="@string/aboutactivity_changelog"
|
||||
android:summary="@string/aboutactivity_changelog_summary" />
|
||||
<Preference
|
||||
android:key="aboutactivity_faq"
|
||||
android:title="@string/aboutactivity_faq"
|
||||
android:summary="@string/aboutactivity_faq_summary">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:data="https://github.com/vmihalachi/TurboEditor/wiki/Faq" />
|
||||
</Preference>
|
||||
<Preference
|
||||
android:key="aboutactivity_open_source_licenses"
|
||||
android:title="@string/open_source_license"
|
||||
android:summary="@string/open_source_license_summary" />
|
||||
<Preference
|
||||
android:key="aboutactivity_authormarket"
|
||||
android:title="@string/aboutactivity_authormarket"
|
||||
android:summary="@string/aboutactivity_authormarket_summary" />
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
</PreferenceScreen>
|
2
app/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/build
|
||||
manifest-merger-release-report.txt
|
89
app/build.gradle
Normal file
@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Adrian Malacoda
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
lintOptions {
|
||||
disable 'MissingTranslation', 'ExtraTranslation'
|
||||
}
|
||||
|
||||
compileSdkVersion 22
|
||||
buildToolsVersion '22.0.1'
|
||||
|
||||
defaultConfig {
|
||||
applicationId "net.monarchpass.android.texteditor8000"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 22
|
||||
versionCode 48
|
||||
versionName "1.20"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE.txt'
|
||||
exclude 'META-INF/NOTICE.txt'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':libraries:sharedCode')
|
||||
//compile 'com.spazedog.lib:rootfw_gen4:+@aar'
|
||||
compile project(':libraries:FloatingActionButton')
|
||||
compile 'org.apache.commons:commons-lang3:+'
|
||||
compile 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3'
|
||||
compile('com.android.support:appcompat-v7:22.+') {
|
||||
exclude group: 'com.android.support', module: 'support-v4'
|
||||
}
|
||||
compile 'com.android.support:support-v4:22.+'
|
||||
compile 'com.github.gabrielemariotti.changeloglib:library:+'
|
||||
compile 'commons-io:commons-io:2.4'
|
||||
compile 'com.android.support:support-annotations:+'
|
||||
compile 'com.atlassian.commonmark:commonmark:0.11.0'
|
||||
}
|
||||
|
||||
task incrementVersionCode << {
|
||||
println(":incrementVersionCode - Incrementing Version Code...")
|
||||
def buildGradleFile = file("build.gradle")
|
||||
def patternVersionCode = Pattern.compile("versionCode (\\d+)")
|
||||
def buildGradleFileText = buildGradleFile.getText()
|
||||
def matcherVersionCode = patternVersionCode.matcher(buildGradleFileText)
|
||||
matcherVersionCode.find()
|
||||
def mVersionCode = Integer.parseInt(matcherVersionCode.group(1))
|
||||
def mNextVersionCode = mVersionCode + 1
|
||||
def manifestContent = matcherVersionCode.replaceAll("versionCode " + mNextVersionCode)
|
||||
println(":incrementVersionCode - current versionCode=" + mVersionCode);
|
||||
println(":incrementVersionCode - next versionCode=" + mNextVersionCode);
|
||||
buildGradleFile.write(manifestContent)
|
||||
}
|
0
app/private/cache/retriever/catalog.xml
vendored
Normal file
17
app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in C:/Users/Vlad/AppData/Local/Android/android-sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the proguardFiles
|
||||
# directive in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro;
|
||||
|
||||
import android.app.Application;
|
||||
import android.test.ApplicationTestCase;
|
||||
|
||||
/**
|
||||
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
|
||||
*/
|
||||
public class ApplicationTest extends ApplicationTestCase<Application> {
|
||||
public ApplicationTest() {
|
||||
super(Application.class);
|
||||
}
|
||||
}
|
162
app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,162 @@
|
||||
<!--
|
||||
~ Copyright (C) 2014 Vlad Mihalachi
|
||||
~
|
||||
~ This file is part of Text Editor 8000.
|
||||
~
|
||||
~ Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ (at your option) any later version.
|
||||
~
|
||||
~ Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.maskyn.fileeditorpro"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<supports-screens
|
||||
android:anyDensity="true"
|
||||
android:largeScreens="true"
|
||||
android:normalScreens="true"
|
||||
android:resizeable="true"
|
||||
android:smallScreens="true"
|
||||
android:xlargeScreens="true" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/nome_app_turbo_editor"
|
||||
android:hardwareAccelerated="true"
|
||||
android:largeHeap="true"
|
||||
android:supportsRtl="true"
|
||||
android:name="com.maskyn.fileeditorpro.application.MyApp"
|
||||
tools:replace="android:label"
|
||||
>
|
||||
|
||||
<!-- android:alwaysRetainTaskState="true" -->
|
||||
|
||||
<activity
|
||||
android:name=".HomeActivity"
|
||||
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
|
||||
android:launchMode="singleTop"
|
||||
android:windowSoftInputMode="stateUnspecified|adjustResize"
|
||||
android:theme="@style/AppThemeEditorDark">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data android:scheme="file" />
|
||||
<data android:mimeType="*/*" />
|
||||
<data android:host="*" />
|
||||
<data android:pathPattern=".*\\.txt" />
|
||||
<data android:pathPattern=".*\\.html" />
|
||||
<data android:pathPattern=".*\\.xml" />
|
||||
<data android:pathPattern=".*\\.css" />
|
||||
<data android:pathPattern=".*\\.js" />
|
||||
<data android:pathPattern=".*\\.md"/>
|
||||
<data android:pathPattern=".*\\.markdown"/>
|
||||
<data android:pathPattern=".*\\.php" />
|
||||
<data android:pathPattern=".*\\.py" />
|
||||
<data android:pathPattern=".*\\.script" />
|
||||
<data android:pathPattern=".*\\.cs" />
|
||||
<data android:pathPattern=".*\\.java" />
|
||||
<data android:pathPattern=".*\\.rb" />
|
||||
<data android:pathPattern=".*\\.aspx" />
|
||||
<data android:pathPattern=".*\\.cshtml" />
|
||||
<data android:pathPattern=".*\\.vbhtml" />
|
||||
<data android:pathPattern=".*\\.go" />
|
||||
<data android:pathPattern=".*\\.c" />
|
||||
<data android:pathPattern=".*\\.h" />
|
||||
<data android:pathPattern=".*\\.cc" />
|
||||
<data android:pathPattern=".*\\.cpp" />
|
||||
<data android:pathPattern=".*\\.hh" />
|
||||
<data android:pathPattern=".*\\.hpp" />
|
||||
<data android:pathPattern=".*\\.pl" />
|
||||
<data android:pathPattern=".*\\.pm" />
|
||||
<data android:pathPattern=".*\\.t" />
|
||||
<data android:pathPattern=".*\\.pod" />
|
||||
<data android:pathPattern=".*\\.m" />
|
||||
<data android:pathPattern=".*\\.f" />
|
||||
<data android:pathPattern=".*\\.for" />
|
||||
<data android:pathPattern=".*\\.f90" />
|
||||
<data android:pathPattern=".*\\.f95" />
|
||||
<data android:pathPattern=".*\\.asp" />
|
||||
<data android:pathPattern=".*\\.json" />
|
||||
<data android:pathPattern=".*\\.wiki" />
|
||||
<data android:pathPattern=".*\\.lua" />
|
||||
<data android:pathPattern=".*\\.r" />
|
||||
<data android:pathPattern=".*\\.key" />
|
||||
<data android:pathPattern=".*\\.log" />
|
||||
</intent-filter>
|
||||
<intent-filter >
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:scheme="file" />
|
||||
<data android:mimeType="text/*" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<data android:mimeType="text/plain" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name="com.maskyn.fileeditorpro.activity.SelectFileActivity"
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:label="@string/open_a_file"
|
||||
android:exported="true"
|
||||
android:parentActivityName=".HomeActivity"
|
||||
android:theme="@style/AppThemeBaseLight">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".HomeActivity" />
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.GET_CONTENT" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.OPENABLE" />
|
||||
|
||||
<data android:mimeType="*/*" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<meta-data
|
||||
android:name="com.sec.android.support.multiwindow"
|
||||
android:value="true" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.DEFAULT_SIZE_W"
|
||||
android:value="632.0dip" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.DEFAULT_SIZE_H"
|
||||
android:value="598.0dip" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.MINIMUM_SIZE_W"
|
||||
android:value="632.0dip" />
|
||||
<meta-data
|
||||
android:name="com.sec.android.multiwindow.MINIMUM_SIZE_H"
|
||||
android:value="598.0dip" />
|
||||
|
||||
<activity android:name="com.maskyn.fileeditorpro.activity.MarkdownActivity" />
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -0,0 +1,144 @@
|
||||
/*
|
||||
* Copyright (C) 2012 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.vending.billing;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
/**
|
||||
* InAppBillingService is the service that provides in-app billing version 3 and beyond.
|
||||
* This service provides the following features:
|
||||
* 1. Provides a new API to get details of in-app items published for the app including
|
||||
* price, type, title and description.
|
||||
* 2. The purchase flow is synchronous and purchase information is available immediately
|
||||
* after it completes.
|
||||
* 3. Purchase information of in-app purchases is maintained within the Google Play system
|
||||
* till the purchase is consumed.
|
||||
* 4. An API to consume a purchase of an inapp item. All purchases of one-time
|
||||
* in-app items are consumable and thereafter can be purchased again.
|
||||
* 5. An API to get current purchases of the user immediately. This will not contain any
|
||||
* consumed purchases.
|
||||
*
|
||||
* All calls will give a response code with the following possible values
|
||||
* RESULT_OK = 0 - success
|
||||
* RESULT_USER_CANCELED = 1 - user pressed back or canceled a dialog
|
||||
* RESULT_BILLING_UNAVAILABLE = 3 - this billing API version is not supported for the type requested
|
||||
* RESULT_ITEM_UNAVAILABLE = 4 - requested SKU is not available for purchase
|
||||
* RESULT_DEVELOPER_ERROR = 5 - invalid arguments provided to the API
|
||||
* RESULT_ERROR = 6 - Fatal error during the API action
|
||||
* RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned
|
||||
* RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned
|
||||
*/
|
||||
interface IInAppBillingService {
|
||||
/**
|
||||
* Checks support for the requested billing API version, package and in-app type.
|
||||
* Minimum API version supported by this interface is 3.
|
||||
* @param apiVersion the billing version which the app is using
|
||||
* @param packageName the package name of the calling app
|
||||
* @param type type of the in-app item being purchased "inapp" for one-time purchases
|
||||
* and "subs" for subscription.
|
||||
* @return RESULT_OK(0) on success, corresponding result code on failures
|
||||
*/
|
||||
int isBillingSupported(int apiVersion, String packageName, String type);
|
||||
|
||||
/**
|
||||
* Provides details of a list of SKUs
|
||||
* Given a list of SKUs of a valid type in the skusBundle, this returns a bundle
|
||||
* with a list JSON strings containing the productId, price, title and description.
|
||||
* This API can be called with a maximum of 20 SKUs.
|
||||
* @param apiVersion billing API version that the Third-party is using
|
||||
* @param packageName the package name of the calling app
|
||||
* @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST"
|
||||
* @return Bundle containing the following key-value pairs
|
||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
|
||||
* failure as listed above.
|
||||
* "DETAILS_LIST" with a StringArrayList containing purchase information
|
||||
* in JSON format similar to:
|
||||
* '{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00",
|
||||
* "title : "Example Title", "description" : "This is an example description" }'
|
||||
*/
|
||||
Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle);
|
||||
|
||||
/**
|
||||
* Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
|
||||
* the type, a unique purchase token and an optional developer payload.
|
||||
* @param apiVersion billing API version that the app is using
|
||||
* @param packageName package name of the calling app
|
||||
* @param sku the SKU of the in-app item as published in the developer console
|
||||
* @param type the type of the in-app item ("inapp" for one-time purchases
|
||||
* and "subs" for subscription).
|
||||
* @param developerPayload optional argument to be sent back with the purchase information
|
||||
* @return Bundle containing the following key-value pairs
|
||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
|
||||
* failure as listed above.
|
||||
* "BUY_INTENT" - PendingIntent to start the purchase flow
|
||||
*
|
||||
* The Pending intent should be launched with startIntentSenderForResult. When purchase flow
|
||||
* has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
|
||||
* If the purchase is successful, the result data will contain the following key-value pairs
|
||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
|
||||
* failure as listed above.
|
||||
* "INAPP_PURCHASE_DATA" - String in JSON format similar to
|
||||
* '{"orderId":"12999763169054705758.1371079406387615",
|
||||
* "packageName":"com.example.app",
|
||||
* "productId":"exampleSku",
|
||||
* "purchaseTime":1345678900000,
|
||||
* "purchaseToken" : "122333444455555",
|
||||
* "developerPayload":"example developer payload" }'
|
||||
* "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
|
||||
* was signed with the private key of the developer
|
||||
* TODO: change this to app-specific keys.
|
||||
*/
|
||||
Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
|
||||
String developerPayload);
|
||||
|
||||
/**
|
||||
* Returns the current SKUs owned by the user of the type and package name specified along with
|
||||
* purchase information and a signature of the data to be validated.
|
||||
* This will return all SKUs that have been purchased in V3 and managed items purchased using
|
||||
* V1 and V2 that have not been consumed.
|
||||
* @param apiVersion billing API version that the app is using
|
||||
* @param packageName package name of the calling app
|
||||
* @param type the type of the in-app items being requested
|
||||
* ("inapp" for one-time purchases and "subs" for subscription).
|
||||
* @param continuationToken to be set as null for the first call, if the number of owned
|
||||
* skus are too many, a continuationToken is returned in the response bundle.
|
||||
* This method can be called again with the continuation token to get the next set of
|
||||
* owned skus.
|
||||
* @return Bundle containing the following key-value pairs
|
||||
* "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
|
||||
* failure as listed above.
|
||||
* "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs
|
||||
* "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information
|
||||
* "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures
|
||||
* of the purchase information
|
||||
* "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
|
||||
* next set of in-app purchases. Only set if the
|
||||
* user has more owned skus than the current list.
|
||||
*/
|
||||
Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken);
|
||||
|
||||
/**
|
||||
* Consume the last purchase of the given SKU. This will result in this item being removed
|
||||
* from all subsequent responses to getPurchases() and allow re-purchase of this item.
|
||||
* @param apiVersion billing API version that the app is using
|
||||
* @param packageName package name of the calling app
|
||||
* @param purchaseToken token in the purchase information JSON that identifies the purchase
|
||||
* to be consumed
|
||||
* @return 0 if consumption succeeded. Appropriate error values for failures.
|
||||
*/
|
||||
int consumePurchase(int apiVersion, String packageName, String purchaseToken);
|
||||
}
|
112
app/src/main/assets/classic_theme_markdown.css
Normal file
@ -0,0 +1,112 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/**
|
||||
* markdown.css
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Lesser General Public License as published by the Free
|
||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
||||
* details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see http://gnu.org/licenses/lgpl.txt.
|
||||
*
|
||||
* @project Weblog and Open Source Projects of Florian Wolters
|
||||
* @version GIT: $Id$
|
||||
* @package xhtml-css
|
||||
* @author Florian Wolters <florian.wolters.85@googlemail.com>
|
||||
* @copyright 2012 Florian Wolters
|
||||
* @cssdoc version 1.0-pre
|
||||
* @license http://gnu.org/licenses/lgpl.txt GNU Lesser General Public License
|
||||
* @link http://github.com/FlorianWolters/jekyll-bootstrap-theme
|
||||
* @media all
|
||||
* @valid true
|
||||
*/
|
||||
|
||||
body {
|
||||
font-family: Helvetica, Arial, Freesans, clean, sans-serif;
|
||||
padding:1em;
|
||||
margin:auto;
|
||||
max-width:42em;
|
||||
background:#fefefe;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #000000;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
color: #000000;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
h6 {
|
||||
color: #777777;
|
||||
background-color: inherit;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 0.2em;
|
||||
border: 0;
|
||||
color: #CCCCCC;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
|
||||
p, blockquote, ul, ol, dl, li, table, pre {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
code, pre {
|
||||
border-radius: 3px;
|
||||
background-color: #F8F8F8;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
code {
|
||||
border: 1px solid #EAEAEA;
|
||||
margin: 0 2px;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: 1px solid #CCCCCC;
|
||||
line-height: 1.25em;
|
||||
overflow: auto;
|
||||
padding: 6px 10px;
|
||||
}
|
||||
|
||||
pre > code {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: #4183C4;
|
||||
background-color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
31
app/src/main/java/com/maskyn/fileeditorpro/HomeActivity.java
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro;
|
||||
|
||||
import com.maskyn.fileeditorpro.activity.MainActivity;
|
||||
|
||||
public class HomeActivity extends MainActivity {
|
||||
|
||||
@Override
|
||||
public boolean showInterstitial() {
|
||||
// nothing to do here
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
* Copyright (C) 2018 Adrian Malacoda
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.activity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.view.Window;
|
||||
import android.webkit.WebView;
|
||||
|
||||
import org.commonmark.node.Node;
|
||||
import org.commonmark.parser.Parser;
|
||||
import org.commonmark.renderer.html.HtmlRenderer;
|
||||
|
||||
public class MarkdownActivity extends Activity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
MarkdownView webView = new MarkdownView(this);
|
||||
setContentView(webView);
|
||||
webView.loadMarkdown(getIntent().getStringExtra("text"), "file:///android_asset/classic_theme_markdown.css");
|
||||
}
|
||||
|
||||
private static class MarkdownView extends WebView {
|
||||
private static final String CSS_LINK = "<link rel='stylesheet' type='text/css' href='%s'>";
|
||||
private final Parser parser;
|
||||
private final HtmlRenderer renderer;
|
||||
|
||||
MarkdownView (Context context) {
|
||||
super(context);
|
||||
parser = Parser.builder().build();
|
||||
renderer = HtmlRenderer.builder().build();
|
||||
}
|
||||
|
||||
public void loadMarkdown(String content, String cssUri) {
|
||||
String html = String.format(CSS_LINK, cssUri);
|
||||
html = html += renderer.render(parser.parse(content));
|
||||
loadDataWithBaseURL(null, html, "text/html", null, null);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,470 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.activity;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.widget.SearchView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.Filter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.PopupMenu;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.faizmalkani.floatingactionbutton.FloatingActionButton;
|
||||
import com.spazedog.lib.rootfw4.RootFW;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
import com.maskyn.fileeditorpro.adapter.AdapterDetailedList;
|
||||
import com.maskyn.fileeditorpro.dialogfragment.EditTextDialog;
|
||||
import com.maskyn.fileeditorpro.preferences.PreferenceHelper;
|
||||
import com.maskyn.fileeditorpro.util.AlphanumComparator;
|
||||
import com.maskyn.fileeditorpro.util.Build;
|
||||
import com.maskyn.fileeditorpro.util.ThemeUtils;
|
||||
|
||||
public class SelectFileActivity extends ActionBarActivity implements SearchView.OnQueryTextListener, AdapterView.OnItemClickListener, EditTextDialog.EditDialogListener {
|
||||
private String currentFolder;
|
||||
private ListView listView;
|
||||
private boolean wantAFile = true;
|
||||
private MenuItem mSearchViewMenuItem;
|
||||
private SearchView mSearchView;
|
||||
private Filter filter;
|
||||
private int prevposition = 0;
|
||||
private FloatingActionButton mFab;
|
||||
private boolean mfabOkMode = false;
|
||||
private File selectedFile;
|
||||
private boolean folderOpenMode = false;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
currentFolder = PreferenceHelper.defaultFolder(this);
|
||||
|
||||
ThemeUtils.setTheme(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_select_file);
|
||||
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
//final Actions action = (Actions) getIntent().getExtras().getSerializable("action");
|
||||
wantAFile = true; //action == Actions.SelectFile;
|
||||
mfabOkMode = false;
|
||||
folderOpenMode = getIntent().getBooleanExtra("foldermode", false);
|
||||
if(folderOpenMode)
|
||||
setTitle("Open Folder");
|
||||
|
||||
listView = (ListView) findViewById(android.R.id.list);
|
||||
listView.setOnItemClickListener(this);
|
||||
listView.setTextFilterEnabled(true);
|
||||
|
||||
mFab = (FloatingActionButton) findViewById(R.id.fabbutton);
|
||||
mFab.setColor(getResources().getColor(R.color.fab_light));
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_add));
|
||||
|
||||
mFab.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!mfabOkMode) {
|
||||
PopupMenu popup = new PopupMenu(SelectFileActivity.this, v);
|
||||
|
||||
popup.getMenuInflater().inflate(R.menu.popup_new_file, popup.getMenu());
|
||||
|
||||
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem item) {
|
||||
int i = item.getItemId();
|
||||
if (i == R.id.im_new_file) {
|
||||
EditTextDialog.newInstance(EditTextDialog.Actions.NewFile).show(getFragmentManager().beginTransaction(), "dialog");
|
||||
return true;
|
||||
} else if (i == R.id.im_new_folder) {
|
||||
EditTextDialog.newInstance(EditTextDialog.Actions.NewFolder).show(getFragmentManager().beginTransaction(), "dialog");
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
popup.show();
|
||||
}
|
||||
if (mfabOkMode) {
|
||||
finishWithResult(selectedFile);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mFab.listenTo(listView);
|
||||
|
||||
String lastNavigatedPath = PreferenceHelper.getWorkingFolder(this);
|
||||
|
||||
File file = new File(lastNavigatedPath);
|
||||
|
||||
if (!file.exists()) {
|
||||
PreferenceHelper.setWorkingFolder(this, PreferenceHelper.defaultFolder(this));
|
||||
file = new File(PreferenceHelper.defaultFolder(this));
|
||||
}
|
||||
|
||||
new UpdateList().execute(file.getAbsolutePath());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (currentFolder.isEmpty() || currentFolder.equals("/")) {
|
||||
finish();
|
||||
} else {
|
||||
File file = new File(currentFolder);
|
||||
String parentFolder = file.getParent();
|
||||
new UpdateList().execute(parentFolder);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onQueryTextChange(String newText) {
|
||||
if (filter == null)
|
||||
return true;
|
||||
|
||||
if (TextUtils.isEmpty(newText)) {
|
||||
filter.filter(null);
|
||||
} else {
|
||||
filter.filter(newText);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish this Activity with a result code and URI of the selected file.
|
||||
*
|
||||
* @param file The file selected.
|
||||
*/
|
||||
private void finishWithResult(File file) {
|
||||
if (file != null) {
|
||||
Uri uri = Uri.fromFile(file);
|
||||
//Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show();
|
||||
setResult(RESULT_OK, new Intent().setData(uri));
|
||||
finish();
|
||||
} else {
|
||||
setResult(RESULT_CANCELED);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent,
|
||||
View view, int position, long id) {
|
||||
|
||||
final String name = ((TextView) view.findViewById(android.R.id.text1)).getText().toString();
|
||||
if (name.equals("..")) {
|
||||
if (currentFolder.equals("/")) {
|
||||
new UpdateList().execute(PreferenceHelper.getWorkingFolder(this));
|
||||
} else {
|
||||
File tempFile = new File(currentFolder);
|
||||
if (tempFile.isFile()) {
|
||||
tempFile = tempFile.getParentFile()
|
||||
.getParentFile();
|
||||
} else {
|
||||
tempFile = tempFile.getParentFile();
|
||||
|
||||
}
|
||||
new UpdateList().execute(tempFile.getAbsolutePath());
|
||||
}
|
||||
if (mfabOkMode) {
|
||||
prevposition = 0;
|
||||
mfabOkMode = false;
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_add));
|
||||
}
|
||||
return;
|
||||
} else if (name.equals(getString(R.string.home))) {
|
||||
new UpdateList().execute(PreferenceHelper.getWorkingFolder(this));
|
||||
Toast.makeText(this, "test", Toast.LENGTH_SHORT).show();
|
||||
if (mfabOkMode) {
|
||||
prevposition = 0;
|
||||
mfabOkMode = false;
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_add));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//final File selectedFile = new File(currentFolder, name);
|
||||
selectedFile = new File(currentFolder, name);
|
||||
|
||||
if (!folderOpenMode) {
|
||||
if (selectedFile.isFile() && wantAFile) {
|
||||
if (prevposition == position)
|
||||
finishWithResult(selectedFile);
|
||||
else {
|
||||
prevposition = position;
|
||||
mfabOkMode = true;
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_ok));
|
||||
view.setSelected(true);
|
||||
}
|
||||
} else if (selectedFile.isDirectory()) {
|
||||
//Toast.makeText(this, "its folder", Toast.LENGTH_SHORT).show();
|
||||
if (mfabOkMode) {
|
||||
prevposition = 0;
|
||||
mfabOkMode = false;
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_add));
|
||||
}
|
||||
new UpdateList().execute(selectedFile.getAbsolutePath());
|
||||
}
|
||||
} else if (folderOpenMode) {
|
||||
if (selectedFile.isDirectory()) {
|
||||
if (prevposition == position) {
|
||||
new UpdateList().execute(selectedFile.getAbsolutePath());
|
||||
if (mfabOkMode) {
|
||||
prevposition = 0;
|
||||
mfabOkMode = false;
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_add));
|
||||
}
|
||||
} else {
|
||||
prevposition = position;
|
||||
mfabOkMode = true;
|
||||
mFab.setDrawable(getResources().getDrawable(R.drawable.ic_fab_ok));
|
||||
view.setSelected(true);
|
||||
}
|
||||
} else if (selectedFile.isFile()) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.activity_select_file, menu);
|
||||
mSearchViewMenuItem = menu.findItem(R.id.im_search);
|
||||
mSearchView = (SearchView) MenuItemCompat.getActionView(mSearchViewMenuItem);
|
||||
mSearchView.setIconifiedByDefault(true);
|
||||
mSearchView.setOnQueryTextListener(this);
|
||||
mSearchView.setSubmitButtonEnabled(false);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
// menu items
|
||||
MenuItem imSetAsWorkingFolder = menu.findItem(R.id.im_set_as_working_folder);
|
||||
MenuItem imIsWorkingFolder = menu.findItem(R.id.im_is_working_folder);
|
||||
MenuItem imSelectFolder = menu.findItem(R.id.im_select_folder);
|
||||
if (imSetAsWorkingFolder != null) {
|
||||
// set the imSetAsWorkingFolder visible only if the two folder dont concide
|
||||
imSetAsWorkingFolder.setVisible(!currentFolder.equals(PreferenceHelper.getWorkingFolder(SelectFileActivity.this)));
|
||||
}
|
||||
if (imIsWorkingFolder != null) {
|
||||
// set visible is the other is invisible
|
||||
imIsWorkingFolder.setVisible(!imSetAsWorkingFolder.isVisible());
|
||||
}
|
||||
if (imSelectFolder != null) {
|
||||
imSelectFolder.setVisible(!wantAFile);
|
||||
}
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int i = item.getItemId();
|
||||
if (i == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
} else if (i == R.id.im_set_as_working_folder) {
|
||||
PreferenceHelper.setWorkingFolder(SelectFileActivity.this, currentFolder);
|
||||
invalidateOptionsMenu();
|
||||
return true;
|
||||
} else if (i == R.id.im_is_working_folder) {
|
||||
Toast.makeText(getBaseContext(), R.string.is_the_working_folder, Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
} else if (i == R.id.im_select_folder) {
|
||||
finishWithResult(new File(currentFolder));
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onEdittextDialogEnded(final String inputText, final String hint, final EditTextDialog.Actions actions) {
|
||||
if (actions == EditTextDialog.Actions.NewFile && !TextUtils.isEmpty(inputText)) {
|
||||
File file = new File(currentFolder, inputText);
|
||||
try {
|
||||
file.createNewFile();
|
||||
finishWithResult(file);
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(SelectFileActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
} else if (actions == EditTextDialog.Actions.NewFolder && !TextUtils.isEmpty(inputText)) {
|
||||
File file = new File(currentFolder, inputText);
|
||||
file.mkdirs();
|
||||
new UpdateList().execute(currentFolder);
|
||||
}
|
||||
}
|
||||
|
||||
public enum Actions {
|
||||
SelectFile, SelectFolder
|
||||
}
|
||||
|
||||
private class UpdateList extends AsyncTask<String, Void, LinkedList<AdapterDetailedList.FileDetail>> {
|
||||
|
||||
String exceptionMessage;
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
if (mSearchView != null) {
|
||||
mSearchView.setIconified(true);
|
||||
MenuItemCompat.collapseActionView(mSearchViewMenuItem);
|
||||
mSearchView.setQuery("", false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected LinkedList<AdapterDetailedList.FileDetail> doInBackground(final String... params) {
|
||||
try {
|
||||
|
||||
final String path = params[0];
|
||||
if (TextUtils.isEmpty(path)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
File tempFolder = new File(path);
|
||||
if (tempFolder.isFile()) {
|
||||
tempFolder = tempFolder.getParentFile();
|
||||
}
|
||||
|
||||
String[] unopenableExtensions = {"apk", "mp3", "mp4", "png", "jpg", "jpeg"};
|
||||
|
||||
final LinkedList<AdapterDetailedList.FileDetail> fileDetails = new LinkedList<>();
|
||||
final LinkedList<AdapterDetailedList.FileDetail> folderDetails = new LinkedList<>();
|
||||
currentFolder = tempFolder.getAbsolutePath();
|
||||
|
||||
if (!tempFolder.canRead()) {
|
||||
if (RootFW.connect()) {
|
||||
com.spazedog.lib.rootfw4.utils.File folder = RootFW.getFile(currentFolder);
|
||||
com.spazedog.lib.rootfw4.utils.File.FileStat[] stats = folder.getDetailedList();
|
||||
|
||||
if (stats != null) {
|
||||
for (com.spazedog.lib.rootfw4.utils.File.FileStat stat : stats) {
|
||||
if (stat.type().equals("d")) {
|
||||
folderDetails.add(new AdapterDetailedList.FileDetail(stat.name(),
|
||||
getString(R.string.folder),
|
||||
""));
|
||||
} else if (!FilenameUtils.isExtension(stat.name().toLowerCase(), unopenableExtensions)
|
||||
&& stat.size() <= Build.MAX_FILE_SIZE * FileUtils.ONE_KB) {
|
||||
final long fileSize = stat.size();
|
||||
//SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy hh:mm a");
|
||||
//String date = format.format("");
|
||||
fileDetails.add(new AdapterDetailedList.FileDetail(stat.name(),
|
||||
FileUtils.byteCountToDisplaySize(fileSize), ""));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
File[] files = tempFolder.listFiles();
|
||||
|
||||
Arrays.sort(files, getFileNameComparator());
|
||||
|
||||
if (files != null) {
|
||||
for (final File f : files) {
|
||||
if (f.isDirectory()) {
|
||||
folderDetails.add(new AdapterDetailedList.FileDetail(f.getName(),
|
||||
getString(R.string.folder),
|
||||
""));
|
||||
} else if (f.isFile()
|
||||
&& !FilenameUtils.isExtension(f.getName().toLowerCase(), unopenableExtensions)
|
||||
&& FileUtils.sizeOf(f) <= Build.MAX_FILE_SIZE * FileUtils.ONE_KB) {
|
||||
final long fileSize = f.length();
|
||||
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyy hh:mm a");
|
||||
String date = format.format(f.lastModified());
|
||||
fileDetails.add(new AdapterDetailedList.FileDetail(f.getName(),
|
||||
FileUtils.byteCountToDisplaySize(fileSize), date));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
folderDetails.addAll(fileDetails);
|
||||
return folderDetails;
|
||||
} catch (Exception e) {
|
||||
exceptionMessage = e.getMessage();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
protected void onPostExecute(final LinkedList<AdapterDetailedList.FileDetail> names) {
|
||||
if (names != null) {
|
||||
boolean isRoot = currentFolder.equals("/");
|
||||
AdapterDetailedList mAdapter = new AdapterDetailedList(getBaseContext(), names, isRoot);
|
||||
listView.setAdapter(mAdapter);
|
||||
filter = mAdapter.getFilter();
|
||||
}
|
||||
if (exceptionMessage != null) {
|
||||
Toast.makeText(SelectFileActivity.this, exceptionMessage, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
invalidateOptionsMenu();
|
||||
super.onPostExecute(names);
|
||||
}
|
||||
|
||||
public final Comparator<File> getFileNameComparator() {
|
||||
return new AlphanumComparator() {
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getTheString(Object obj) {
|
||||
return ((File) obj).getName()
|
||||
.toLowerCase();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Filter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
import com.maskyn.fileeditorpro.util.MimeTypes;
|
||||
|
||||
public class AdapterDetailedList extends
|
||||
ArrayAdapter<AdapterDetailedList.FileDetail> {
|
||||
|
||||
// Layout Inflater
|
||||
private final LayoutInflater inflater;
|
||||
private final LinkedList<FileDetail> orig;
|
||||
private CustomFilter customFilter;
|
||||
// List of file details
|
||||
private LinkedList<FileDetail> fileDetails;
|
||||
|
||||
public AdapterDetailedList(final Context context,
|
||||
final LinkedList<FileDetail> fileDetails,
|
||||
final boolean isRoot) {
|
||||
super(context, R.layout.item_file_list, fileDetails);
|
||||
this.fileDetails = fileDetails;
|
||||
this.orig = fileDetails;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
if (!isRoot) {
|
||||
this.fileDetails.addFirst(new FileDetail("..", context.getString(R.string.folder), ""));
|
||||
} else {
|
||||
this.fileDetails.addFirst(new FileDetail(context.getString(R.string.home), context.getString(R.string.folder), ""));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View getView(final int position,
|
||||
View convertView, final ViewGroup parent) {
|
||||
if (convertView == null) {
|
||||
convertView = this.inflater
|
||||
.inflate(R.layout.item_file_list,
|
||||
null);
|
||||
final ViewHolder hold = new ViewHolder();
|
||||
hold.nameLabel = (TextView) convertView.findViewById(android.R.id.text1);
|
||||
hold.detailLabel = (TextView) convertView.findViewById(android.R.id.text2);
|
||||
hold.icon = (ImageView) convertView.findViewById(android.R.id.icon);
|
||||
convertView.setTag(hold);
|
||||
final FileDetail fileDetail = fileDetails.get(position);
|
||||
final String fileName = fileDetail.getName();
|
||||
setIcon(hold, fileDetail);
|
||||
hold.nameLabel.setText(fileName);
|
||||
hold.detailLabel.setText(fileDetail.getSize() + "\t\t" + fileDetail.getDateModified());
|
||||
} else {
|
||||
final ViewHolder hold = ((ViewHolder) convertView.getTag());
|
||||
final FileDetail fileDetail = fileDetails.get(position);
|
||||
final String fileName = fileDetail.getName();
|
||||
setIcon(hold, fileDetail);
|
||||
hold.nameLabel.setText(fileName);
|
||||
hold.detailLabel.setText(fileDetail.getSize() + "\t\t" + fileDetail.getDateModified());
|
||||
}
|
||||
return convertView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return fileDetails.size();
|
||||
}
|
||||
|
||||
private void setIcon(final ViewHolder viewHolder, final FileDetail fileDetail) {
|
||||
final String fileName = fileDetail.getName();
|
||||
final String ext = FilenameUtils.getExtension(fileName);
|
||||
if (fileDetail.isFolder()) {
|
||||
viewHolder.icon.setImageResource(R.color.file_folder);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_HTML).contains(ext) || ext.endsWith("html")) {
|
||||
viewHolder.icon.setImageResource(R.color.file_html);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_CODE).contains(ext)
|
||||
|| fileName.endsWith("css")
|
||||
|| fileName.endsWith("js")) {
|
||||
viewHolder.icon.setImageResource(R.color.file_code);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_ARCHIVE).contains(ext)) {
|
||||
viewHolder.icon.setImageResource(R.color.file_archive);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_MUSIC)
|
||||
.contains(ext)) {
|
||||
viewHolder.icon.setImageResource(R.color.file_media_music);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_PICTURE).contains(ext)) {
|
||||
viewHolder.icon.setImageResource(R.color.file_media_picture);
|
||||
} else if (Arrays.asList(MimeTypes.MIME_VIDEO).contains(ext)) {
|
||||
viewHolder.icon.setImageResource(R.color.file_media_video);
|
||||
} else {
|
||||
viewHolder.icon.setImageResource(R.color.file_text);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Filter getFilter() {
|
||||
if (customFilter == null) {
|
||||
customFilter = new CustomFilter();
|
||||
}
|
||||
return customFilter;
|
||||
}
|
||||
|
||||
public static class ViewHolder {
|
||||
|
||||
// Name of the file
|
||||
public TextView nameLabel;
|
||||
|
||||
// Size of the file
|
||||
public TextView detailLabel;
|
||||
|
||||
// Icon of the file
|
||||
public ImageView icon;
|
||||
}
|
||||
|
||||
public static class FileDetail {
|
||||
private final String name;
|
||||
private final String size;
|
||||
private final String dateModified;
|
||||
private final boolean isFolder;
|
||||
|
||||
public FileDetail(String name, String size,
|
||||
String dateModified) {
|
||||
this.name = name;
|
||||
this.size = size;
|
||||
this.dateModified = dateModified;
|
||||
isFolder = TextUtils.isEmpty(dateModified);
|
||||
}
|
||||
|
||||
public String getDateModified() {
|
||||
return dateModified;
|
||||
}
|
||||
|
||||
public String getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public boolean isFolder() {
|
||||
return isFolder;
|
||||
}
|
||||
}
|
||||
|
||||
private class CustomFilter extends Filter {
|
||||
|
||||
@Override
|
||||
protected FilterResults performFiltering(CharSequence constraint) {
|
||||
FilterResults results = new FilterResults();
|
||||
if (constraint == null || constraint.length() == 0) {
|
||||
results.values = orig;
|
||||
results.count = orig.size();
|
||||
} else {
|
||||
LinkedList<FileDetail> nHolderList = new LinkedList<>();
|
||||
for (FileDetail h : orig) {
|
||||
if (h.getName().toLowerCase().contains(constraint.toString().toLowerCase()))
|
||||
nHolderList.add(h);
|
||||
}
|
||||
results.values = nHolderList;
|
||||
results.count = nHolderList.size();
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
protected void publishResults(CharSequence constraint,
|
||||
FilterResults results) {
|
||||
|
||||
|
||||
fileDetails = (LinkedList<FileDetail>) results.values;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,134 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Typeface;
|
||||
import android.net.Uri;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.LinkedList;
|
||||
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
import com.maskyn.fileeditorpro.util.GreatUri;
|
||||
|
||||
public class AdapterDrawer extends
|
||||
ArrayAdapter<GreatUri> {
|
||||
|
||||
private final Callbacks callbacks;
|
||||
// Layout Inflater
|
||||
private final LayoutInflater inflater;
|
||||
// List of file details
|
||||
private final LinkedList<GreatUri> greatUris;
|
||||
private GreatUri selectedGreatUri = new GreatUri(Uri.EMPTY, "", "");
|
||||
|
||||
public AdapterDrawer(Context context,
|
||||
LinkedList<GreatUri> greatUris,
|
||||
Callbacks callbacks) {
|
||||
super(context, R.layout.item_file_list, greatUris);
|
||||
this.greatUris = greatUris;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
this.callbacks = callbacks;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View getView(final int position,
|
||||
View convertView, final ViewGroup parent) {
|
||||
if (convertView == null) {
|
||||
convertView = this.inflater
|
||||
.inflate(R.layout.item_drawer_list,
|
||||
parent, false);
|
||||
final ViewHolder hold = new ViewHolder();
|
||||
hold.nameLabel = (TextView) convertView.findViewById(android.R.id.text1);
|
||||
hold.cancelButton = (ImageView) convertView.findViewById(R.id.button_remove_from_list);
|
||||
convertView.setTag(hold);
|
||||
|
||||
final GreatUri greatUri = greatUris.get(position);
|
||||
final String fileName = greatUri.getFileName();
|
||||
hold.nameLabel.setText(fileName);
|
||||
hold.cancelButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
boolean closeOpenedFile = selectedGreatUri.getUri().equals(greatUri.getUri());
|
||||
callbacks.CancelItem(position, closeOpenedFile);
|
||||
if (closeOpenedFile)
|
||||
selectPosition(new GreatUri(Uri.EMPTY, "", ""));
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
if (selectedGreatUri.getUri().equals(greatUri.getUri())) {
|
||||
hold.nameLabel.setTypeface(null, Typeface.BOLD);
|
||||
} else {
|
||||
hold.nameLabel.setTypeface(null, Typeface.NORMAL);
|
||||
}
|
||||
|
||||
} else {
|
||||
final ViewHolder hold = ((ViewHolder) convertView.getTag());
|
||||
final GreatUri greatUri = greatUris.get(position);
|
||||
final String fileName = greatUri.getFileName();
|
||||
hold.nameLabel.setText(fileName);
|
||||
hold.cancelButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
boolean closeOpenedFile = selectedGreatUri.getUri().equals(greatUri.getUri());
|
||||
callbacks.CancelItem(position, closeOpenedFile);
|
||||
if (closeOpenedFile)
|
||||
selectPosition(new GreatUri(Uri.EMPTY, "", ""));
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
if (selectedGreatUri.getUri().equals(greatUri.getUri())) {
|
||||
hold.nameLabel.setTypeface(null, Typeface.BOLD);
|
||||
} else {
|
||||
hold.nameLabel.setTypeface(null, Typeface.NORMAL);
|
||||
}
|
||||
|
||||
}
|
||||
return convertView;
|
||||
}
|
||||
|
||||
public void selectPosition(GreatUri greatUri) {
|
||||
//callbacks.ItemSelected(selectedPath);
|
||||
this.selectedGreatUri = greatUri;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public interface Callbacks {
|
||||
void CancelItem(int position, boolean andCloseOpenedFile);
|
||||
|
||||
//void ItemSelected(String path);
|
||||
}
|
||||
|
||||
public static class ViewHolder {
|
||||
|
||||
// Name of the file
|
||||
public TextView nameLabel;
|
||||
|
||||
public ImageView cancelButton;
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
|
||||
public class AdapterTwoItem extends
|
||||
ArrayAdapter<String> {
|
||||
|
||||
private final LayoutInflater inflater;
|
||||
private final String[] lines1;
|
||||
private final String[] lines2;
|
||||
|
||||
public AdapterTwoItem(Context context,
|
||||
String[] lines1,
|
||||
String[] lines2) {
|
||||
super(context, R.layout.item_two_lines, lines1);
|
||||
this.lines1 = lines1;
|
||||
this.lines2 = lines2;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View getView(final int position,
|
||||
View convertView, final ViewGroup parent) {
|
||||
if (convertView == null) {
|
||||
convertView = this.inflater
|
||||
.inflate(R.layout.item_two_lines,
|
||||
parent, false);
|
||||
final ViewHolder hold = new ViewHolder();
|
||||
hold.line1 = (TextView) convertView.findViewById(android.R.id.text1);
|
||||
hold.line2 = (TextView) convertView.findViewById(android.R.id.text2);
|
||||
convertView.setTag(hold);
|
||||
|
||||
hold.line1.setText(lines1[position]);
|
||||
hold.line2.setText(lines2[position]);
|
||||
} else {
|
||||
final ViewHolder hold = ((ViewHolder) convertView.getTag());
|
||||
hold.line1.setText(lines1[position]);
|
||||
hold.line2.setText(lines2[position]);
|
||||
}
|
||||
return convertView;
|
||||
}
|
||||
|
||||
public static class ViewHolder {
|
||||
|
||||
public TextView line1;
|
||||
public TextView line2;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.application;
|
||||
|
||||
import android.app.Application;
|
||||
import android.view.ViewConfiguration;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class MyApp extends Application {
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
// force to sow the overflow menu icon
|
||||
try {
|
||||
ViewConfiguration config = ViewConfiguration.get(this);
|
||||
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
|
||||
if (menuKeyField != null) {
|
||||
menuKeyField.setAccessible(true);
|
||||
menuKeyField.setBoolean(config, false);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.dialogfragment;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
import android.view.View;
|
||||
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
import com.maskyn.fileeditorpro.views.DialogHelper;
|
||||
|
||||
/**
|
||||
* Dialog fragment that shows some info about this application.
|
||||
*
|
||||
* @author Artem Chepurnoy
|
||||
*/
|
||||
public class AboutDialog extends DialogFragment {
|
||||
|
||||
private static final String VERSION_UNAVAILABLE = "N/A";
|
||||
|
||||
/**
|
||||
* Merges app name and version name into one.
|
||||
*/
|
||||
public static CharSequence getVersionName(Context context) {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
String packageName = context.getPackageName();
|
||||
String versionName;
|
||||
try {
|
||||
PackageInfo info = pm.getPackageInfo(packageName, 0);
|
||||
versionName = info.versionName;
|
||||
|
||||
// Make the info part of version name a bit smaller.
|
||||
if (versionName.indexOf('-') >= 0) {
|
||||
versionName = versionName.replaceFirst("\\-", "<small>-") + "</small>";
|
||||
}
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
versionName = VERSION_UNAVAILABLE;
|
||||
}
|
||||
|
||||
Resources res = context.getResources();
|
||||
return Html.fromHtml(
|
||||
res.getString(R.string.about_title,
|
||||
res.getString(R.string.nome_app_turbo_editor), versionName)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
Context context = getActivity();
|
||||
assert context != null;
|
||||
|
||||
CharSequence message = Html.fromHtml(getString(
|
||||
R.string.about_message));
|
||||
|
||||
View view = new DialogHelper.Builder(context)
|
||||
.setIcon(getResources().getDrawable(R.drawable.ic_launcher))
|
||||
.setTitle(getVersionName(context))
|
||||
.setMessage(message)
|
||||
.createCommonView();
|
||||
|
||||
return new AlertDialog.Builder(context)
|
||||
.setView(view)
|
||||
.setNeutralButton(R.string.close, null)
|
||||
.create();
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.dialogfragment;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentManager;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
import it.gmariotti.changelibs.library.view.ChangeLogListView;
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
|
||||
public class ChangelogDialog extends DialogFragment {
|
||||
|
||||
public static void showChangeLogDialog(FragmentManager fragmentManager) {
|
||||
ChangelogDialog changelogDialog = new ChangelogDialog();
|
||||
FragmentTransaction ft = fragmentManager.beginTransaction();
|
||||
Fragment prev = fragmentManager.findFragmentByTag("changelogdemo_dialog");
|
||||
if (prev != null) {
|
||||
ft.remove(prev);
|
||||
}
|
||||
ft.addToBackStack(null);
|
||||
changelogDialog.show(ft, "changelogdemo_dialog");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
ChangeLogListView chgList = (ChangeLogListView) layoutInflater.inflate(R.layout.demo_changelog_fragment_dialogstandard, null);
|
||||
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.changelog)
|
||||
.setView(chgList)
|
||||
.setNegativeButton(android.R.string.cancel,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
}
|
||||
)
|
||||
.create();
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Vlad Mihalachi
|
||||
*
|
||||
* This file is part of Text Editor 8000.
|
||||
*
|
||||
* Text Editor 8000 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Text Editor 8000 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.maskyn.fileeditorpro.dialogfragment;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.DialogFragment;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.maskyn.fileeditorpro.R;
|
||||
import com.maskyn.fileeditorpro.views.DialogHelper;
|
||||
|
||||
// ...
|
||||
public class EditTextDialog extends DialogFragment implements TextView.OnEditorActionListener {
|
||||
|
||||
private EditText mEditText;
|
||||
|
||||
public static EditTextDialog newInstance(final Actions action) {
|
||||
return EditTextDialog.newInstance(action, "");
|
||||
}
|
||||
|
||||
public static EditTextDialog newInstance(final Actions action, final String hint) {
|
||||
final EditTextDialog f = new EditTextDialog();
|
||||
final Bundle args = new Bundle();
|
||||
args.putSerializable("action", action);
|
||||
args.putString("hint", hint);
|
||||
f.setArguments(args);
|
||||
return f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
final Actions action = (Actions) getArguments().getSerializable("action");
|
||||
final String title;
|
||||
switch (action) {
|
||||
case NewFile:
|
||||
title = getString(R.string.file);
|
||||
break;
|
||||
case NewFolder:
|
||||
title = getString(R.string.folder);
|
||||
break;
|
||||
case Rename:
|
||||
title = getString(R.string.rinomina);
|
||||
break;
|
||||
default:
|
||||
title = null;
|
||||
break;
|
||||
}
|
||||
|
||||
View view = new DialogHelper.Builder(getActivity())
|
||||
.setTitle(title)
|
||||
.setView(R.layout.dialog_fragment_edittext)
|
||||
.createSkeletonView();
|
||||
this.mEditText = (EditText) view.findViewById(android.R.id.edit);
|
||||
this.mEditText.setHint(R.string.name);
|
||||
|
||||
// Show soft keyboard automatically
|
||||
this.mEditText.setText(getArguments().getString("hint"));
|
||||
this.mEditText.requestFocus();
|
||||
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||
this.mEditText.setOnEditorActionListener(this);
|
||||
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
.setView(view)
|
||||
.setPositiveButton(android.R.string.ok,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
returnData();
|
||||
}
|
||||
}
|
||||
)
|
||||
.setNegativeButton(android.R.string.cancel,
|
||||
new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
|
||||
}
|
||||
}
|
||||
)
|
||||
.create();
|
||||
}
|
||||
|
||||
void returnData() {
|
||||
EditDialogListener target = (EditDialogListener) getTargetFragment();
|
||||
if (target == null) {
|
||||
target = (EditDialogListener) getActivity();
|
||||
}
|
||||
target.onEdittextDialogEnded(this.mEditText.getText().toString(), getArguments().getString("hint"),
|
||||
(Actions) getArguments().getSerializable("action"));
|
||||
this.dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
|
||||
if (EditorInfo.IME_ACTION_DONE == actionId) {
|
||||
returnData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public enum Actions {
|
||||
NewFile, NewFolder, Rename
|
||||
}
|
||||
|
||||
public interface EditDialogListener {
|
||||
void onEdittextDialogEnded(String result, String hint, Actions action);
|
||||
}
|
||||
}
|