Compare commits
89 Commits
v0.3
...
commonmark
Author | SHA1 | Date | |
---|---|---|---|
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 |
66
.gitignore
vendored
@ -1,35 +1,63 @@
|
|||||||
# built application files
|
# Built application files
|
||||||
*.apk
|
*.apk
|
||||||
*.ap_
|
*.ap_
|
||||||
|
|
||||||
# files for the dex VM
|
# Files for the Dalvik VM
|
||||||
*.dex
|
*.dex
|
||||||
|
|
||||||
# Java class files
|
# Java class files
|
||||||
*.class
|
*.class
|
||||||
|
|
||||||
# generated files
|
# Generated files
|
||||||
bin/
|
bin/
|
||||||
gen/
|
gen/
|
||||||
|
doc/
|
||||||
# Local configuration file (sdk path, etc)
|
/build
|
||||||
local.properties
|
|
||||||
|
|
||||||
# Eclipse project files
|
|
||||||
.classpath
|
|
||||||
.project
|
|
||||||
|
|
||||||
# Proguard folder generated by Eclipse
|
# Proguard folder generated by Eclipse
|
||||||
proguard/
|
proguard/
|
||||||
|
|
||||||
# Intellij project files
|
# Log Files
|
||||||
*.iml
|
*.log
|
||||||
*.ipr
|
|
||||||
*.iws
|
|
||||||
.idea/
|
|
||||||
|
|
||||||
# Android Studio
|
# Built application files
|
||||||
.gradle
|
/*/build/
|
||||||
/local.properties
|
|
||||||
/.idea/workspace.xml
|
# 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
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
*~
|
||||||
|
#*#
|
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>
|
@ -1,4 +1,5 @@
|
|||||||
turboeditor
|
# Text Editor 8000
|
||||||
===========
|
Text editor for Android. Originally forked from [Turbo Editor](https://github.com/vmihalachi/turbo-editor) by Vlad Mihalachi.
|
||||||
|
|
||||||
simple and beatiful android file editor
|
### 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,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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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.robuteditor"
|
||||||
|
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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
~
|
||||||
|
~ Robut 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.
|
||||||
|
~
|
||||||
|
~ Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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 Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Vlad Mihalachi
|
||||||
|
*
|
||||||
|
* This file is part of Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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.os.Bundle;
|
||||||
|
import android.support.v7.widget.SwitchCompat;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import org.mozilla.universalchardet.Constants;
|
||||||
|
|
||||||
|
import com.maskyn.fileeditorpro.R;
|
||||||
|
import com.maskyn.fileeditorpro.preferences.PreferenceHelper;
|
||||||
|
|
||||||
|
public class EncodingDialog extends DialogFragment implements AdapterView.OnItemClickListener {
|
||||||
|
|
||||||
|
private final String[] encodings = new String[]{
|
||||||
|
Constants.CHARSET_BIG5,
|
||||||
|
Constants.CHARSET_EUC_JP,
|
||||||
|
Constants.CHARSET_EUC_KR,
|
||||||
|
Constants.CHARSET_EUC_TW,
|
||||||
|
Constants.CHARSET_GB18030,
|
||||||
|
"GB2312",
|
||||||
|
Constants.CHARSET_IBM855,
|
||||||
|
Constants.CHARSET_IBM866,
|
||||||
|
Constants.CHARSET_ISO_2022_CN,
|
||||||
|
Constants.CHARSET_ISO_2022_JP,
|
||||||
|
Constants.CHARSET_ISO_2022_KR,
|
||||||
|
"ISO-8859-2",
|
||||||
|
Constants.CHARSET_ISO_8859_5,
|
||||||
|
Constants.CHARSET_ISO_8859_7,
|
||||||
|
Constants.CHARSET_ISO_8859_8,
|
||||||
|
Constants.CHARSET_KOI8_R,
|
||||||
|
Constants.CHARSET_MACCYRILLIC,
|
||||||
|
Constants.CHARSET_SHIFT_JIS,
|
||||||
|
Constants.CHARSET_UTF_16BE,
|
||||||
|
Constants.CHARSET_UTF_16LE,
|
||||||
|
Constants.CHARSET_UTF_32BE,
|
||||||
|
Constants.CHARSET_UTF_32LE,
|
||||||
|
Constants.CHARSET_UTF_8,
|
||||||
|
"UTF-16",
|
||||||
|
Constants.CHARSET_WINDOWS_1251,
|
||||||
|
Constants.CHARSET_WINDOWS_1252,
|
||||||
|
Constants.CHARSET_WINDOWS_1253,
|
||||||
|
Constants.CHARSET_WINDOWS_1255
|
||||||
|
};
|
||||||
|
private ListView list;
|
||||||
|
|
||||||
|
public static EncodingDialog newInstance() {
|
||||||
|
final EncodingDialog f = new EncodingDialog();
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
final View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_encoding_list, null);
|
||||||
|
list = (ListView) view.findViewById(android.R.id.list);
|
||||||
|
SwitchCompat autoencoding = (SwitchCompat) view.findViewById(android.R.id.checkbox);
|
||||||
|
autoencoding.setChecked(PreferenceHelper.getAutoEncoding(getActivity()));
|
||||||
|
|
||||||
|
autoencoding.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
|
PreferenceHelper.setAutoencoding(getActivity(), isChecked);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
list.setAdapter(new ArrayAdapter<>(getActivity(), R.layout.item_single_choice, encodings));
|
||||||
|
list.setOnItemClickListener(this);
|
||||||
|
|
||||||
|
String currentEncoding = PreferenceHelper.getEncoding(getActivity());
|
||||||
|
|
||||||
|
for (int i = 0; i < encodings.length; i++) {
|
||||||
|
if (currentEncoding.equals(encodings[i])) {
|
||||||
|
list.setItemChecked(i, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return new AlertDialog.Builder(getActivity())
|
||||||
|
.setView(view)
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
DialogListener target = (DialogListener) getTargetFragment();
|
||||||
|
if (target == null) {
|
||||||
|
target = (DialogListener) getActivity();
|
||||||
|
}
|
||||||
|
target.onEncodingSelected(encodings[position]);
|
||||||
|
this.dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface DialogListener {
|
||||||
|
void onEncodingSelected(String result);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Vlad Mihalachi
|
||||||
|
*
|
||||||
|
* This file is part of Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.provider.DocumentFile;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.maskyn.fileeditorpro.R;
|
||||||
|
import com.maskyn.fileeditorpro.adapter.AdapterTwoItem;
|
||||||
|
import com.maskyn.fileeditorpro.util.AccessStorageApi;
|
||||||
|
import com.maskyn.fileeditorpro.util.Device;
|
||||||
|
import com.maskyn.fileeditorpro.views.DialogHelper;
|
||||||
|
|
||||||
|
// ...
|
||||||
|
public class FileInfoDialog extends DialogFragment {
|
||||||
|
|
||||||
|
public static FileInfoDialog newInstance(Uri uri) {
|
||||||
|
final FileInfoDialog f = new FileInfoDialog();
|
||||||
|
final Bundle args = new Bundle();
|
||||||
|
args.putParcelable("uri", uri);
|
||||||
|
f.setArguments(args);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
View view = new DialogHelper.Builder(getActivity())
|
||||||
|
.setTitle(R.string.info)
|
||||||
|
.setView(R.layout.dialog_fragment_file_info)
|
||||||
|
.createSkeletonView();
|
||||||
|
//final View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment_file_info, null);
|
||||||
|
|
||||||
|
ListView list = (ListView) view.findViewById(android.R.id.list);
|
||||||
|
|
||||||
|
DocumentFile file = DocumentFile.fromFile(new File(AccessStorageApi.getPath(getActivity(), (Uri) getArguments().getParcelable("uri"))));
|
||||||
|
|
||||||
|
if (file == null && Device.hasKitKatApi()) {
|
||||||
|
file = DocumentFile.fromSingleUri(getActivity(), (Uri) getArguments().getParcelable("uri"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the last modification information.
|
||||||
|
Long lastModified = file.lastModified();
|
||||||
|
|
||||||
|
// Create a new date object and pass last modified information
|
||||||
|
// to the date object.
|
||||||
|
Date date = new Date(lastModified);
|
||||||
|
|
||||||
|
String[] lines1 = {
|
||||||
|
getString(R.string.name),
|
||||||
|
//getString(R.string.folder),
|
||||||
|
getString(R.string.size),
|
||||||
|
getString(R.string.modification_date)
|
||||||
|
};
|
||||||
|
String[] lines2 = {
|
||||||
|
file.getName(),
|
||||||
|
//file.getParent(),
|
||||||
|
FileUtils.byteCountToDisplaySize(file.length()),
|
||||||
|
date.toString()
|
||||||
|
};
|
||||||
|
|
||||||
|
list.setAdapter(new AdapterTwoItem(getActivity(), lines1, lines2));
|
||||||
|
|
||||||
|
|
||||||
|
return new AlertDialog.Builder(getActivity())
|
||||||
|
.setView(view)
|
||||||
|
.setPositiveButton(android.R.string.ok,
|
||||||
|
new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Vlad Mihalachi
|
||||||
|
*
|
||||||
|
* This file is part of Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 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.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import com.maskyn.fileeditorpro.R;
|
||||||
|
import com.maskyn.fileeditorpro.texteditor.SearchResult;
|
||||||
|
import com.maskyn.fileeditorpro.views.DialogHelper;
|
||||||
|
|
||||||
|
// ...
|
||||||
|
public class FindTextDialog extends DialogFragment {
|
||||||
|
|
||||||
|
private EditText textToFind, textToReplace;
|
||||||
|
private CheckBox regexCheck, replaceCheck, matchCaseCheck;
|
||||||
|
|
||||||
|
public static FindTextDialog newInstance(String allText) {
|
||||||
|
final FindTextDialog f = new FindTextDialog();
|
||||||
|
final Bundle args = new Bundle();
|
||||||
|
args.putString("allText", allText);
|
||||||
|
f.setArguments(args);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
//final View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment_find_text, null);
|
||||||
|
|
||||||
|
View view = new DialogHelper.Builder(getActivity())
|
||||||
|
.setTitle(R.string.find)
|
||||||
|
.setView(R.layout.dialog_fragment_find_text)
|
||||||
|
.createSkeletonView();
|
||||||
|
|
||||||
|
this.textToFind = (EditText) view.findViewById(R.id.text_to_find);
|
||||||
|
this.textToReplace = (EditText) view.findViewById(R.id.text_to_replace);
|
||||||
|
this.regexCheck = (CheckBox) view.findViewById(R.id.regex_check);
|
||||||
|
this.replaceCheck = (CheckBox) view.findViewById(R.id.replace_check);
|
||||||
|
this.matchCaseCheck = (CheckBox) view.findViewById(R.id.match_case_check);
|
||||||
|
|
||||||
|
replaceCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||||
|
textToReplace.setVisibility(isChecked ? View.VISIBLE : View.GONE);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return new AlertDialog.Builder(getActivity())
|
||||||
|
.setView(view)
|
||||||
|
.setPositiveButton(R.string.find,
|
||||||
|
new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart(); //super.onStart() is where dialog.show() is actually called on the underlying dialog, so we have to do it after this point
|
||||||
|
AlertDialog d = (AlertDialog) getDialog();
|
||||||
|
if (d != null) {
|
||||||
|
Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
|
||||||
|
positiveButton.setText(getString(R.string.find));
|
||||||
|
positiveButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
returnData();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Button negativeButton = (Button) d.getButton(Dialog.BUTTON_NEGATIVE);
|
||||||
|
negativeButton.setText(getString(android.R.string.cancel));
|
||||||
|
negativeButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void returnData() {
|
||||||
|
if (textToFind.getText().toString().isEmpty()) {
|
||||||
|
this.dismiss();
|
||||||
|
} else {
|
||||||
|
// we disable the okButton while we search
|
||||||
|
new SearchTask().execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface SearchDialogInterface {
|
||||||
|
void onSearchDone(SearchResult searchResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SearchTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
|
LinkedList<Integer> foundIndex;
|
||||||
|
boolean foundSomething;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... params) {
|
||||||
|
String allText = getArguments().getString("allText");
|
||||||
|
String whatToSearch = textToFind.getText().toString();
|
||||||
|
boolean caseSensitive = matchCaseCheck.isChecked();
|
||||||
|
boolean isRegex = regexCheck.isChecked();
|
||||||
|
foundIndex = new LinkedList<>();
|
||||||
|
Matcher matcher = null;
|
||||||
|
foundSomething = false;
|
||||||
|
|
||||||
|
if (isRegex) {
|
||||||
|
try {
|
||||||
|
if (caseSensitive)
|
||||||
|
matcher = Pattern.compile(whatToSearch, Pattern.MULTILINE).matcher(allText);
|
||||||
|
else
|
||||||
|
matcher = Pattern.compile(whatToSearch, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE).matcher(allText);
|
||||||
|
} catch (Exception e) {
|
||||||
|
isRegex = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRegex) {
|
||||||
|
while (matcher.find()) {
|
||||||
|
foundSomething = true;
|
||||||
|
|
||||||
|
foundIndex.add(matcher.start());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (caseSensitive == false) { // by default is case sensitive
|
||||||
|
whatToSearch = whatToSearch.toLowerCase();
|
||||||
|
allText = allText.toLowerCase();
|
||||||
|
}
|
||||||
|
int index = allText.indexOf(whatToSearch);
|
||||||
|
while (index >= 0) {
|
||||||
|
foundSomething = true;
|
||||||
|
|
||||||
|
foundIndex.add(index);
|
||||||
|
|
||||||
|
index = allText.indexOf(whatToSearch, index + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void aVoid) {
|
||||||
|
super.onPostExecute(aVoid);
|
||||||
|
if (foundSomething) {
|
||||||
|
// the class that called this Dialog should implement the SearchDialogIterface
|
||||||
|
SearchDialogInterface searchDialogInterface;
|
||||||
|
searchDialogInterface = ((SearchDialogInterface) getTargetFragment());
|
||||||
|
if (searchDialogInterface == null)
|
||||||
|
searchDialogInterface = ((SearchDialogInterface) getActivity());
|
||||||
|
|
||||||
|
// if who called this has not implemented the interface we return nothing
|
||||||
|
if (searchDialogInterface == null)
|
||||||
|
return;
|
||||||
|
// else we return positions and other things
|
||||||
|
else {
|
||||||
|
SearchResult searchResult = new SearchResult(foundIndex, textToFind.length(), replaceCheck.isChecked(), textToFind.getText().toString(), textToReplace.getText().toString(), regexCheck.isChecked());
|
||||||
|
searchDialogInterface.onSearchDone(searchResult);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
Toast.makeText(getActivity(), String.format(getString(R.string.occurrences_found), foundIndex.size()), Toast.LENGTH_SHORT).show();
|
||||||
|
// dismiss the dialog
|
||||||
|
FindTextDialog.this.dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Vlad Mihalachi
|
||||||
|
*
|
||||||
|
* This file is part of Robut Editor.
|
||||||
|
*
|
||||||
|
* Robut 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.
|
||||||
|
*
|
||||||
|
* Robut 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.maskyn.fileeditorpro.dialogfragment;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.app.DialogFragment;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import com.maskyn.fileeditorpro.R;
|
||||||
|
import com.maskyn.fileeditorpro.activity.MainActivity;
|
||||||
|
import com.maskyn.fileeditorpro.preferences.PreferenceHelper;
|
||||||
|
import com.maskyn.fileeditorpro.task.SaveFileTask;
|
||||||
|
import com.maskyn.fileeditorpro.util.GreatUri;
|
||||||
|
import com.maskyn.fileeditorpro.views.DialogHelper;
|
||||||
|
|
||||||
|
// ...
|
||||||
|
@SuppressLint("ValidFragment")
|
||||||
|
public class NewFileDetailsDialog extends DialogFragment {
|
||||||
|
|
||||||
|
private EditText mName;
|
||||||
|
private EditText mFolder;
|
||||||
|
|
||||||
|
GreatUri currentUri;
|
||||||
|
String fileText;
|
||||||
|
String fileEncoding;
|
||||||
|
|
||||||
|
public NewFileDetailsDialog(GreatUri currentUri, String fileText, String fileEncoding) {
|
||||||
|
this.currentUri = currentUri;
|
||||||
|
this.fileText = fileText;
|
||||||
|
this.fileEncoding = fileEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
View view = new DialogHelper.Builder(getActivity())
|
||||||
|
.setTitle(R.string.save_as)
|
||||||
|
.setView(R.layout.dialog_fragment_new_file_details)
|
||||||
|
.createSkeletonView();
|
||||||
|
|
||||||
|
this.mName = (EditText) view.findViewById(android.R.id.text1);
|
||||||
|
this.mFolder = (EditText) view.findViewById(android.R.id.text2);
|
||||||
|
|
||||||
|
boolean noName = TextUtils.isEmpty(currentUri.getFileName());
|
||||||
|
boolean noPath = TextUtils.isEmpty(currentUri.getFilePath());
|
||||||
|
|
||||||
|
if (noName) {
|
||||||
|
this.mName.setText(".txt");
|
||||||
|
} else {
|
||||||
|
this.mName.setText(currentUri.getFileName());
|
||||||
|
}
|
||||||
|
if (noPath) {
|
||||||
|
this.mFolder.setText(PreferenceHelper.getWorkingFolder(getActivity()));
|
||||||
|
} else {
|
||||||
|
this.mFolder.setText(currentUri.getParentFolder());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show soft keyboard automatically
|
||||||
|
this.mName.requestFocus();
|
||||||
|
this.mName.setSelection(0);
|
||||||
|
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||||
|
|
||||||
|
return new AlertDialog.Builder(getActivity())
|
||||||
|
.setView(view)
|
||||||
|
.setPositiveButton(android.R.string.ok,
|
||||||
|
new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
|
||||||
|
if (!mName.getText().toString().isEmpty() && !mFolder.getText().toString().isEmpty()) {
|
||||||
|
|
||||||
|
File file = new File(mFolder.getText().toString(), mName.getText().toString());
|
||||||
|
try {
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
file.createNewFile();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
final GreatUri newUri = new GreatUri(Uri.fromFile(file), file.getAbsolutePath(), file.getName());
|
||||||
|
|
||||||
|
new SaveFileTask((MainActivity) getActivity(), newUri, fileText, fileEncoding, new SaveFileTask.SaveFileInterface() {
|
||||||
|
@Override
|
||||||
|
public void fileSaved(Boolean success) {
|
||||||
|
if (getActivity() != null) {
|
||||||
|
((MainActivity) getActivity()).savedAFile(newUri, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).execute();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setNegativeButton(android.R.string.cancel,
|
||||||
|
new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|