19 Commits
v0.3 ... v1.10

Author SHA1 Message Date
276b831ceb Great Update to the source 2014-09-25 14:19:23 +02:00
ec5645c2a4 Update README.md 2014-09-02 09:41:32 +02:00
9ca7d62a8e Merge pull request #18 from DF1E/master
update gradle, gitignore and manifest
2014-08-14 12:26:28 +02:00
28353fea8f update gradle and manifest 2014-08-14 11:57:19 +02:00
ed285afadb Update README.md
New link to the Play Store
2014-07-28 14:24:15 +02:00
3697dd51a4 Eventbus now is build with gradle
Various optimization
2013-10-31 14:46:59 +01:00
ba0fb4ebaa Version 1.2: font size
font size
2013-10-11 15:18:06 +02:00
d7a5d513c7 Version 1.1 2013-10-07 15:10:07 +02:00
e540b8fda7 Version 1.1 monospace, create new file
monospace, create new file
2013-10-07 15:09:32 +02:00
49f890adeb Delete build.gradle 2013-10-06 11:18:38 +02:00
446a6da1fb Update README.md 2013-09-28 10:01:55 +02:00
474ce28737 Reformated the code and optimized imports 2013-09-28 09:44:24 +02:00
fca3410f26 Cleaned some classes 2013-09-28 09:38:46 +02:00
44773c2f1c Commented some parts of the app 2013-09-28 09:33:15 +02:00
41e9161e2b Update README.md 2013-09-28 08:56:43 +02:00
2d7bf9f05d Update README.md 2013-09-28 08:56:33 +02:00
40c9506ee2 Updated the strings 2013-09-27 15:15:45 +02:00
b3a8539afa Improved the about page
Changelog, Open source licenses
2013-09-27 14:53:36 +02:00
4d641485a5 Update README.md 2013-09-27 13:18:12 +02:00
382 changed files with 22553 additions and 3607 deletions

66
.gitignore vendored
View File

@ -1,35 +1,61 @@
# 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/
# Local configuration file (sdk path, etc)
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 app-pro/
.gradle
/local.properties # Built application files
/.idea/workspace.xml /*/build/
.DS_Store
# Crashlytics configuations
com_crashlytics_export_strings.xml
crashlytics-build.properties
crashlytics.properties
# Local configuration file (sdk path, etc)
local.properties
# Gradle generated files
.gradle/
# Signing files
.signing/
# User-specific configurations
.idea/libraries/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/vcs.xml
*.iml
# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

View File

@ -0,0 +1,9 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="Copyright (C) 2014 Vlad Mihalachi&#10;&#10;This file is part of Turbo Editor.&#10;&#10;Turbo Editor is free software: you can redistribute it and/or modify&#10;it under the terms of the GNU General Public License as published by&#10;the Free Software Foundation, either version 3 of the License, or&#10;(at your option) any later version.&#10;&#10;Turbo Editor is distributed in the hope that it will be useful,&#10;but WITHOUT ANY WARRANTY; without even the implied warranty of&#10;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the&#10;GNU General Public License for more details.&#10;&#10;You should have received a copy of the GNU General Public License&#10;along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;." />
<option name="keyword" value="Copyright" />
<option name="allowReplaceKeyword" value="Copyright" />
<option name="myName" value="Copyright Vlad Mihalachi" />
<option name="myLocal" value="true" />
</copyright>
</component>

23
.idea/gradle.xml generated Normal file
View 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="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<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/RootCommands" />
<option value="$PROJECT_DIR$/libraries/sharedCode" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

View File

@ -0,0 +1,9 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0" is_locked="false">
<option name="myName" value="Project Default" />
<option name="myLocal" value="false" />
<inspection_tool class="AndroidLintMissingQuantity" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="AndroidLintMissingTranslation" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="AndroidLintUnusedQuantity" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

View File

@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>

View File

@ -1,4 +1,66 @@
turboeditor # Turbo Editor
=========== [![Crowdin](https://d322cqt584bo4o.cloudfront.net/turbo-client/localized.png)](https://crowdin.com/project/turbo-client)
simple and beatiful android file editor Simple, powerful and Open Source file editor for Android licensed under the GPLv3 license.
### Contribute
You can contribute to this project in many ways:
* Browse our issues, comment on proposals, report bugs.
* Clone the balanced-dashboard repo, make some changes according to our
development guidelines and issue a pull-request with your changes.
* Help to translate the application on [Crowdin][crowdin]
* [Donate][donate]
------
### Development guidelines
1. Fork it (`git clone git://github.com/vmihalachi/turbo-editor.git`)
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Write your code
4. Commit your changes (`git commit -am 'Add some feature'`)
5. Push to the branch (`git push origin my-new-feature`)
6. Create new [pull request](https://help.github.com/articles/using-pull-requests)
------
###Donate
* Make a [Paypal][donate paypal] donation
* Flattr this project [![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=vmihalachi&url=https://raw.github.com/vmihalachi/turbo-editor&title=Turbo Editor&language=&tags=github&category=software)
------
###Download
* From the [Play Store][download playstore]
* Want to try beta releases? Be a part of the Google Plus [Community][community googleplus]!
------
### Developer
[Vlad Mihalachi][developer site]
------
### A special thanks to..
* [Dumitru Grubii][contributor dumitru grubii] for the icon
* All the translators
* You?
------
### License
Turbo Client is made available under the terms of the [GPLv3][gplv3].
See the [LICENSE][license] file that accompanies this distribution for the full text of the license.
[gplv3]: http://www.gnu.org/licenses/gpl.html
[license]: https://github.com/vmihalachi/turbo-editor/LICENSE
[donate]: https://github.com/vmihalachi/turbo-editor#donate
[donate paypal]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=PUQXSX6MTXHZ2
[community googleplus]: https://plus.google.com/u/0/communities/111974095419108178946
[download playstore]: https://play.google.com/store/apps/details?id=com.maskyn.fileeditor
[crowdin]: https://crowdin.net/project/turbo-client
[developer site]: http://vmihalachi.com/
[crowdin]: https://crowdin.net/project/turbo-client
[contributor dumitru grubii]: https://twitter.com/DumitruGrubii
[project issues]: https://github.com/vmihalachi/turbo-editor/issues
[project wiki]: https://github.com/vmihalachi/turbo-editor/wiki

View File

@ -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')
}

View File

@ -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>

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}
}
}

View File

@ -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()));
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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 "";
}
}
}

View File

@ -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
}
}

View File

@ -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;
}
}
}

View File

@ -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 {
}

View File

@ -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 {
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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])*?\\*/|//.*");
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 926 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -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>

View File

@ -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" />

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

68
app/build.gradle Normal file
View File

@ -0,0 +1,68 @@
/*
* Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
buildscript {
repositories {
maven { url 'http://download.crashlytics.com/maven' }
}
dependencies {
classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'crashlytics'
repositories {
maven { url 'http://download.crashlytics.com/maven' }
}
android {
compileSdkVersion 20
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.maskyn.fileeditor"
minSdkVersion 14
targetSdkVersion 20
versionCode 26
versionName "1.10"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':libraries:sharedCode')
compile 'com.google.android.gms:play-services:5.0.89'
compile 'com.crashlytics.android:crashlytics:1.+'
}

17
app/proguard-rules.pro vendored Normal file
View 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 *;
#}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2013 Vlad Mihalachi * Copyright (C) 2014 Vlad Mihalachi
* *
* This file is part of Turbo Editor. * This file is part of Turbo Editor.
* *
@ -14,19 +14,19 @@
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with Turbo Editor. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.vmihalachi.turboeditor.event; package com.maskyn.fileeditor;
public class NewFileOpened { import android.app.Application;
private String filePath; import android.test.ApplicationTestCase;
public NewFileOpened(String filePath) { /**
this.filePath = filePath; * <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);
} }
}
public String getFilePath() {
return filePath;
}
}

View File

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.maskyn.fileeditor"
android:installLocation="auto">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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="false"
android:largeHeap="true"
android:supportsRtl="true"
>
<!-- android:alwaysRetainTaskState="true" -->
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
<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|adjustPan"
android:theme="@style/AppTheme.Light.Editor">
<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="*.md"/>
<data android:pathPattern="*.php" />
</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="sharedcode.turboeditor.activity.PreferenceAbout"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/info"
android:parentActivityName=".HomeActivity"
android:theme="@style/AppTheme.Dark">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.maskyn.fileeditor.activity.HomeActivity" />
</activity>
<activity
android:name="sharedcode.turboeditor.activity.LicensesActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/open_source_license"
android:parentActivityName="sharedcode.turboeditor.activity.PreferenceAbout"
android:theme="@style/AppTheme.Light">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.maskyn.fileeditor.activity.PreferenceAbout" />
</activity>
<activity
android:name="sharedcode.turboeditor.activity.SelectFileActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/open_a_file"
android:parentActivityName=".HomeActivity"
android:theme="@style/AppTheme.Light">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.maskyn.fileeditor.activity.HomeActivity" />
</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.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<meta-data android:name="com.crashlytics.ApiKey" android:value="672ab7531ce1e2e83c2ec6d84e8e94f2fa692c2a"/>
</application>
</manifest>

View File

@ -0,0 +1,59 @@
/*
* Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.maskyn.fileeditor;
import android.app.Activity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import java.util.Calendar;
import sharedcode.turboeditor.preferences.PreferenceHelper;
public class AdsHelper {
private Activity activity;
private InterstitialAd interstitial;
public AdsHelper(Activity activity) {
this.activity = activity;
int today = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
int lastDayAdShowed = PreferenceHelper.getLastDayAdShowed(activity);
boolean showAd = today != lastDayAdShowed;
if (showAd) {
interstitial = new InterstitialAd(activity);
interstitial.setAdUnitId("ca-app-pub-5679083452234719/7178038180");
// Create ad request.
AdRequest adRequest = new AdRequest.Builder().build();
// Begin loading your interstitial.
interstitial.loadAd(adRequest);
}
}
public void displayInterstitial() {
if (interstitial != null && interstitial.isLoaded()) {
interstitial.show();
int today = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
PreferenceHelper.setLastDayAdShowed(activity, today);
}
}
}

View File

@ -0,0 +1,46 @@
/*
* Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.maskyn.fileeditor;
import android.os.Bundle;
import com.crashlytics.android.Crashlytics;
import sharedcode.turboeditor.activity.BaseHomeActivity;
import sharedcode.turboeditor.preferences.PreferenceHelper;
public class HomeActivity extends BaseHomeActivity {
private AdsHelper adsHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(PreferenceHelper.getSendErrorReports(this))
Crashlytics.start(this);
// setup the ads
adsHelper = new AdsHelper(this);
}
@Override
public void displayInterstitial() {
adsHelper.displayInterstitial();
}
}

View File

@ -1 +1,38 @@
/*
* Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
-->
<pre-dex-items>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\eventbus-2.2.1-32e81c5612ed132ff771b5425053d87f4f6c68c5.jar"
jar="C:\Users\Vlad\.gradle\caches\modules-2\files-2.1\de.greenrobot\eventbus\2.2.1\a18ff12a9ab5ae52fd30d42f134517997568231e\eventbus-2.2.1.jar"
jumboMode="false"
revision="20.0.0"
sha1="a18ff12a9ab5ae52fd30d42f134517997568231e"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\pre-dexed\debug\juniversalchardet-1.0.3-24b647622164ce26bc5d0be361e05056efc68e13.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\sharedCode\unspecified\libs\juniversalchardet-1.0.3.jar"
jumboMode="false"
revision="20.0.0"
sha1="591d72211acc0b909b79c840e0b3ed9a0982d807"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\pre-dexed\debug\support-v4-19.0.1-f87b13e7ed00736c2050eda75093bf42b0503c64.jar"
jar="C:\Users\Vlad\AppData\Local\Android\android-sdk\extras\android\m2repository\com\android\support\support-v4\19.0.1\support-v4-19.0.1.jar"
jumboMode="false"
revision="20.0.0"
sha1="587da9a481ffd341d2fa091704489b89845ddacd"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\commons-io-2.4-63b64e68cd19031cd252ac65a3ef94421c1bf0f4.jar"
jar="C:\Users\Vlad\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\2.4\b1b6ea3b7e4aa4f492509a4952029cd8e48019ad\commons-io-2.4.jar"
jumboMode="false"
revision="20.0.0"
sha1="b1b6ea3b7e4aa4f492509a4952029cd8e48019ad"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\classes-da434e33e14290126d2ad09adf85ad0bbd76f025.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\FloatingActionButton\unspecified\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="2f3117da0016b1126fafe7fb332a45d2f910d76c"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\pre-dexed\debug\classes-a52f37b7ca7cde7ab02ff10bba80d1c496284125.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\FloatingActionButton\unspecified\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="2f3117da0016b1126fafe7fb332a45d2f910d76c"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\support-v4-19.1.0-cf7033c44b86e758f85990185111614bac3ecfa8.jar"
jar="C:\Users\Vlad\AppData\Local\Android\android-sdk\extras\android\m2repository\com\android\support\support-v4\19.1.0\support-v4-19.1.0.jar"
jumboMode="false"
revision="20.0.0"
sha1="85f201b380937e61a9dce6ca90ccf6872abbfb67"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\juniversalchardet-1.0.3-2e38d54a78dd518320bb6abe3d8931a19ff26792.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\sharedCode\unspecified\libs\juniversalchardet-1.0.3.jar"
jumboMode="false"
revision="20.0.0"
sha1="591d72211acc0b909b79c840e0b3ed9a0982d807"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\classes-2ad27a3265673aeeb8f40e4322d8e19509329c96.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\exploded-aar\com.github.gabrielemariotti.changeloglib\library\1.5.1\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="74a89f0f8b56d9f11d70b8d8134cf4109f4797dc"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\pre-dexed\debug\classes-bfc447e4dbe83598b94dbdc8e38492cbbda6ebb2.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\RootCommands\unspecified\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="cdecd8167dfb75d5785decb911fc4516445dd6a6"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\release\classes-579a5ce52888f504a812e0f68758a11f20a21c15.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\sharedCode\unspecified\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="a593d4ce7ccdfa1eac8d97a82db64f23614b59a1"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\pre-dexed\debug\classes-0a2ec632e1127b260f2b888ca5539fd41a1a638b.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\exploded-aar\com.github.gabrielemariotti.changeloglib\library\1.5.1\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="74a89f0f8b56d9f11d70b8d8134cf4109f4797dc"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\classes-a8678f35ea62f18f2f7b60a15203aa6c74b5e559.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\exploded-aar\com.google.android.gms\play-services\5.0.89\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="d71573c9c5ea98a8db47ad6ff993a63d492b3bfa"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\pre-dexed\release\classes-3e47e18f46719c7bf296f4b49ff03aaa3d406ba6.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app-pro\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\sharedCode\unspecified\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="a593d4ce7ccdfa1eac8d97a82db64f23614b59a1"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\release\crashlytics-1.1.13-7bbec76a44aa9cc3279ec6bff22b2c929a8abf67.jar"
jar="C:\Users\Vlad\.gradle\caches\modules-2\files-2.1\com.crashlytics.android\crashlytics\1.1.13\e821eafa1bf489a26bdb71f95078c26785b37a1\crashlytics-1.1.13.jar"
jumboMode="false"
revision="20.0.0"
sha1="0e821eafa1bf489a26bdb71f95078c26785b37a1"/>
<item
dex="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\pre-dexed\debug\classes-c9a98cf79b48106440348a9fa210060d1b8b2647.jar"
jar="C:\Users\Vlad\Documents\AndroidStudioProjects\TurboMaterialEditor\app\build\intermediates\exploded-aar\TurboMaterialEditor.libraries\RootCommands\unspecified\classes.jar"
jumboMode="false"
revision="20.0.0"
sha1="cdecd8167dfb75d5785decb911fc4516445dd6a6"/>
</pre-dex-items>

Binary file not shown.

37
gradle.properties Normal file
View File

@ -0,0 +1,37 @@
#
# Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Settings specified in this file will override any Gradle settings
# configured through the IDE.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

Binary file not shown.

View File

@ -1,6 +1,25 @@
#Thu Sep 26 13:46:28 CEST 2013 #
# Copyright (C) 2014 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 this program. If not, see <http://www.gnu.org/licenses/>.
#
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-1.7-bin.zip distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>FloatingActionButton</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,4 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.source=1.6

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.faizmalkani.floatingactionbutton">
<application
android:allowBackup="true">
</application>
</manifest>

View File

@ -0,0 +1,28 @@
apply plugin: 'com.android.library'
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId 'com.faizmalkani.floatingactionbutton'
minSdkVersion 14
targetSdkVersion 19
versionName "1.0"
versionCode 1
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
dependencies {
}

View File

@ -0,0 +1,13 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.faizmalkani.floatingactionbutton;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String PACKAGE_NAME = "com.faizmalkani.floatingactionbutton";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}

View File

@ -0,0 +1,13 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.faizmalkani.floatingactionbutton;
public final class BuildConfig {
public static final boolean DEBUG = false;
public static final String PACKAGE_NAME = "com.faizmalkani.floatingactionbutton";
public static final String BUILD_TYPE = "release";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}

View File

@ -0,0 +1,13 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.faizmalkani.floatingactionbutton.test;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String PACKAGE_NAME = "com.faizmalkani.floatingactionbutton.test";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}

View File

@ -0,0 +1,173 @@
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.faizmalkani.floatingactionbutton;
public final class R {
public static final class attr {
/** <p>Must be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>",
"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int color=0x7f010001;
/** <p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int drawable=0x7f010000;
/** <p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowColor=0x7f010005;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowDx=0x7f010003;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowDy=0x7f010004;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowRadius=0x7f010002;
}
public static final class styleable {
/** Attributes that can be used with a FloatingActionButton.
<p>Includes the following attributes:</p>
<table>
<colgroup align="left" />
<colgroup align="left" />
<tr><th>Attribute</th><th>Description</th></tr>
<tr><td><code>{@link #FloatingActionButton_color com.faizmalkani.floatingactionbutton:color}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_drawable com.faizmalkani.floatingactionbutton:drawable}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowColor com.faizmalkani.floatingactionbutton:shadowColor}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowDx com.faizmalkani.floatingactionbutton:shadowDx}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowDy com.faizmalkani.floatingactionbutton:shadowDy}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowRadius com.faizmalkani.floatingactionbutton:shadowRadius}</code></td><td></td></tr>
</table>
@see #FloatingActionButton_color
@see #FloatingActionButton_drawable
@see #FloatingActionButton_shadowColor
@see #FloatingActionButton_shadowDx
@see #FloatingActionButton_shadowDy
@see #FloatingActionButton_shadowRadius
*/
public static final int[] FloatingActionButton = {
0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003,
0x7f010004, 0x7f010005
};
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#color}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>",
"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:color
*/
public static final int FloatingActionButton_color = 1;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#drawable}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:drawable
*/
public static final int FloatingActionButton_drawable = 0;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowColor}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowColor
*/
public static final int FloatingActionButton_shadowColor = 5;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowDx}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowDx
*/
public static final int FloatingActionButton_shadowDx = 3;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowDy}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowDy
*/
public static final int FloatingActionButton_shadowDy = 4;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowRadius}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowRadius
*/
public static final int FloatingActionButton_shadowRadius = 2;
};
}

View File

@ -0,0 +1,173 @@
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.faizmalkani.floatingactionbutton;
public final class R {
public static final class attr {
/** <p>Must be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>",
"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int color=0x7f010001;
/** <p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int drawable=0x7f010000;
/** <p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowColor=0x7f010005;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowDx=0x7f010003;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowDy=0x7f010004;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static int shadowRadius=0x7f010002;
}
public static final class styleable {
/** Attributes that can be used with a FloatingActionButton.
<p>Includes the following attributes:</p>
<table>
<colgroup align="left" />
<colgroup align="left" />
<tr><th>Attribute</th><th>Description</th></tr>
<tr><td><code>{@link #FloatingActionButton_color com.faizmalkani.floatingactionbutton:color}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_drawable com.faizmalkani.floatingactionbutton:drawable}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowColor com.faizmalkani.floatingactionbutton:shadowColor}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowDx com.faizmalkani.floatingactionbutton:shadowDx}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowDy com.faizmalkani.floatingactionbutton:shadowDy}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowRadius com.faizmalkani.floatingactionbutton:shadowRadius}</code></td><td></td></tr>
</table>
@see #FloatingActionButton_color
@see #FloatingActionButton_drawable
@see #FloatingActionButton_shadowColor
@see #FloatingActionButton_shadowDx
@see #FloatingActionButton_shadowDy
@see #FloatingActionButton_shadowRadius
*/
public static final int[] FloatingActionButton = {
0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003,
0x7f010004, 0x7f010005
};
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#color}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>",
"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:color
*/
public static final int FloatingActionButton_color = 1;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#drawable}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:drawable
*/
public static final int FloatingActionButton_drawable = 0;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowColor}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowColor
*/
public static final int FloatingActionButton_shadowColor = 5;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowDx}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowDx
*/
public static final int FloatingActionButton_shadowDx = 3;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowDy}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowDy
*/
public static final int FloatingActionButton_shadowDy = 4;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.R.attr#shadowRadius}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton:shadowRadius
*/
public static final int FloatingActionButton_shadowRadius = 2;
};
}

View File

@ -0,0 +1,27 @@
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.faizmalkani.floatingactionbutton;
public final class R {
public static final class attr {
public static final int color = 0x7f010001;
public static final int drawable = 0x7f010000;
public static final int shadowColor = 0x7f010005;
public static final int shadowDx = 0x7f010003;
public static final int shadowDy = 0x7f010004;
public static final int shadowRadius = 0x7f010002;
}
public static final class styleable {
public static final int[] FloatingActionButton = { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005 };
public static final int FloatingActionButton_color = 1;
public static final int FloatingActionButton_drawable = 0;
public static final int FloatingActionButton_shadowColor = 5;
public static final int FloatingActionButton_shadowDx = 3;
public static final int FloatingActionButton_shadowDy = 4;
public static final int FloatingActionButton_shadowRadius = 2;
}
}

View File

@ -0,0 +1,173 @@
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.faizmalkani.floatingactionbutton.test;
public final class R {
public static final class attr {
/** <p>Must be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>",
"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static final int color=0x7f010001;
/** <p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static final int drawable=0x7f010000;
/** <p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static final int shadowColor=0x7f010005;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static final int shadowDx=0x7f010003;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static final int shadowDy=0x7f010004;
/** <p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
*/
public static final int shadowRadius=0x7f010002;
}
public static final class styleable {
/** Attributes that can be used with a FloatingActionButton.
<p>Includes the following attributes:</p>
<table>
<colgroup align="left" />
<colgroup align="left" />
<tr><th>Attribute</th><th>Description</th></tr>
<tr><td><code>{@link #FloatingActionButton_color com.faizmalkani.floatingactionbutton.test:color}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_drawable com.faizmalkani.floatingactionbutton.test:drawable}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowColor com.faizmalkani.floatingactionbutton.test:shadowColor}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowDx com.faizmalkani.floatingactionbutton.test:shadowDx}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowDy com.faizmalkani.floatingactionbutton.test:shadowDy}</code></td><td></td></tr>
<tr><td><code>{@link #FloatingActionButton_shadowRadius com.faizmalkani.floatingactionbutton.test:shadowRadius}</code></td><td></td></tr>
</table>
@see #FloatingActionButton_color
@see #FloatingActionButton_drawable
@see #FloatingActionButton_shadowColor
@see #FloatingActionButton_shadowDx
@see #FloatingActionButton_shadowDy
@see #FloatingActionButton_shadowRadius
*/
public static final int[] FloatingActionButton = {
0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003,
0x7f010004, 0x7f010005
};
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.test.R.attr#color}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>",
"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton.test:color
*/
public static final int FloatingActionButton_color = 1;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.test.R.attr#drawable}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton.test:drawable
*/
public static final int FloatingActionButton_drawable = 0;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.test.R.attr#shadowColor}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be an integer value, such as "<code>100</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton.test:shadowColor
*/
public static final int FloatingActionButton_shadowColor = 5;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.test.R.attr#shadowDx}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton.test:shadowDx
*/
public static final int FloatingActionButton_shadowDx = 3;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.test.R.attr#shadowDy}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton.test:shadowDy
*/
public static final int FloatingActionButton_shadowDy = 4;
/**
<p>This symbol is the offset where the {@link com.faizmalkani.floatingactionbutton.test.R.attr#shadowRadius}
attribute's value can be found in the {@link #FloatingActionButton} array.
<p>Must be a floating point value, such as "<code>1.2</code>".
<p>This may also be a reference to a resource (in the form
"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or
theme attribute (in the form
"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>")
containing a value of this type.
@attr name com.faizmalkani.floatingactionbutton.test:shadowRadius
*/
public static final int FloatingActionButton_shadowRadius = 2;
};
}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.faizmalkani.floatingactionbutton"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application android:allowBackup="true" >
</application>
</manifest>

View File

@ -0,0 +1,13 @@
int attr color 0x7f010001
int attr drawable 0x7f010000
int attr shadowColor 0x7f010005
int attr shadowDx 0x7f010003
int attr shadowDy 0x7f010004
int attr shadowRadius 0x7f010002
int[] styleable FloatingActionButton { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005 }
int styleable FloatingActionButton_color 1
int styleable FloatingActionButton_drawable 0
int styleable FloatingActionButton_shadowColor 5
int styleable FloatingActionButton_shadowDx 3
int styleable FloatingActionButton_shadowDy 4
int styleable FloatingActionButton_shadowRadius 2

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- From: file:/C:/Users/Vlad/Documents/AndroidStudioProjects/turbo-editor/libraries/FloatingActionButton/res/values/attrs.xml -->
<eat-comment />
<declare-styleable name="FloatingActionButton">
<attr name="drawable" format="integer" />
<attr name="color" format="color" />
<attr name="shadowRadius" format="float" />
<attr name="shadowDx" format="float" />
<attr name="shadowDy" format="float" />
<attr name="shadowColor" format="integer" />
</declare-styleable>
</resources>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.faizmalkani.floatingactionbutton"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application android:allowBackup="true" >
</application>
</manifest>

View File

@ -0,0 +1,13 @@
int attr color 0x7f010001
int attr drawable 0x7f010000
int attr shadowColor 0x7f010005
int attr shadowDx 0x7f010003
int attr shadowDy 0x7f010004
int attr shadowRadius 0x7f010002
int[] styleable FloatingActionButton { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005 }
int styleable FloatingActionButton_color 1
int styleable FloatingActionButton_drawable 0
int styleable FloatingActionButton_shadowColor 5
int styleable FloatingActionButton_shadowDx 3
int styleable FloatingActionButton_shadowDy 4
int styleable FloatingActionButton_shadowRadius 2

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- From: file:/C:/Users/Vlad/Documents/AndroidStudioProjects/turbo-editor/libraries/FloatingActionButton/res/values/attrs.xml -->
<eat-comment />
<declare-styleable name="FloatingActionButton">
<attr name="drawable" format="integer" />
<attr name="color" format="color" />
<attr name="shadowRadius" format="float" />
<attr name="shadowDx" format="float" />
<attr name="shadowDy" format="float" />
<attr name="shadowColor" format="integer" />
</declare-styleable>
</resources>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="2" >
<dataSet config="main" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\assets" />
</dataSet>
<dataSet config="debug" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\src\debug\assets" />
</dataSet>
</merger>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="2" >
<dataSet config="main" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\assets" />
</dataSet>
<dataSet config="release" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\src\release\assets" />
</dataSet>
</merger>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="2" >
<dataSet config="debug" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\intermediates\bundles\debug\assets" />
</dataSet>
<dataSet config="main" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\src\androidTest\assets" />
</dataSet>
</merger>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="2" >
<dataSet config="debug" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\intermediates\bundles\debug\res" >
<file
path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\intermediates\bundles\debug\res\values\values.xml"
qualifiers="" >
<declare-styleable name="FloatingActionButton" >
<attr
name="drawable"
format="integer" />
<attr
name="color"
format="color" />
<attr
name="shadowRadius"
format="float" />
<attr
name="shadowDx"
format="float" />
<attr
name="shadowDy"
format="float" />
<attr
name="shadowColor"
format="integer" />
</declare-styleable>
</file>
</source>
</dataSet>
<dataSet config="main" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\src\androidTest\res" />
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\generated\res\rs\test\debug" />
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\generated\res\generated\test\debug" />
</dataSet>
</merger>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="2" >
<dataSet config="main" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\res" >
<file
path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\res\values\attrs.xml"
qualifiers="" >
<declare-styleable name="FloatingActionButton" >
<attr
name="drawable"
format="integer" />
<attr
name="color"
format="color" />
<attr
name="shadowRadius"
format="float" />
<attr
name="shadowDx"
format="float" />
<attr
name="shadowDy"
format="float" />
<attr
name="shadowColor"
format="integer" />
</declare-styleable>
</file>
</source>
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\generated\res\rs\debug" />
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\generated\res\generated\debug" />
</dataSet>
<dataSet config="debug" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\src\debug\res" />
</dataSet>
</merger>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="2" >
<dataSet config="main" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\res" >
<file
path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\res\values\attrs.xml"
qualifiers="" >
<declare-styleable name="FloatingActionButton" >
<attr
name="drawable"
format="integer" />
<attr
name="color"
format="color" />
<attr
name="shadowRadius"
format="float" />
<attr
name="shadowDx"
format="float" />
<attr
name="shadowDy"
format="float" />
<attr
name="shadowColor"
format="integer" />
</declare-styleable>
</file>
</source>
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\generated\res\rs\release" />
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\build\generated\res\generated\release" />
</dataSet>
<dataSet config="release" >
<source path="C:\Users\Vlad\Documents\AndroidStudioProjects\turbo-editor\libraries\FloatingActionButton\src\release\res" />
</dataSet>
</merger>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.faizmalkani.floatingactionbutton.test" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:functionalTest="false"
android:handleProfiling="false"
android:label="Tests for com.faizmalkani.floatingactionbutton.test"
android:targetPackage="com.faizmalkani.floatingactionbutton.test" />
<application android:allowBackup="true" >
<uses-library android:name="android.test.runner" />
</application>
</manifest>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- From: file:/C:/Users/Vlad/Documents/AndroidStudioProjects/turbo-editor/libraries/FloatingActionButton/build/intermediates/bundles/debug/res/values/values.xml -->
<eat-comment />
<declare-styleable name="FloatingActionButton">
<attr name="drawable" format="integer" />
<attr name="color" format="color" />
<attr name="shadowRadius" format="float" />
<attr name="shadowDx" format="float" />
<attr name="shadowDy" format="float" />
<attr name="shadowColor" format="integer" />
</declare-styleable>
</resources>

View File

@ -0,0 +1,13 @@
int attr color 0x7f010001
int attr drawable 0x7f010000
int attr shadowColor 0x7f010005
int attr shadowDx 0x7f010003
int attr shadowDy 0x7f010004
int attr shadowRadius 0x7f010002
int[] styleable FloatingActionButton { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004, 0x7f010005 }
int styleable FloatingActionButton_color 1
int styleable FloatingActionButton_drawable 0
int styleable FloatingActionButton_shadowColor 5
int styleable FloatingActionButton_shadowDx 3
int styleable FloatingActionButton_shadowDy 4
int styleable FloatingActionButton_shadowRadius 2

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0

View File

@ -0,0 +1,20 @@
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# 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 *;
#}

View File

@ -0,0 +1,16 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-19
android.library=true

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="FloatingActionButton">
<attr name="drawable" format="integer"/>
<attr name="color" format="color"/>
<attr name="shadowRadius" format="float"/>
<attr name="shadowDx" format="float"/>
<attr name="shadowDy" format="float"/>
<attr name="shadowColor" format="integer"/>
</declare-styleable>
</resources>

View File

@ -0,0 +1,50 @@
package com.faizmalkani.floatingactionbutton;
import android.view.View;
import android.widget.AbsListView;
class DirectionScrollListener implements AbsListView.OnScrollListener {
private static final int DIRECTION_CHANGE_THRESHOLD = 1;
private final FloatingActionButton mFloatingActionButton;
private int mPrevPosition;
private int mPrevTop;
private boolean mUpdated;
DirectionScrollListener(FloatingActionButton floatingActionButton) {
mFloatingActionButton = floatingActionButton;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
final View topChild = view.getChildAt(0);
int firstViewTop = 0;
if (topChild != null) {
firstViewTop = topChild.getTop();
}
boolean goingDown;
boolean changed = true;
if (mPrevPosition == firstVisibleItem) {
final int topDelta = mPrevTop - firstViewTop;
goingDown = firstViewTop < mPrevTop;
changed = Math.abs(topDelta) > DIRECTION_CHANGE_THRESHOLD;
} else {
goingDown = firstVisibleItem > mPrevPosition;
}
if (changed && mUpdated) {
if(goingDown)
mFloatingActionButton.hideFab();
else
mFloatingActionButton.showFab();
}
mPrevPosition = firstVisibleItem;
mPrevTop = firstViewTop;
mUpdated = true;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}

Some files were not shown because too many files have changed in this diff Show More