[
  {
    "path": "README.md",
    "content": "# iQuePhoto - Android Image Editor App (Alpha version).\n\n![iQuePhoto](/iQuePhoto.png)\n\n**iQuePhoto** is simple and omnipotent image editor which is based on [MVP] (https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter) architecture pattern with [Dependency Injection] (https://en.wikipedia.org/wiki/Dependency_injection) and uses [Reactive Extensions] (http://reactivex.io/intro.html) for UI events. The Image Editor made on Custom View and it shows how is powerful can be Views on Android.\n\n##  App features\n* `Crop`\n* `Filters`\n* `Adjust`\n* `Stickers`\n* `Overlays`\n* `Frames`\n* `Transform`\n* `Vignette`\n* `Tilt-Shift`\n* `Drawing`\n* `Text`\n\n## Compatibility\n**API Level:** Compatible with Android 5.0 or higher.\n\n## Dependencies\n* [Dagger2](https://github.com/google/dagger) - A fast dependency injector for Android and Java.\n* [Moxy](https://github.com/Arello-Mobile/Moxy) - Moxy is a library that help to use MVP pattern when you do the Android Application. Without problems of lifecycle and boilerplate code!\n* [Butter Knife] (https://github.com/JakeWharton/butterknife) - Bind Android views and callbacks to fields and methods.\n* [Picasso] (https://github.com/square/picasso) - A powerful image downloading and caching library for Android.\n* [RxJava] (https://github.com/ReactiveX/RxJava) & [RxAndroid] (https://github.com/ReactiveX/RxAndroid) - RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences. It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.\n* [Retrolambda] (https://github.com/evant/gradle-retrolambda) - A Gradle plugin for getting Java lambda support in Java 6, 7 and Android.\n* [RxPermissions] (https://github.com/tbruyelle/RxPermissions) - Android runtime permissions powered by RxJava.\n"
  },
  {
    "path": "iQuePhoto/.gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n"
  },
  {
    "path": "iQuePhoto/.idea/compiler.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CompilerConfiguration\">\n    <resourceExtensions />\n    <wildcardResourcePatterns>\n      <entry name=\"!?*.java\" />\n      <entry name=\"!?*.form\" />\n      <entry name=\"!?*.class\" />\n      <entry name=\"!?*.groovy\" />\n      <entry name=\"!?*.scala\" />\n      <entry name=\"!?*.flex\" />\n      <entry name=\"!?*.kt\" />\n      <entry name=\"!?*.clj\" />\n      <entry name=\"!?*.aj\" />\n    </wildcardResourcePatterns>\n    <annotationProcessing>\n      <profile default=\"true\" name=\"Default\" enabled=\"false\">\n        <processorPath useClasspath=\"true\" />\n      </profile>\n    </annotationProcessing>\n  </component>\n</project>"
  },
  {
    "path": "iQuePhoto/.idea/copyright/profiles_settings.xml",
    "content": "<component name=\"CopyrightManager\">\n  <settings default=\"\" />\n</component>"
  },
  {
    "path": "iQuePhoto/.idea/dictionaries/Sergey.xml",
    "content": "<component name=\"ProjectDictionaryState\">\n  <dictionary name=\"Sergey\">\n    <words>\n      <w>emoji</w>\n    </words>\n  </dictionary>\n</component>"
  },
  {
    "path": "iQuePhoto/.idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": "iQuePhoto/.idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"EntryPointsManager\">\n    <entry_points version=\"2.0\" />\n  </component>\n  <component name=\"NullableNotNullManager\">\n    <option name=\"myDefaultNullable\" value=\"android.support.annotation.Nullable\" />\n    <option name=\"myDefaultNotNull\" value=\"android.support.annotation.NonNull\" />\n    <option name=\"myNullables\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.Nullable\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nullable\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.Nullable\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.Nullable\" />\n        </list>\n      </value>\n    </option>\n    <option name=\"myNotNulls\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.NotNull\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nonnull\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.NonNull\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.NonNull\" />\n        </list>\n      </value>\n    </option>\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_8\" default=\"true\" assert-keyword=\"true\" jdk-15=\"true\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": "iQuePhoto/.idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/app/app.iml\" filepath=\"$PROJECT_DIR$/app/app.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/iQuePhoto.iml\" filepath=\"$PROJECT_DIR$/iQuePhoto.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": "iQuePhoto/.idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": "iQuePhoto/.idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$/..\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "iQuePhoto/app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "iQuePhoto/app/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'android-apt'\napply plugin: 'me.tatarka.retrolambda'\n\nandroid {\n    compileSdkVersion 25\n    buildToolsVersion \"25.0.2\"\n\n    defaultConfig {\n        applicationId \"net.iquesoft.iquephoto\"\n        minSdkVersion 21\n        targetSdkVersion 25\n        versionCode 1\n        versionName \"1.0\"\n\n        renderscriptTargetApi 18\n        renderscriptSupportModeEnabled true\n    }\n    lintOptions {\n        abortOnError false\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n    compile fileTree(include: ['*.jar'], dir: 'libs')\n    compile 'com.android.support:appcompat-v7:25.1.1'\n    compile 'com.android.support:support-v4:25.1.1'\n    compile 'com.android.support:recyclerview-v7:25.1.1'\n    compile 'com.android.support:cardview-v7:25.1.1'\n    compile 'com.android.support:design:25.1.1'\n\n    compile 'com.arello-mobile:moxy:1.4.4'\n    compile 'com.arello-mobile:moxy-app-compat:1.4.4'\n    apt 'com.arello-mobile:moxy-compiler:1.4.4'\n\n    compile 'com.jakewharton:butterknife:8.4.0'\n    apt 'com.jakewharton:butterknife-compiler:8.4.0'\n\n    compile 'com.google.dagger:dagger:2.8'\n    apt 'com.google.dagger:dagger-compiler:2.8'\n\n    compile 'com.isseiaoki:simplecropview:1.1.4'\n    compile 'org.adw.library:discrete-seekbar:1.0.1'\n    compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'\n    compile 'com.squareup.picasso:picasso:2.5.2'\n    compile 'io.reactivex:rxjava:1.1.6'\n    compile 'io.reactivex:rxandroid:1.2.1'\n    testCompile 'junit:junit:4.12'\n}"
  },
  {
    "path": "iQuePhoto/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in C:\\Users\\Sergey\\AppData\\Local\\Android\\Sdk/filters/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/filters/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n"
  },
  {
    "path": "iQuePhoto/app/src/androidTest/java/net/iquesoft/iquephoto/ApplicationTest.java",
    "content": "package net.iquesoft.iquephoto;\n\nimport android.app.Application;\nimport android.test.ApplicationTestCase;\n\n/**\n * <a href=\"http://d.android.com/tools/testing/testing_android.html\">Testing Fundamentals</a>\n */\npublic class ApplicationTest extends ApplicationTestCase<Application> {\n    public ApplicationTest() {\n        super(Application.class);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"net.iquesoft.iquephoto\">\n\n    <uses-permission android:name=\"android.permission.CAMERA\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <uses-feature android:name=\"android.hardware.camera\" />\n    <uses-feature android:name=\"android.hardware.camera.flash\" />\n    <uses-feature android:name=\"android.hardware.camera.autofocus\" />\n\n    <application\n        android:name=\".App\"\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme.NoActionBar\">\n        <provider\n            android:name=\"android.support.v4.content.FileProvider\"\n            android:authorities=\"${applicationId}.provider\"\n            android:exported=\"false\"\n            android:grantUriPermissions=\"true\">\n            <meta-data\n                android:name=\"android.support.FILE_PROVIDER_PATHS\"\n                android:resource=\"@xml/provider_paths\" />\n        </provider>\n\n        <activity\n            android:name=\".ui.activities.HomeActivity\"\n            android:screenOrientation=\"portrait\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\".ui.activities.GalleryActivity\"\n            android:screenOrientation=\"portrait\" />\n        <activity\n            android:name=\".ui.activities.EditorActivity\"\n            android:screenOrientation=\"portrait\" />\n        <activity\n            android:name=\".ui.activities.PreviewActivity\"\n            android:screenOrientation=\"portrait\" />\n    </application>\n</manifest>"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/App.java",
    "content": "package net.iquesoft.iquephoto;\n\nimport android.app.Application;\n\nimport net.iquesoft.iquephoto.di.AppComponent;\nimport net.iquesoft.iquephoto.di.DaggerAppComponent;\nimport net.iquesoft.iquephoto.di.modules.AppModule;\n\npublic class App extends Application {\n    private static AppComponent sAppComponent;\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n\n        sAppComponent = DaggerAppComponent.builder()\n                .appModule(new AppModule(this))\n                .build();\n    }\n\n    public static AppComponent getAppComponent() {\n        return sAppComponent;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/AdjustAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v4.content.res.ResourcesCompat;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Button;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Adjust;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class AdjustAdapter extends RecyclerView.Adapter<AdjustAdapter.ViewHolder> {\n    private Context mContext;\n    \n    private List<Adjust> mAdjustList;\n\n    private OnAdjustClickListener mOnAdjustClickListener;\n\n    public interface OnAdjustClickListener {\n        void onAdjustClick(Adjust adjust);\n    }\n\n    public void setOnAdjustClickListener(OnAdjustClickListener onAdjustClickListener) {\n        mOnAdjustClickListener = onAdjustClickListener;\n    }\n\n    public AdjustAdapter(List<Adjust> adjustList) {\n        mAdjustList = adjustList;\n    }\n\n    @Override\n    public AdjustAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_adjust, parent, false);\n\n        return new AdjustAdapter.ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(AdjustAdapter.ViewHolder holder, int position) {\n        final Adjust adjust = mAdjustList.get(position);\n\n        holder.button.setText(mContext.getText(adjust.getTitle()));\n        holder.button.setCompoundDrawablesWithIntrinsicBounds(null,\n                ResourcesCompat.getDrawable(mContext.getResources(), adjust.getIcon(), null),\n                null, null);\n\n        holder.button.setOnClickListener(view -> mOnAdjustClickListener.onAdjustClick(adjust));\n    }\n\n    @Override\n    public int getItemCount() {\n        return mAdjustList.size();\n    }\n\n    class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.button_adjust)\n        Button button;\n\n        ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/ColorAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v4.content.res.ResourcesCompat;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.graphics.ColorCircleDrawable;\nimport net.iquesoft.iquephoto.models.EditorColor;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class ColorAdapter extends RecyclerView.Adapter<ColorAdapter.ViewHolder> {\n    private int mSelectedColorPosition = 0;\n\n    private Context mContext;\n\n    private List<EditorColor> mEditorColorsList;\n\n    private OnColorClickListener mOnColorClickListener;\n\n    public interface OnColorClickListener {\n        void onClick(EditorColor editorColor);\n    }\n\n    public void setOnColorClickListener(OnColorClickListener onColorClickListener) {\n        mOnColorClickListener = onColorClickListener;\n    }\n\n    public ColorAdapter(List<EditorColor> editorColors) {\n        mEditorColorsList = editorColors;\n    }\n\n    @Override\n    public ColorAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_color, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(ColorAdapter.ViewHolder holder, int position) {\n        final EditorColor color = mEditorColorsList.get(position);\n\n        holder.imageView.setImageDrawable(new ColorCircleDrawable(\n                ResourcesCompat.getColor(mContext.getResources(), color.getColor(), null))\n        );\n\n        if (mSelectedColorPosition == holder.getAdapterPosition()) {\n            mOnColorClickListener.onClick(color);\n            ((ColorCircleDrawable) holder.imageView.getDrawable()).setSelected(true);\n        } else {\n            ((ColorCircleDrawable) holder.imageView.getDrawable()).setSelected(false);\n        }\n\n        holder.imageView.setOnClickListener(view -> {\n            notifyItemChanged(mSelectedColorPosition);\n            mSelectedColorPosition = holder.getAdapterPosition();\n            notifyItemChanged(holder.getAdapterPosition());\n\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mEditorColorsList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.image_view_color)\n        ImageView imageView;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/FiltersAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.graphics.ColorMatrixColorFilter;\nimport android.net.Uri;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Filter;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class FiltersAdapter extends RecyclerView.Adapter<FiltersAdapter.ViewHolder> {\n    private int mCurrentPosition = 0;\n\n    private Context mContext;\n\n    private Uri mImageUri;\n    private List<Filter> mFiltersList;\n\n    private OnFilterClickListener mOnFilterClickListener;\n\n    public interface OnFilterClickListener {\n        void onFilterClicked(Filter filter);\n\n        void onIntensityClicked();\n    }\n    \n    public void setFiltersListener(OnFilterClickListener onFilterClickListener) {\n        mOnFilterClickListener = onFilterClickListener;\n    }\n\n    public FiltersAdapter(Uri uri, List<Filter> filters) {\n        mImageUri = uri;\n        mFiltersList = filters;\n    }\n\n    @Override\n    public FiltersAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_filter, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {\n        final Filter filter = mFiltersList.get(position);\n\n        holder.filterTitle.setText(filter.getTitle());\n\n        Picasso.with(mContext)\n                .load(mImageUri)\n                .fit()\n                .centerCrop()\n                .noPlaceholder()\n                .into(holder.filterImageView);\n\n        holder.filterImageView.setColorFilter(new ColorMatrixColorFilter(filter.getColorMatrix()));\n\n        if (mCurrentPosition == position) {\n            mOnFilterClickListener.onFilterClicked(filter);\n            holder.filterChecked.setVisibility(View.VISIBLE);\n        } else\n            holder.filterChecked.setVisibility(View.GONE);\n\n        holder.filterImageView.setOnClickListener(view -> {\n            notifyItemChanged(mCurrentPosition);\n            if (mCurrentPosition != position) {\n                mCurrentPosition = position;\n                notifyItemChanged(position);\n            } else {\n                mOnFilterClickListener.onIntensityClicked();\n            }\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mFiltersList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.text_view_filter_title)\n        TextView filterTitle;\n\n        @BindView(R.id.image_view_filter)\n        ImageView filterImageView;\n\n        @BindView(R.id.image_view_filter_checked)\n        ImageView filterChecked;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/FontsAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.graphics.Typeface;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Font;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\n// TODO: Add default font and select it.\npublic class FontsAdapter extends RecyclerView.Adapter<FontsAdapter.ViewHolder> {\n\n    private int mSelectedFontPosition = 0;\n\n    private Context mContext;\n\n    // TODO: Show fonts with user text.\n    private String mText = null;\n\n    private List<Font> mFontsList;\n\n    private OnFontClickListener mOnFontClickListener;\n\n    public interface OnFontClickListener {\n        void onClick(Font font);\n    }\n\n    public void setOnFontClickListener(OnFontClickListener onFontClickListener) {\n        mOnFontClickListener = onFontClickListener;\n    }\n\n    public FontsAdapter(List<Font> fonts) {\n        mFontsList = fonts;\n    }\n\n    @Override\n    public FontsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_font, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(FontsAdapter.ViewHolder holder, int position) {\n        final Font font = mFontsList.get(position);\n\n        holder.fontFamilyTextView.setText(font.getTitle());\n\n        holder.fontPreviewTextView.setTypeface(getTypeface(font.getPath()));\n\n        holder.itemView.setOnClickListener(view -> {\n            notifyItemChanged(mSelectedFontPosition);\n            mSelectedFontPosition = position;\n            notifyItemChanged(position);\n        });\n\n        /*if (mSelectedFontPosition == position) {\n            mOnFontClickListener.onFilterClicked(font);\n            holder.fontSelectedImageView.setVisibility(View.VISIBLE);\n        } else {\n            holder.fontSelectedImageView.setVisibility(View.GONE);\n        }*/\n\n    }\n\n    @Override\n    public int getItemCount() {\n        return mFontsList.size();\n    }\n\n    private Typeface getTypeface(String path) {\n        return Typeface.createFromAsset(mContext.getAssets(), path);\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.fontPreviewTextView)\n        TextView fontPreviewTextView;\n\n        @BindView(R.id.fontFamilyTextView)\n        TextView fontFamilyTextView;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/FramesAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Frame;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class FramesAdapter extends RecyclerView.Adapter<FramesAdapter.ViewHolder> {\n    private int mCurrentPosition = 0;\n\n    private Context mContext;\n\n    private List<Frame> mFramesList;\n\n    private OnFrameClickListener mOnFrameClickListener;\n\n    public interface OnFrameClickListener {\n        void onClick(Frame frame);\n    }\n\n    public void setFramesListener(OnFrameClickListener onFrameClickListener) {\n        mOnFrameClickListener = onFrameClickListener;\n    }\n\n    public FramesAdapter(List<Frame> framesList) {\n        mFramesList = framesList;\n    }\n\n    @Override\n    public FramesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_frame, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(FramesAdapter.ViewHolder holder, int position) {\n        Frame frame = mFramesList.get(position);\n\n        holder.title.setText(frame.getTitle());\n\n        Picasso.with(mContext)\n                .load(frame.getImage())\n                .into(holder.image);\n        \n        if (mCurrentPosition == position) {\n            if (mOnFrameClickListener != null)\n                mOnFrameClickListener.onClick(frame);\n            holder.frameSelected.setVisibility(View.VISIBLE);\n        } else\n            holder.frameSelected.setVisibility(View.GONE);\n\n\n        holder.image.setOnClickListener(view -> {\n            notifyItemChanged(mCurrentPosition);\n            mCurrentPosition = position;\n            notifyItemChanged(position);\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mFramesList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.frameTitle)\n        TextView title;\n\n        @BindView(R.id.frameImage)\n        ImageView image;\n\n        @BindView(R.id.frameChecked)\n        ImageView frameSelected;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}\n\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/ImageAlbumsAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.ProgressBar;\nimport android.widget.TextView;\n\nimport com.squareup.picasso.Callback;\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.ImageAlbum;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class ImageAlbumsAdapter extends RecyclerView.Adapter<ImageAlbumsAdapter.ViewHolder> {\n    private Context mContext;\n\n    private List<ImageAlbum> mImageAlbums;\n\n    private OnAlbumClickListener mOnAlbumClickListener;\n\n    public void setOnAlbumClickListener(OnAlbumClickListener onAlbumClickListener) {\n        mOnAlbumClickListener = onAlbumClickListener;\n    }\n\n    public interface OnAlbumClickListener {\n        void onAlbumClick(ImageAlbum imageAlbum);\n    }\n\n    public ImageAlbumsAdapter(List<ImageAlbum> imageAlbums) {\n        mImageAlbums = imageAlbums;\n    }\n\n    @Override\n    public ImageAlbumsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_image_album, parent, false);\n\n        return new ImageAlbumsAdapter.ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(ImageAlbumsAdapter.ViewHolder holder, int position) {\n        ImageAlbum imageAlbum = mImageAlbums.get(position);\n\n        Picasso.with(mContext)\n                .load(\"file://\" + imageAlbum.getImages().get(0).getPath())\n                .resize(250, 250)\n                .centerCrop()\n                .into(holder.folderImage, new Callback() {\n                    @Override\n                    public void onSuccess() {\n                        holder.progressBar.setVisibility(View.GONE);\n                    }\n\n                    @Override\n                    public void onError() {\n\n                    }\n                });\n\n        holder.title.setText(\n                imageAlbum.getName() + \" (\" + String.valueOf(imageAlbum.getImages().size()) + \")\"\n        );\n\n        holder.itemView.setOnClickListener(view -> {\n            mOnAlbumClickListener.onAlbumClick(imageAlbum);\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mImageAlbums.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.text_view_album_title)\n        TextView title;\n\n        @BindView(R.id.image_view_album_image)\n        ImageView folderImage;\n\n        @BindView(R.id.progress_bar_gallery_album)\n        ProgressBar progressBar;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/ImagesAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.ProgressBar;\n\nimport com.squareup.picasso.Callback;\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Image;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class ImagesAdapter extends RecyclerView.Adapter<ImagesAdapter.ViewHolder> {\n    private Context mContext;\n\n    private List<Image> mImageList;\n\n    private OnImageClickListener mListener;\n\n    public void setOnImageClickListener(OnImageClickListener listener) {\n        mListener = listener;\n    }\n\n    public interface OnImageClickListener {\n        void onClick(Image image);\n    }\n\n    public ImagesAdapter(List<Image> imageList) {\n        mImageList = imageList;\n    }\n\n    @Override\n    public ImagesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        LayoutInflater inflater = LayoutInflater.from(mContext);\n\n        View view = inflater.inflate(R.layout.item_image, parent, false);\n\n        return new ImagesAdapter.ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(ImagesAdapter.ViewHolder holder, int position) {\n        Image image = mImageList.get(position);\n\n        Picasso.with(mContext)\n                .load(\"file://\" + image.getPath())\n                .resize(250, 250)\n                .centerCrop()\n                .into(holder.image, new Callback() {\n                    @Override\n                    public void onSuccess() {\n                        holder.progressBar.setVisibility(View.GONE);\n                    }\n\n                    @Override\n                    public void onError() {\n\n                    }\n                });\n\n        holder.image.setOnClickListener(v -> mListener.onClick(image));\n    }\n\n    @Override\n    public int getItemCount() {\n        return mImageList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.image_view_gallery_image)\n        ImageView image;\n\n        @BindView(R.id.progress_bar_gallery_image)\n        ProgressBar progressBar;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/OverlaysAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Overlay;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class OverlaysAdapter extends RecyclerView.Adapter<OverlaysAdapter.ViewHolder> {\n    private int mCurrentPosition = 0;\n\n    private Context mContext;\n\n    private List<Overlay> mOverlayList;\n\n    private OnOverlayClickListener mOnOverlayClickListener;\n\n    public interface OnOverlayClickListener {\n        void onClick(Overlay overlay);\n    }\n\n    public void setOnOverlayClickListener(OnOverlayClickListener onOverlayClickListener) {\n        mOnOverlayClickListener = onOverlayClickListener;\n    }\n\n    public OverlaysAdapter(List<Overlay> overlayList) {\n        mOverlayList = overlayList;\n    }\n\n    @Override\n    public OverlaysAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_overlay, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(OverlaysAdapter.ViewHolder holder, int position) {\n        final Overlay overlay = mOverlayList.get(position);\n\n        holder.title.setText(overlay.getTitle());\n\n        Picasso.with(mContext)\n                .load(overlay.getImage())\n                .fit()\n                .centerCrop()\n                .noPlaceholder()\n                .into(holder.image);\n\n        if (mCurrentPosition == position) {\n            mOnOverlayClickListener.onClick(overlay);\n            holder.overlaySelected.setVisibility(View.VISIBLE);\n        } else\n            holder.overlaySelected.setVisibility(View.GONE);\n\n        holder.image.setOnClickListener(view -> {\n            notifyItemChanged(mCurrentPosition);\n            mCurrentPosition = position;\n            notifyItemChanged(position);\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mOverlayList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.text_view_overlay_title)\n        TextView title;\n\n        @BindView(R.id.image_view_overlay)\n        ImageView image;\n\n        @BindView(R.id.image_view_overlay_checked)\n        ImageView overlaySelected;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/SizesAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.graphics.CircleSizeDrawable;\nimport net.iquesoft.iquephoto.models.BrushSize;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class SizesAdapter extends RecyclerView.Adapter<SizesAdapter.ViewHolder> {\n    private int mSelectedColorPosition = 0;\n\n    private List<BrushSize> mSizes;\n\n    private OnSizeClickListener mOnSizeClickListener;\n\n    public interface OnSizeClickListener {\n        void onClick(BrushSize size);\n    }\n\n    public void setOnSizeClickListener(OnSizeClickListener onSizeClickListener) {\n        mOnSizeClickListener = onSizeClickListener;\n    }\n\n    public SizesAdapter(List<BrushSize> sizes) {\n        mSizes = sizes;\n        mSelectedColorPosition = sizes.size() / 2;\n    }\n\n    @Override\n    public SizesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        Context context = parent.getContext();\n\n        View view = LayoutInflater.from(context).inflate(R.layout.item_brush_size, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(SizesAdapter.ViewHolder holder, int position) {\n        final BrushSize size = mSizes.get(position);\n\n        holder.sizeImageView.setImageDrawable(new CircleSizeDrawable(size.getSize()));\n\n        if (mSelectedColorPosition == holder.getAdapterPosition()) {\n            mOnSizeClickListener.onClick(size);\n            ((CircleSizeDrawable) holder.sizeImageView.getDrawable()).setSelected(true);\n        } else {\n            ((CircleSizeDrawable) holder.sizeImageView.getDrawable()).setSelected(false);\n        }\n\n        holder.sizeImageView.setOnClickListener(view -> {\n            notifyItemChanged(mSelectedColorPosition);\n            mSelectedColorPosition = holder.getAdapterPosition();\n            notifyItemChanged(holder.getAdapterPosition());\n        });\n    }\n\n    @Override\n    public int getItemCount() {\n        return mSizes.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.sizeImageView)\n        ImageView sizeImageView;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/StickerSetAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\nimport android.widget.TextView;\n\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.StickersSet;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class StickerSetAdapter extends RecyclerView.Adapter<StickerSetAdapter.ViewHolder> {\n    private Context mContext;\n\n    private List<StickersSet> mStickersSets;\n\n    private OnStickerSetClickListener mOnStickersSetClickListener;\n\n    public interface OnStickerSetClickListener {\n        void onClick(StickersSet stickersSet);\n    }\n\n    public void setStickerSetClickListener(OnStickerSetClickListener onStickerSetClickListener) {\n        mOnStickersSetClickListener = onStickerSetClickListener;\n    }\n\n    public StickerSetAdapter(List<StickersSet> stickersSets) {\n        mStickersSets = stickersSets;\n    }\n\n    @Override\n    public StickerSetAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_sticker_set, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(StickerSetAdapter.ViewHolder holder, int position) {\n        final StickersSet stickersSet = mStickersSets.get(position);\n\n        holder.title.setText(stickersSet.getTitle());\n\n        Picasso.with(mContext)\n                .load(stickersSet.getIcon())\n                .fit()\n                .centerCrop()\n                .noPlaceholder()\n                .into(holder.image);\n\n        holder.itemView.setOnClickListener(view -> mOnStickersSetClickListener.onClick(stickersSet));\n    }\n    \n    @Override\n    public int getItemCount() {\n        return mStickersSets.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.text_view_stickers_sets_title)\n        TextView title;\n\n        @BindView(R.id.image_view_stickers_sets_image)\n        ImageView image;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/StickersAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.ImageView;\n\nimport com.squareup.picasso.Picasso;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Sticker;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class StickersAdapter extends RecyclerView.Adapter<StickersAdapter.ViewHolder> {\n    private Context mContext;\n\n    private List<Sticker> mStickersList;\n\n    private OnStickerClickListener mOnStickerClickListener;\n\n    public interface OnStickerClickListener {\n        void onClick(Sticker sticker);\n    }\n\n    public void setOnStickerClickListener(OnStickerClickListener onStickerClickListener) {\n        mOnStickerClickListener = onStickerClickListener;\n    }\n\n    public StickersAdapter(List<Sticker> stickers) {\n        mStickersList = stickers;\n    }\n\n    @Override\n    public StickersAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        View view = LayoutInflater.from(mContext).inflate(R.layout.item_sticker, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(StickersAdapter.ViewHolder holder, int position) {\n        final Sticker sticker = mStickersList.get(position);\n\n        Picasso.with(mContext)\n                .load(sticker.getImage())\n                .fit()\n                .centerCrop()\n                .noPlaceholder()\n                .into(holder.sticker);\n\n        holder.sticker.setOnClickListener(view -> mOnStickerClickListener.onClick(sticker));\n    }\n\n    @Override\n    public int getItemCount() {\n        return mStickersList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.image_view_sticker)\n        ImageView sticker;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/adapters/ToolsAdapter.java",
    "content": "package net.iquesoft.iquephoto.adapters;\n\nimport android.content.Context;\nimport android.support.v4.content.res.ResourcesCompat;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Button;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.Tool;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class ToolsAdapter extends RecyclerView.Adapter<ToolsAdapter.ViewHolder> {\n    private Context mContext;\n\n    private List<Tool> mToolsList;\n\n    private OnToolsClickListener mOnToolsClickListener;\n\n    public interface OnToolsClickListener {\n        void onClick(Tool tool);\n    }\n\n    public void setOnToolsClickListener(OnToolsClickListener onToolsClickListener) {\n        mOnToolsClickListener = onToolsClickListener;\n    }\n\n    public ToolsAdapter(List<Tool> tools) {\n        mToolsList = tools;\n    }\n\n    @Override\n    public ToolsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {\n        mContext = parent.getContext();\n\n        LayoutInflater inflater = LayoutInflater.from(mContext);\n\n        View view = inflater.inflate(R.layout.item_tool, parent, false);\n\n        return new ViewHolder(view);\n    }\n\n    @Override\n    public void onBindViewHolder(ToolsAdapter.ViewHolder holder, int position) {\n        final Tool tool = mToolsList.get(position);\n\n        holder.button.setText(mContext.getResources().getString(tool.getTitle()));\n\n        holder.button.setCompoundDrawablesWithIntrinsicBounds(null,\n                ResourcesCompat.getDrawable(mContext.getResources(), tool.getIcon(), null),\n                null, null);\n\n        holder.button.setOnClickListener(view -> mOnToolsClickListener.onClick(tool));\n    }\n    \n    @Override\n    public int getItemCount() {\n        return mToolsList.size();\n    }\n\n    public class ViewHolder extends RecyclerView.ViewHolder {\n        @BindView(R.id.button_tool)\n        Button button;\n\n        public ViewHolder(View itemView) {\n            super(itemView);\n\n            ButterKnife.bind(this, itemView);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/EditorListener.java",
    "content": "package net.iquesoft.iquephoto.core;\n\nimport android.graphics.Paint;\nimport android.net.Uri;\n\npublic interface EditorListener {\n    void onTransparencyHandleButtonClicked(Paint paint);\n\n    void hasChanges(int count);\n\n    void onAppliedImageSaved(Uri uri);\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/EditorView.java",
    "content": "package net.iquesoft.iquephoto.core;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.RectF;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.core.model.Drawing;\nimport net.iquesoft.iquephoto.core.model.EditorLinearTiltShift;\nimport net.iquesoft.iquephoto.core.model.EditorSticker;\nimport net.iquesoft.iquephoto.core.model.EditorText;\nimport net.iquesoft.iquephoto.core.model.EditorRadialTiltShift;\nimport net.iquesoft.iquephoto.core.model.EditorVignette;\n\nimport java.util.List;\n\ninterface EditorView extends MvpView {\n    void setupImage(Bitmap bitmap, Matrix imageMatrix, RectF imageRect);\n\n    void showOriginalImage(boolean display);\n\n    void onToolChanged(EditorTool tool);\n\n    void onImageAdjusted(Paint paint);\n\n    void onOverlayChanged(Bitmap bitmap, Matrix matrix, Paint paint);\n\n    void onFilterChanged(Paint paint);\n\n    void onFrameChanged(Bitmap bitmap, Matrix matrix);\n\n    void onTextAdded(List<EditorText> texts);\n\n    void onStickerAdded(List<EditorSticker> stickers);\n\n    void onVignetteUpdated(EditorVignette vignette);\n\n    void onRadialTiltShiftUpdated(EditorRadialTiltShift radialTiltShift);\n\n    void onLinearTiltShiftUpdated(EditorLinearTiltShift linearTiltShift);\n\n    void onStraightenTransformChanged(Matrix transformMatrix);\n\n    void updateDrawing(Paint paint, Path path);\n\n    void updateDrawing(List<Drawing> drawings);\n\n    void updateView();\n\n    void onApplyChanges();\n\n    void enableDrawingCache();\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/ImageEditorView.java",
    "content": "package net.iquesoft.iquephoto.core;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.ColorMatrix;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.RectF;\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.IntRange;\nimport android.support.annotation.NonNull;\nimport android.util.AttributeSet;\nimport android.util.Log;\nimport android.view.MotionEvent;\nimport android.view.View;\n\nimport com.arellomobile.mvp.MvpDelegate;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.core.model.Drawing;\nimport net.iquesoft.iquephoto.core.model.EditorLinearTiltShift;\nimport net.iquesoft.iquephoto.core.model.EditorSticker;\nimport net.iquesoft.iquephoto.core.model.EditorText;\nimport net.iquesoft.iquephoto.core.model.EditorRadialTiltShift;\nimport net.iquesoft.iquephoto.core.model.EditorVignette;\nimport net.iquesoft.iquephoto.models.Text;\n\nimport java.util.List;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.NONE;\n\npublic class ImageEditorView extends View implements EditorView {\n    private final static String TAG = ImageEditorView.class.getSimpleName();\n\n    @InjectPresenter\n    ImageEditorViewPresenter mPresenter;\n\n    @ProvidePresenter\n    ImageEditorViewPresenter provideImageEditorViewPresenter() {\n        return new ImageEditorViewPresenter(getContext());\n    }\n\n    private MvpDelegate mParentDelegate;\n    private MvpDelegate<ImageEditorView> mMvpDelegate;\n\n    private boolean mIsOriginalImageDisplayed;\n\n    private Bitmap mImageBitmap;\n    private Bitmap mSupportBitmap;\n    private Bitmap mAlteredImageBitmap;\n\n    private EditorTool mCurrentTool = NONE;\n\n    private Matrix mImageMatrix;\n    private Matrix mSupportMatrix;\n    private Matrix mTransformMatrix = new Matrix();\n\n    private RectF mImageRect;\n\n    private Path mDrawingPath;\n\n    private Paint mBitmapPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n    private Paint mFilterPaint;\n    private Paint mOverlayPaint;\n    private Paint mAdjustPaint;\n    private Paint mDrawingPaint;\n\n    private EditorVignette mVignette;\n    private EditorRadialTiltShift mRadialTiltShift;\n    private EditorLinearTiltShift mLinearTiltShift;\n\n    private List<Drawing> mDrawings;\n    private List<EditorText> mTexts;\n    private List<EditorSticker> mStickers;\n\n    public ImageEditorView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public void setMvpDelegate(MvpDelegate patentDelegate) {\n        mParentDelegate = patentDelegate;\n\n        getMvpDelegate().onCreate();\n        getMvpDelegate().onAttach();\n\n        Log.i(TAG, \"setMvpDelegate(...)\");\n    }\n\n    @Override\n    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {\n        super.onLayout(changed, left, top, right, bottom);\n        Log.i(TAG, \"onLayout(...)\");\n        mPresenter.setupBitmapOnView(getAlteredImageBitmap(), getWidth(), getHeight());\n    }\n\n    @Override\n    protected void onDraw(Canvas canvas) {\n        super.onDraw(canvas);\n        Log.i(TAG, \"onDraw(...)\");\n\n        final Bitmap bitmap = getAlteredImageBitmap();\n\n        if (mImageRect != null && bitmap != null) {\n            canvas.clipRect(mImageRect);\n\n            canvas.drawBitmap(bitmap, mImageMatrix, mBitmapPaint);\n\n            switch (mCurrentTool) {\n                case NONE:\n                    if (mIsOriginalImageDisplayed) {\n                        canvas.drawBitmap(mImageBitmap, mImageMatrix, mBitmapPaint);\n                    } else {\n                        canvas.drawBitmap(bitmap, mImageMatrix, mBitmapPaint);\n                    }\n                    break;\n                case FILTERS:\n                    canvas.drawBitmap(bitmap, mImageMatrix, mFilterPaint);\n                    break;\n                case OVERLAY:\n                    canvas.drawBitmap(mSupportBitmap, mSupportMatrix, mOverlayPaint);\n                    break;\n                case FRAMES:\n                    canvas.drawBitmap(mSupportBitmap, mSupportMatrix, mBitmapPaint);\n                    break;\n                case DRAWING:\n                    drawing(canvas);\n                    break;\n                case STICKERS:\n                    drawStickers(canvas);\n                    break;\n                case TEXT:\n                    drawTexts(canvas);\n                    break;\n                case VIGNETTE:\n                    mVignette.draw(canvas);\n                    break;\n                case TRANSFORM_STRAIGHTEN:\n                    canvas.drawBitmap(bitmap, mTransformMatrix, mBitmapPaint);\n                    break;\n                case RADIAL_TILT_SHIFT:\n                    mRadialTiltShift.draw(canvas, bitmap, mImageMatrix, mBitmapPaint);\n                    break;\n                case LINEAR_TILT_SHIFT:\n                    mLinearTiltShift.draw(canvas, bitmap, mImageMatrix, mBitmapPaint);\n                    break;\n                default:\n                    canvas.drawBitmap(bitmap, mImageMatrix, mAdjustPaint);\n                    break;\n            }\n        }\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent event) {\n        mPresenter.viewTouched(event);\n\n        return true;\n    }\n\n    @Override\n    protected void onDetachedFromWindow() {\n        super.onDetachedFromWindow();\n\n        getMvpDelegate().onSaveInstanceState();\n        getMvpDelegate().onDetach();\n    }\n\n    public MvpDelegate<ImageEditorView> getMvpDelegate() {\n        if (mMvpDelegate != null) {\n            return mMvpDelegate;\n        }\n\n        mMvpDelegate = new MvpDelegate<>(this);\n        mMvpDelegate.setParentDelegate(mParentDelegate, String.valueOf(getId()));\n\n        return mMvpDelegate;\n    }\n\n    public void setImageBitmap(@NonNull Bitmap bitmap) {\n        Log.i(TAG, \"setImageBitmap(...)\");\n        mImageBitmap = bitmap;\n    }\n\n    public Bitmap getAlteredImageBitmap() {\n        if (mAlteredImageBitmap != null) {\n            return mAlteredImageBitmap;\n        }\n\n        return mImageBitmap;\n    }\n\n    public void undo() {\n        mPresenter.undo();\n    }\n\n    public void changeTool(EditorTool tool) {\n        mPresenter.changeTool(tool);\n    }\n\n    public void applyChanges() {\n        mPresenter.applyChanges();\n    }\n\n    public void setUndoListener(EditorListener editorListener) {\n        mPresenter.setEditorListener(editorListener);\n    }\n\n    public void addText(Text text) {\n        mPresenter.addText(text);\n    }\n\n    public void addSticker(Bitmap bitmap) {\n        mPresenter.addSticker(bitmap);\n    }\n\n    public void setFilter(ColorMatrix colorMatrix) {\n        mPresenter.setFilter(colorMatrix);\n    }\n\n    public void setFrame(@NonNull Bitmap bitmap) {\n        mPresenter.setFrame(bitmap);\n    }\n\n    public void setOverlay(@NonNull Bitmap bitmap) {\n        mPresenter.setOverlay(bitmap);\n    }\n\n    public void setFilterIntensity(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeFilterIntensity(value);\n    }\n\n    public void setVignetteIntensity(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeVignetteMask(value);\n    }\n\n    public void setOverlayIntensity(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeOverlayIntensity(value);\n    }\n\n    public void setBrightnessValue(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeBrightness(value);\n    }\n\n    public void setContrastValue(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeContrast(value);\n    }\n\n    public void setSaturationValue(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeSaturation(value);\n    }\n\n    public void setWarmthValue(@IntRange(from = -100, to = 100) int value) {\n        mPresenter.changeWarmth(value);\n    }\n\n    public void setStraightenTransformValue(@IntRange(from = -30, to = 30) int value) {\n        mPresenter.changeStraightenTransform(value);\n    }\n\n    public void setBrushColor(@ColorInt int color) {\n        mPresenter.changeBrushColor(color);\n    }\n\n    public void setBrushSize(float size) {\n        mPresenter.changeBrushSize(size);\n    }\n\n    private void drawTexts(Canvas canvas) {\n        if (mTexts != null) {\n            for (EditorText text : mTexts) {\n                text.draw(canvas);\n            }\n        }\n    }\n\n    private void drawStickers(Canvas canvas) {\n        if (mStickers != null) {\n            for (EditorSticker sticker : mStickers) {\n                sticker.draw(canvas);\n            }\n        }\n    }\n\n    private void drawing(Canvas canvas) {\n        if (mDrawings != null) {\n            if (!mDrawings.isEmpty()) {\n                for (Drawing drawing : mDrawings) {\n                    canvas.drawPath(drawing.getPath(), drawing.getPaint());\n                }\n            }\n        }\n        if (mDrawingPath != null) {\n            if (!mDrawingPath.isEmpty()) {\n                canvas.drawPath(mDrawingPath, mDrawingPaint);\n            }\n        }\n    }\n\n    @Override\n    public void setupImage(Bitmap bitmap, Matrix imageMatrix, RectF imageRect) {\n        if (mImageBitmap == null) {\n            mImageBitmap = bitmap;\n        } else {\n            mAlteredImageBitmap = bitmap;\n        }\n\n        mImageMatrix = imageMatrix;\n        mImageRect = imageRect;\n\n        invalidate();\n    }\n\n    @Override\n    public void showOriginalImage(boolean display) {\n        mIsOriginalImageDisplayed = display;\n\n        invalidate();\n    }\n\n    @Override\n    public void onToolChanged(EditorTool tool) {\n        mCurrentTool = tool;\n\n        invalidate();\n    }\n\n    @Override\n    public void onImageAdjusted(Paint paint) {\n        if (mAdjustPaint == null) {\n            mAdjustPaint = paint;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onOverlayChanged(Bitmap bitmap, Matrix matrix, Paint paint) {\n        mSupportBitmap = bitmap;\n        mSupportMatrix = matrix;\n        mOverlayPaint = paint;\n\n        invalidate();\n    }\n\n    @Override\n    public void onFilterChanged(Paint paint) {\n        if (mFilterPaint == null) {\n            mFilterPaint = paint;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onFrameChanged(Bitmap bitmap, Matrix matrix) {\n        mSupportBitmap = bitmap;\n        mSupportMatrix = matrix;\n\n        invalidate();\n    }\n\n    @Override\n    public void onTextAdded(List<EditorText> texts) {\n        if (mTexts == null) {\n            mTexts = texts;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onStickerAdded(List<EditorSticker> stickers) {\n        if (mStickers == null) {\n            mStickers = stickers;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onVignetteUpdated(EditorVignette vignette) {\n        if (mVignette == null) {\n            mVignette = vignette;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onRadialTiltShiftUpdated(EditorRadialTiltShift radialTiltShift) {\n        if (mRadialTiltShift == null) {\n            mRadialTiltShift = radialTiltShift;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onLinearTiltShiftUpdated(EditorLinearTiltShift linearTiltShift) {\n        if (mLinearTiltShift == null) {\n            mLinearTiltShift = linearTiltShift;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void onStraightenTransformChanged(Matrix transformMatrix) {\n        if (mTransformMatrix == null) {\n            mTransformMatrix = transformMatrix;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void updateDrawing(Paint paint, Path path) {\n        if (mDrawingPaint == null && mDrawingPath == null) {\n            mDrawingPaint = paint;\n            mDrawingPath = path;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void updateDrawing(List<Drawing> drawings) {\n        if (mDrawings == null) {\n            mDrawings = drawings;\n        }\n\n        invalidate();\n    }\n\n    @Override\n    public void updateView() {\n        invalidate();\n    }\n\n    @Override\n    public void onApplyChanges() {\n        invalidate();\n\n        setDrawingCacheEnabled(true);\n        mPresenter.applyChanges(getDrawingCache());\n    }\n\n    @Override\n    public void enableDrawingCache() {\n        setDrawingCacheEnabled(false);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/ImageEditorViewPresenter.java",
    "content": "package net.iquesoft.iquephoto.core;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.graphics.ColorMatrix;\nimport android.graphics.ColorMatrixColorFilter;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.graphics.RectF;\nimport android.net.Uri;\nimport android.support.annotation.NonNull;\nimport android.support.v8.renderscript.Allocation;\nimport android.support.v8.renderscript.Element;\nimport android.support.v8.renderscript.RenderScript;\nimport android.support.v8.renderscript.ScriptIntrinsicBlur;\nimport android.util.Log;\nimport android.view.MotionEvent;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.core.enums.EditorMode;\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.core.model.Drawing;\nimport net.iquesoft.iquephoto.core.model.EditorImage;\nimport net.iquesoft.iquephoto.core.model.EditorLinearTiltShift;\nimport net.iquesoft.iquephoto.core.model.EditorRadialTiltShift;\nimport net.iquesoft.iquephoto.core.model.EditorSticker;\nimport net.iquesoft.iquephoto.core.model.EditorText;\nimport net.iquesoft.iquephoto.core.model.EditorVignette;\nimport net.iquesoft.iquephoto.models.Text;\nimport net.iquesoft.iquephoto.tasks.ImageCacheSaveTask;\nimport net.iquesoft.iquephoto.utils.LogHelper;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport rx.Observable;\nimport rx.subjects.PublishSubject;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.NONE;\n\n@InjectViewState\npublic class ImageEditorViewPresenter extends MvpPresenter<EditorView> {\n    private float mLastX;\n    private float mLastY;\n\n    private int mViewWidth;\n    private int mViewHeight;\n\n    private Context mContext;\n\n    private EditorText mTouchedText;\n    private EditorSticker mTouchedSticker;\n\n    private EditorTool mCurrentTool = NONE;\n    private EditorMode mCurrentMode = EditorMode.NONE;\n\n    private EditorVignette mVignette;\n    private EditorRadialTiltShift mRadialTiltShift;\n    private EditorLinearTiltShift mLinearTiltShift;\n    private EditorListener mEditorListener;\n\n    private Bitmap mImageBitmap;\n    private Bitmap mSupportBitmap;\n    private Bitmap mBlurredBitmap;\n\n    private Paint mDrawingPaint = new Paint();\n    private Paint mBitmapPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n    private Paint mFilterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n    private Paint mAdjustPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n    private Paint mOverlayPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n\n    private Path mDrawingPath = new Path();\n\n    private RectF mImageRect;\n\n    private Matrix mImageMatrix = new Matrix();\n    private Matrix mSupportMatrix = new Matrix();\n    private Matrix mTransformMatrix = new Matrix();\n\n    private ColorMatrix mColorMatrix = new ColorMatrix();\n\n    private List<EditorText> mTexts = new ArrayList<>();\n    private List<EditorSticker> mStickers = new ArrayList<>();\n    private List<Drawing> mDrawings = new ArrayList<>();\n    private List<EditorImage> mImages = new ArrayList<>();\n\n    private PublishSubject<MotionEvent> mTouchSubject = PublishSubject.create();\n\n    ImageEditorViewPresenter(@NonNull Context context) {\n        mOverlayPaint.setAlpha(150);\n        initDrawingPaint();\n\n        mContext = context;\n\n        initializeMotionEventObservables();\n    }\n\n    private void initDrawingPaint() {\n        mDrawingPaint.setStyle(Paint.Style.STROKE);\n        mDrawingPaint.setColor(Color.BLUE);\n        mDrawingPaint.setStrokeCap(Paint.Cap.ROUND);\n        mDrawingPaint.setStrokeJoin(Paint.Join.ROUND);\n        mDrawingPaint.setStrokeWidth(Drawing.DEFAULT_STROKE_WIDTH);\n    }\n\n    private void initializeMotionEventObservables() {\n        Observable<MotionEvent> touchObservable = mTouchSubject.asObservable();\n        Observable<MotionEvent> actionDownObservable =\n                touchObservable.filter(event ->\n                        event.getActionMasked() == MotionEvent.ACTION_DOWN);\n        Observable<MotionEvent> actionPointerDownObservable =\n                touchObservable.filter(event ->\n                        event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN);\n        Observable<MotionEvent> actionMoveObservable =\n                touchObservable.filter(event ->\n                        event.getActionMasked() == MotionEvent.ACTION_MOVE);\n        Observable<MotionEvent> actionUpObservable =\n                touchObservable.filter(event ->\n                        event.getActionMasked() == MotionEvent.ACTION_UP);\n        Observable<MotionEvent> actionPointerUpObservable =\n                touchObservable.filter(event ->\n                        event.getActionMasked() == MotionEvent.ACTION_POINTER_UP);\n        actionDownObservable.subscribe(event -> {\n            actionDown(event);\n            actionMoveObservable.\n                    takeUntil(actionUpObservable\n                            .doOnNext(upEvent ->\n                                    actionUp()\n                            ))\n                    .subscribe(this::actionMove);\n        });\n        actionPointerDownObservable.subscribe(event -> {\n                    actionPointerDown(event);\n                    actionMoveObservable.takeUntil(\n                            actionPointerUpObservable.doOnNext(pointerUpEvent ->\n                                    actionPointerUp()\n                            ))\n                            .subscribe(this::actionMove);\n                }\n        );\n    }\n\n    private void actionDown(MotionEvent event) {\n        Log.i(\"Observable\", \"Action: Down.\");\n        switch (mCurrentTool) {\n            case NONE:\n                // FIXME: setupImageOnView(...)\n                getViewState().showOriginalImage(true);\n                break;\n            case DRAWING:\n                brushActionDown(event);\n                break;\n            case TEXT:\n                textActionDown(event);\n                break;\n            case STICKERS:\n                stickerActionDown(event);\n                break;\n            case VIGNETTE:\n                mVignette.actionDown(event);\n                getViewState().onVignetteUpdated(mVignette);\n                break;\n            case RADIAL_TILT_SHIFT:\n                mRadialTiltShift.actionDown(event);\n                getViewState().onRadialTiltShiftUpdated(mRadialTiltShift);\n                break;\n        }\n    }\n\n    private void actionPointerDown(MotionEvent event) {\n        Log.i(\"Observable\", \"Action: Pointer Down.\");\n        switch (mCurrentTool) {\n            case NONE:\n                break;\n            case VIGNETTE:\n                mVignette.actionPointerDown(event);\n                getViewState().onVignetteUpdated(mVignette);\n                break;\n            case RADIAL_TILT_SHIFT:\n                mRadialTiltShift.actionPointerDown(event);\n                getViewState().onRadialTiltShiftUpdated(mRadialTiltShift);\n                break;\n            case LINEAR_TILT_SHIFT:\n                mLinearTiltShift.actionPointerDown(event);\n                getViewState().onLinearTiltShiftUpdated(mLinearTiltShift);\n                break;\n        }\n    }\n\n    private void actionMove(MotionEvent event) {\n        Log.i(\"Observable\", \"Action: Move.\");\n        switch (mCurrentTool) {\n            case NONE:\n                break;\n            case DRAWING:\n                brushActionMove(event);\n                break;\n            case TEXT:\n                textActionMove(event);\n                break;\n            case STICKERS:\n                stickerActionMove(event);\n                break;\n            case VIGNETTE:\n                mVignette.actionMove(event);\n                getViewState().onVignetteUpdated(mVignette);\n                break;\n            case RADIAL_TILT_SHIFT:\n                mRadialTiltShift.actionMove(event);\n                getViewState().onRadialTiltShiftUpdated(mRadialTiltShift);\n                break;\n            case LINEAR_TILT_SHIFT:\n                mLinearTiltShift.actionMove(event);\n                getViewState().onLinearTiltShiftUpdated(mLinearTiltShift);\n                break;\n        }\n    }\n\n    private void actionPointerUp() {\n        Log.i(\"Observable\", \"Action: Pointer Up.\");\n        mCurrentMode = EditorMode.NONE;\n        switch (mCurrentTool) {\n            case VIGNETTE:\n                mVignette.actionPointerUp();\n                getViewState().onVignetteUpdated(mVignette);\n                break;\n            case RADIAL_TILT_SHIFT:\n                mRadialTiltShift.actionPointerUp();\n                getViewState().onRadialTiltShiftUpdated(mRadialTiltShift);\n                break;\n            case LINEAR_TILT_SHIFT:\n                mLinearTiltShift.actionPointerUp();\n                getViewState().onLinearTiltShiftUpdated(mLinearTiltShift);\n                break;\n        }\n    }\n\n    private void actionUp() {\n        Log.i(\"Observable\", \"Action: Up.\");\n        mCurrentMode = EditorMode.NONE;\n        switch (mCurrentTool) {\n            case NONE:\n                // FIXME: setupImageOnView(...)\n                getViewState().showOriginalImage(false);\n                break;\n            case DRAWING:\n                brushActionUp();\n                break;\n            case TEXT:\n                if (mTouchedText != null) {\n                    mTouchedText.resetHelperFrameOpacity();\n                }\n                break;\n            case STICKERS:\n                if (mTouchedSticker != null) {\n                    mTouchedSticker.setStickerTouched(false);\n\n                    getViewState().updateView();\n                }\n                break;\n            case VIGNETTE:\n                mVignette.actionUp();\n                getViewState().onVignetteUpdated(mVignette);\n                break;\n            case RADIAL_TILT_SHIFT:\n                mRadialTiltShift.actionUp();\n                getViewState().onRadialTiltShiftUpdated(mRadialTiltShift);\n                break;\n            case LINEAR_TILT_SHIFT:\n                mLinearTiltShift.actionUp();\n                getViewState().onLinearTiltShiftUpdated(mLinearTiltShift);\n                break;\n        }\n    }\n\n    void setupBitmapOnView(Bitmap bitmap, int width, int height) {\n        mViewWidth = width;\n        mViewHeight = height;\n\n        if (mImageBitmap == null) {\n            mImageBitmap = bitmap;\n        }\n\n        RectF viewRect = new RectF(0, 0, mViewWidth, mViewHeight);\n        mImageRect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());\n\n        LogHelper.logRect(\"mViewRect\", viewRect);\n\n        mImageMatrix.reset();\n        mImageMatrix.setRectToRect(mImageRect, viewRect, Matrix.ScaleToFit.CENTER);\n        mImageMatrix.mapRect(mImageRect);\n\n        mTransformMatrix.set(mImageMatrix);\n\n        if (mVignette == null) {\n            mVignette = new EditorVignette(mViewWidth, mViewHeight);\n        }\n\n        LogHelper.logRect(\"mImageRect\", mImageRect);\n        LogHelper.logMatrix(\"mImageMatrix\", mImageMatrix);\n\n        getViewState().setupImage(bitmap, mImageMatrix, mImageRect);\n    }\n\n    void viewTouched(MotionEvent event) {\n        mTouchSubject.onNext(event);\n    }\n\n    void applyChanges() {\n        switch (mCurrentTool) {\n            case STICKERS:\n                for (EditorSticker sticker : mStickers) {\n                    sticker.setHelpFrameEnabled(false);\n                }\n                break;\n            case TEXT:\n                for (EditorText text : mTexts) {\n                    text.setHelpFrameEnabled(false);\n                }\n                break;\n            case VIGNETTE:\n                mVignette.setHelpOvalEnabled(false);\n                break;\n            case RADIAL_TILT_SHIFT:\n                mRadialTiltShift.setHelpOvalEnabled(false);\n                break;\n            case LINEAR_TILT_SHIFT:\n                mLinearTiltShift.setHelpOvalEnabled(false);\n                break;\n        }\n\n        getViewState().onApplyChanges();\n    }\n\n    void applyChanges(@NonNull Bitmap bitmap) {\n        mImages.add(new EditorImage(mCurrentTool, bitmap));\n\n        ImageCacheSaveTask imageCacheSaveTask = new ImageCacheSaveTask(mContext, bitmap);\n        imageCacheSaveTask.setOnImageLoadedListener(new ImageCacheSaveTask.OnImageCacheSaveListener() {\n            @Override\n            public void onSaveStarted() {\n                Log.i(\"ImageCache\", \"Started\");\n            }\n\n            @Override\n            public void onImageSaved(Uri uri) {\n                mEditorListener.onAppliedImageSaved(uri);\n                Log.i(\"ImageCache\", \"Finished\");\n\n                setupBitmapOnView(getAlteredBitmap(), mViewWidth, mViewHeight);\n            }\n        });\n\n        imageCacheSaveTask.execute();\n\n        mEditorListener.hasChanges(mImages.size());\n    }\n\n    public void setFilter(ColorMatrix colorMatrix) {\n        mFilterPaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));\n\n        getViewState().onFilterChanged(mFilterPaint);\n    }\n\n    void changeFilterIntensity(int value) {\n        mFilterPaint.setAlpha(value);\n\n        getViewState().onFilterChanged(mFilterPaint);\n    }\n\n    void changeOverlayIntensity(int value) {\n        mOverlayPaint.setAlpha(value);\n    }\n\n    void changeVignetteMask(int value) {\n        mVignette.updateMask(value);\n\n        getViewState().onVignetteUpdated(mVignette);\n    }\n\n    void changeBrightness(int value) {\n        float brightness = value / 2;\n\n        mColorMatrix.reset();\n        mColorMatrix.set(new float[]{\n                1, 0, 0, 0, brightness,\n                0, 1, 0, 0, brightness,\n                0, 0, 1, 0, brightness,\n                0, 0, 0, 1, 0\n        });\n\n        mAdjustPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));\n\n        getViewState().onImageAdjusted(mAdjustPaint);\n    }\n\n    void changeContrast(int value) {\n        float input = value / 100f;\n        float scale = input + 1f;\n        float contrast = (-0.5f * scale + 0.5f) * 255f;\n\n        mColorMatrix.reset();\n        mColorMatrix.set(\n                new float[]{\n                        scale, 0, 0, 0, contrast,\n                        0, scale, 0, 0, contrast,\n                        0, 0, scale, 0, contrast,\n                        0, 0, 0, 1, 0}\n        );\n\n        mAdjustPaint.setColorFilter(\n                new ColorMatrixColorFilter(mColorMatrix));\n\n        getViewState().onImageAdjusted(mAdjustPaint);\n    }\n\n    void changeSaturation(int value) {\n        float saturation = (value + 100) / 100f;\n\n        mColorMatrix.reset();\n        mColorMatrix.setSaturation(saturation);\n\n        mAdjustPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));\n\n        getViewState().onImageAdjusted(mAdjustPaint);\n    }\n\n    void changeWarmth(int value) {\n        float warmth = (value / 220) / 2;\n\n        mColorMatrix.reset();\n        mColorMatrix.set(\n                new float[]{\n                        1, 0, 0, warmth, 0,\n                        0, 1, 0, warmth / 2, 0,\n                        0, 0, 1, warmth / 4, 0,\n                        0, 0, 0, 1, 0\n                });\n        mAdjustPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));\n\n        getViewState().onImageAdjusted(mAdjustPaint);\n    }\n\n    void changeBrushSize(float size) {\n        mDrawingPaint.setStrokeWidth(size);\n    }\n\n    void changeBrushColor(int color) {\n        mDrawingPaint.setColor(color);\n    }\n\n    void changeStraightenTransform(int value) {\n        mTransformMatrix.set(mImageMatrix);\n\n        float width = mImageRect.width();\n        float height = mImageRect.height();\n\n        if (width >= height) {\n            width = mImageRect.height();\n            height = mImageRect.width();\n        }\n\n        float alpha = (float) Math.atan(height / width);\n\n        float length1 = (width / 2) / (float) Math.cos(alpha - Math.abs(Math.toRadians(value)));\n        float length2 = (float) Math.sqrt(Math.pow(width / 2, 2) + Math.pow(height / 2, 2));\n\n        float scale = length2 / length1;\n\n        float centerX = mImageRect.centerX();\n        float centerY = mImageRect.centerY();\n\n        float dX = centerX * (1 - scale);\n        float dY = centerY * (1 - scale);\n\n        mTransformMatrix.postScale(scale, scale);\n        mTransformMatrix.postTranslate(dX, dY);\n        mTransformMatrix.postRotate(value, centerX, centerY);\n\n        getViewState().onStraightenTransformChanged(mTransformMatrix);\n    }\n\n    public void setFrame(Bitmap bitmap) {\n        getViewState().onFrameChanged(bitmap, getSupportMatrix(bitmap));\n    }\n\n    public void setOverlay(Bitmap bitmap) {\n        mSupportBitmap = bitmap;\n\n        getViewState().onOverlayChanged(bitmap, getSupportMatrix(bitmap), mOverlayPaint);\n    }\n\n    void addText(Text text) {\n        EditorText editorText = new EditorText(text);\n        editorText.setX(mImageRect.centerX());\n        editorText.setY(mImageRect.centerY());\n\n        mTexts.add(editorText);\n\n        getViewState().onTextAdded(mTexts);\n    }\n\n    void addSticker(Bitmap bitmap) {\n        mStickers.add(new EditorSticker(bitmap, mImageRect));\n\n        getViewState().onStickerAdded(mStickers);\n    }\n\n    public void changeTool(EditorTool tool) {\n        mCurrentTool = tool;\n\n        if (!mTexts.isEmpty()) {\n            mTexts.clear();\n        }\n        if (!mStickers.isEmpty()) {\n            mStickers.clear();\n        }\n\n        if (!mDrawings.isEmpty()) {\n            mDrawings.clear();\n        }\n\n        switch (mCurrentTool) {\n            case VIGNETTE:\n                mVignette.updateRect(mImageRect);\n                mVignette.setHelpOvalEnabled(true);\n                getViewState().onVignetteUpdated(mVignette);\n                break;\n            case RADIAL_TILT_SHIFT:\n                if (mRadialTiltShift == null) {\n                    mRadialTiltShift = new EditorRadialTiltShift(mViewWidth, mViewHeight);\n                }\n                mBlurredBitmap =\n                        getBlurBitmap(\n                                mContext, getAlteredBitmap(),\n                                mImageBitmap.getWidth(),\n                                mImageBitmap.getHeight()\n                        );\n                mRadialTiltShift.updateRect(mImageRect);\n                mRadialTiltShift.updateBlurBitmap(mBlurredBitmap);\n                mRadialTiltShift.setHelpOvalEnabled(true);\n                getViewState().onRadialTiltShiftUpdated(mRadialTiltShift);\n                break;\n            case LINEAR_TILT_SHIFT:\n                if (mLinearTiltShift == null) {\n                    mLinearTiltShift = new EditorLinearTiltShift(mViewWidth, mViewHeight);\n                }\n                mBlurredBitmap =\n                        getBlurBitmap(\n                                mContext, getAlteredBitmap(),\n                                mImageBitmap.getWidth(),\n                                mImageBitmap.getHeight()\n                        );\n                mLinearTiltShift.updateRect(mImageRect);\n                mLinearTiltShift.updateBlurBitmap(mBlurredBitmap);\n                mLinearTiltShift.setHelpOvalEnabled(true);\n                getViewState().onLinearTiltShiftUpdated(mLinearTiltShift);\n                break;\n            default:\n                mColorMatrix.reset();\n                mAdjustPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));\n                break;\n        }\n\n        getViewState().onToolChanged(tool);\n    }\n\n    void setEditorListener(EditorListener editorListener) {\n        mEditorListener = editorListener;\n    }\n\n    void undo() {\n        if (!mImages.isEmpty()) {\n            mImages.remove(mImages.size() - 1);\n            mEditorListener.hasChanges(mImages.size());\n            setupBitmapOnView(getAlteredBitmap(), mViewWidth, mViewHeight);\n        } else {\n            setupBitmapOnView(mImageBitmap, mViewWidth, mViewHeight);\n        }\n    }\n\n    private Matrix getSupportMatrix(Bitmap bitmap) {\n        float sX = mImageRect.width() / bitmap.getWidth();\n        float sY = mImageRect.height() / bitmap.getHeight();\n\n        LogHelper.logMatrix(\"mSupportMatrix before (View)\", mSupportMatrix);\n\n        mSupportMatrix.reset();\n        mSupportMatrix.postScale(sX, sY);\n        mSupportMatrix.postTranslate(mImageRect.left, mImageRect.top);\n\n        LogHelper.logMatrix(\"mSupportMatrix after (View)\", mSupportMatrix);\n\n        return mSupportMatrix;\n    }\n\n    private void textActionDown(MotionEvent event) {\n        for (int i = mTexts.size() - 1; i >= 0; i--) {\n            EditorText editorText = mTexts.get(i);\n\n            if (editorText.isInside(event)) {\n                mTouchedText = editorText;\n                mCurrentMode = EditorMode.MOVE;\n\n                mTouchedText.setHelperFrameOpacity();\n\n                mLastX = event.getX();\n                mLastY = event.getY();\n\n                return;\n            } else if (editorText.isInDeleteHandleButton(event)) {\n                mTouchedText = null;\n                mCurrentMode = EditorMode.NONE;\n\n                mTexts.remove(i);\n                getViewState().updateView();\n                return;\n            } else if (editorText.isInResizeAndScaleHandleButton(event)) {\n                mTouchedText = editorText;\n\n                mTouchedText.setHelperFrameOpacity();\n\n                mLastX = editorText.getRotateAndScaleHandleDstRect().centerX();\n                mLastY = editorText.getRotateAndScaleHandleDstRect().centerY();\n\n                mCurrentMode = EditorMode.ROTATE_AND_SCALE;\n                return;\n\n            } else if (editorText.isInFrontHandleButton(event)) {\n                EditorText temp = mTexts.remove(i);\n                mTexts.add(temp);\n                getViewState().updateView();\n                return;\n            } else if (editorText.isInTransparencyHandleButton(event)) {\n                mEditorListener.onTransparencyHandleButtonClicked(editorText.getPaint());\n                return;\n            }\n        }\n\n        mTouchedText = null;\n        mCurrentMode = EditorMode.NONE;\n    }\n\n    private void stickerActionDown(MotionEvent event) {\n        for (int i = mStickers.size() - 1; i >= 0; i--) {\n            EditorSticker editorSticker = mStickers.get(i);\n\n            if (editorSticker.isInside(event)) {\n                mTouchedSticker = editorSticker;\n                mCurrentMode = EditorMode.MOVE;\n\n                mTouchedSticker.setStickerTouched(true);\n\n                mLastX = event.getX();\n                mLastY = event.getY();\n\n                return;\n            } else if (editorSticker.isInDeleteHandleButton(event)) {\n                mTouchedSticker = null;\n\n                mCurrentMode = EditorMode.NONE;\n\n                mStickers.remove(i);\n\n                getViewState().updateView();\n                return;\n            } else if (editorSticker.isInScaleAndRotateHandleButton(event)) {\n                mTouchedSticker = editorSticker;\n                mCurrentMode = EditorMode.ROTATE_AND_SCALE;\n\n                mTouchedSticker.setStickerTouched(true);\n\n                mLastX = event.getX();\n                mLastY = event.getY();\n                return;\n            } else if (editorSticker.isInFrontHandleButton(event)) {\n                mCurrentMode = EditorMode.NONE;\n\n                mStickers.add(mStickers.remove(i));\n\n                getViewState().updateView();\n                return;\n            } else if (editorSticker.isInTransparencyHandleButton(event)) {\n                mEditorListener.onTransparencyHandleButtonClicked(editorSticker.getPaint());\n                return;\n            }\n        }\n\n        mTouchedSticker = null;\n\n        mCurrentMode = EditorMode.NONE;\n    }\n\n    private void brushActionDown(MotionEvent event) {\n        Log.i(\"Drawing\", \"Brush down\");\n        mLastX = event.getX();\n        mLastY = event.getY();\n\n        mDrawingPath.reset();\n\n        mDrawingPath.moveTo(mLastX, mLastY);\n\n        getViewState().updateDrawing(mDrawingPaint, mDrawingPath);\n    }\n\n    private void brushActionMove(MotionEvent event) {\n        Log.i(\"Drawing\", \"Brush move\");\n\n        float dX = event.getX() + mLastX;\n        float dY = event.getY() + mLastY;\n\n        mDrawingPath.quadTo(mLastX, mLastY, dX / 2, dY / 2);\n\n        mLastX = event.getX();\n        mLastY = event.getY();\n\n        getViewState().updateDrawing(mDrawingPaint, mDrawingPath);\n    }\n\n    private void brushActionUp() {\n        Log.i(\"Drawing\", \"Brush up\");\n\n        mDrawingPath.lineTo(mLastX, mLastY);\n        mDrawings.add(new Drawing(new Paint(mDrawingPaint), new Path(mDrawingPath)));\n\n        mDrawingPath.reset();\n\n        getViewState().updateDrawing(mDrawings);\n    }\n\n    private void textActionMove(MotionEvent event) {\n        if (mTouchedText != null) {\n            switch (mCurrentMode) {\n                case MOVE:\n                    float distanceX = event.getX() - mLastX;\n                    float distanceY = event.getY() - mLastY;\n\n                    float newX = mTouchedText.getX() + distanceX;\n                    float newY = mTouchedText.getY() + distanceY;\n\n                    mTouchedText.setX(newX);\n                    mTouchedText.setY(newY);\n\n                    mLastX = event.getX();\n                    mLastY = event.getY();\n\n                    break;\n                case ROTATE_AND_SCALE:\n                    mTouchedText.updateRotateAndScale(\n                            getDeltaX(event),\n                            getDeltaY(event)\n                    );\n\n                    mLastX = event.getX();\n                    mLastY = event.getY();\n\n                    break;\n            }\n\n            getViewState().updateView();\n        }\n    }\n\n    private void stickerActionMove(MotionEvent event) {\n        if (mTouchedSticker != null) {\n            switch (mCurrentMode) {\n                case MOVE:\n                    mTouchedSticker.actionMove(\n                            getDeltaX(event),\n                            getDeltaY(event)\n                    );\n\n                    mLastX = event.getX();\n                    mLastY = event.getY();\n\n                    break;\n                case ROTATE_AND_SCALE:\n                    mTouchedSticker.updateRotateAndScale(\n                            getDeltaX(event),\n                            getDeltaY(event)\n                    );\n\n                    mLastX = event.getX();\n                    mLastY = event.getY();\n\n                    break;\n            }\n\n            getViewState().updateView();\n        }\n    }\n\n    private Bitmap getAlteredBitmap() {\n        if (!mImages.isEmpty()) {\n            return mImages.get(mImages.size() - 1).getBitmap();\n        }\n\n        return mImageBitmap;\n    }\n\n    private Bitmap getBlurBitmap(Context context, Bitmap bitmap, int width, int height) {\n        Bitmap src = bitmap.copy(bitmap.getConfig(), true);\n        Bitmap scaledBitmap = Bitmap.createScaledBitmap(src, width, height, false);\n        Bitmap outputBitmap = Bitmap.createBitmap(scaledBitmap);\n\n        RenderScript rs = RenderScript.create(context);\n        ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));\n        Allocation tmpIn = Allocation.createFromBitmap(rs, scaledBitmap);\n        Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);\n        theIntrinsic.setRadius(10f);\n        theIntrinsic.setInput(tmpIn);\n        theIntrinsic.forEach(tmpOut);\n        tmpOut.copyTo(outputBitmap);\n\n        return outputBitmap;\n    }\n\n    private float getDeltaX(MotionEvent event) {\n        return event.getX() - mLastX;\n    }\n\n    private float getDeltaY(MotionEvent event) {\n        return event.getY() - mLastY;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/enums/EditorMode.java",
    "content": "package net.iquesoft.iquephoto.core.enums;\n\npublic enum EditorMode {\n    NONE, MOVE, ROTATE_AND_SCALE, RESIZE_HEIGHT, RESIZE_WIDTH\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/enums/EditorTool.java",
    "content": "package net.iquesoft.iquephoto.core.enums;\n\npublic enum EditorTool {\n    NONE, FILTERS, ADJUST, OVERLAY, STICKERS, FRAMES, TEXT, DRAWING, RADIAL_TILT_SHIFT, LINEAR_TILT_SHIFT, VIGNETTE, BRIGHTNESS,\n    CONTRAST, SATURATION, WARMTH, EXPOSURE, SHADOWS, TINT, FADE, TRANSFORM, TRANSFORM_VERTICAL, TRANSFORM_HORIZONTAL,\n    TRANSFORM_STRAIGHTEN;\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/Drawing.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.Path;\nimport android.support.annotation.NonNull;\n\npublic class Drawing {\n    public static final float DEFAULT_STROKE_WIDTH = 5f;\n    public static final int DEFAULT_COLOR = Color.BLACK;\n\n    private Paint mPaint;\n    private Path mPath;\n\n    public Drawing(@NonNull Paint paint, @NonNull Path path) {\n        mPaint = paint;\n        mPath = path;\n    }\n\n    public Paint getPaint() {\n        return mPaint;\n    }\n\n    public Path getPath() {\n        return mPath;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorFrame.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Color;\nimport android.graphics.Paint;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.utils.BitmapUtil;\nimport net.iquesoft.iquephoto.utils.LogHelper;\nimport net.iquesoft.iquephoto.utils.SizeUtil;\n\npublic class EditorFrame {\n    static final int EDITOR_FRAME_PADDING = 25;\n\n    private Paint mFramePaint;\n\n    private Bitmap mDeleteHandleBitmap;\n    private Bitmap mTransparencyHandleBitmap;\n    private Bitmap mResizeHandleBitmap;\n    private Bitmap mFrontHandleBitmap;\n\n    public EditorFrame(Context context) {\n        initializeFramePaint();\n        initializeHandlesBitmap(context);\n    }\n\n    private void initializeFramePaint() {\n        mFramePaint = new Paint();\n        mFramePaint.setColor(Color.WHITE);\n        mFramePaint.setAntiAlias(true);\n        mFramePaint.setDither(true);\n        mFramePaint.setStyle(Paint.Style.STROKE);\n        mFramePaint.setStrokeWidth(SizeUtil.dp2px(3.5f));\n        mFramePaint.setAlpha(175);\n    }\n    \n    private void initializeHandlesBitmap(Context context) {\n        mDeleteHandleBitmap = BitmapUtil.drawable2Bitmap(context, R.drawable.ic_handle_delete);\n        mResizeHandleBitmap = BitmapUtil.drawable2Bitmap(context, R.drawable.ic_handle_scale_rotate);\n        mFrontHandleBitmap = BitmapUtil.drawable2Bitmap(context, R.drawable.ic_handle_front);\n        mTransparencyHandleBitmap =\n                BitmapUtil.drawable2Bitmap(context, R.drawable.ic_handle_transparency);\n\n        LogHelper.logBitmap(\"mDeleteHandleBitmap\", mDeleteHandleBitmap);\n        LogHelper.logBitmap(\"mResizeHandleBitmap\", mResizeHandleBitmap);\n        LogHelper.logBitmap(\"mFrontHandleBitmap\", mFrontHandleBitmap);\n        LogHelper.logBitmap(\"mTransparencyHandleBitmap\", mTransparencyHandleBitmap);\n    }\n\n    public Paint getFramePaint() {\n        return mFramePaint;\n    }\n\n    public Bitmap getDeleteHandleBitmap() {\n        return mDeleteHandleBitmap;\n    }\n\n    public Bitmap getTransparencyHandleBitmap() {\n        return mTransparencyHandleBitmap;\n    }\n\n    public Bitmap getResizeHandleBitmap() {\n        return mResizeHandleBitmap;\n    }\n\n    public Bitmap getFrontHandleBitmap() {\n        return mFrontHandleBitmap;\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorImage.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.graphics.Bitmap;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\n\npublic class EditorImage {\n    private EditorTool mCommand;\n    private Bitmap mBitmap;\n\n    public EditorImage(EditorTool command, Bitmap bitmap) {\n        mCommand = command;\n        mBitmap = bitmap;\n    }\n\n    public EditorTool getCommand() {\n        return mCommand;\n    }\n\n    public Bitmap getBitmap() {\n        return mBitmap;\n    }\n\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorLinearTiltShift.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.LinearGradient;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.PorterDuff;\nimport android.graphics.PorterDuffXfermode;\nimport android.graphics.RectF;\nimport android.graphics.Shader;\nimport android.support.annotation.NonNull;\nimport android.view.MotionEvent;\n\nimport net.iquesoft.iquephoto.core.enums.EditorMode;\nimport net.iquesoft.iquephoto.utils.MotionEventUtil;\nimport net.iquesoft.iquephoto.utils.RectUtil;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorMode.MOVE;\nimport static net.iquesoft.iquephoto.core.enums.EditorMode.NONE;\nimport static net.iquesoft.iquephoto.core.enums.EditorMode.ROTATE_AND_SCALE;\n\n// TODO: Linear tilt shift.\n// TODO: Rotate linear tilt shift.\npublic class EditorLinearTiltShift {\n    private float mFeather = 0.7f;\n    private float mGradientInset = 100;\n    private float mFocusHeight;\n    private float mControlPointTolerance = 20;\n    private float mRotateAngle;\n\n    private float mPreX;\n    private float mPreY;\n\n    private boolean mIsShowHelpOval = true;\n\n    private int mViewWidth;\n    private int mViewHeight;\n\n    private float mPreDistance;\n\n    private Context mContext;\n\n    private Paint mPaint;\n    private Paint mShaderPaint;\n    private Paint mTiltShiftLinearPaint;\n    private Paint mTiltShiftLinearControlPaint;\n\n    private Bitmap mBlurBitmap;\n\n    private RectF mBitmapRect;\n    private RectF mTiltShiftLinearRect;\n    private RectF mTempTiltShiftLinearRect;\n    private RectF mTiltShiftLinearControlRect;\n\n    private Matrix mGradientMatrix;\n\n    private LinearGradient mLinearGradient;\n\n    private EditorMode mMode = NONE;\n\n    public EditorLinearTiltShift(int viewWidth, int viewHeight) {\n        mViewWidth = viewWidth;\n        mViewHeight = viewHeight;\n\n        initialize();\n    }\n\n    private void initialize() {\n        mPaint = new Paint();\n\n        mTiltShiftLinearControlPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mTiltShiftLinearControlPaint.setColor(Color.WHITE);\n        mTiltShiftLinearControlPaint.setStyle(Paint.Style.STROKE);\n        mTiltShiftLinearControlPaint.setStrokeWidth(5f);\n        mTiltShiftLinearControlPaint.setAlpha(125);\n        mTiltShiftLinearControlPaint.setDither(true);\n\n        mTiltShiftLinearPaint = new Paint();\n        mTiltShiftLinearPaint.setAntiAlias(true);\n        mTiltShiftLinearPaint.setFilterBitmap(false);\n        mTiltShiftLinearPaint.setDither(true);\n\n        mGradientMatrix = new Matrix();\n\n        mBitmapRect = new RectF();\n        mTiltShiftLinearRect = new RectF();\n        mTempTiltShiftLinearRect = new RectF();\n        mTiltShiftLinearControlRect = new RectF();\n\n        mShaderPaint = new Paint();\n        mShaderPaint.setAntiAlias(true);\n        mShaderPaint.setFilterBitmap(false);\n        mShaderPaint.setDither(true);\n        mShaderPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));\n\n        updateGradientRect();\n\n        mControlPointTolerance *= 1.5f;\n        mGradientInset = 0;\n    }\n\n    public void draw(@NonNull Canvas canvas, @NonNull Bitmap bitmap, @NonNull Matrix matrix, @NonNull Paint paint) {\n        if (!mTiltShiftLinearRect.isEmpty()) {\n\n            canvas.drawBitmap(bitmap, matrix, paint);\n\n            canvas.saveLayer(mBitmapRect, mPaint, Canvas.CLIP_TO_LAYER_SAVE_FLAG);\n\n            mTiltShiftLinearControlRect.set(mTiltShiftLinearRect);\n            //mTiltShiftLinearControlRect.inset(-mGradientInset, -mGradientInset);\n\n            if (mBlurBitmap != null) {\n                canvas.drawBitmap(mBlurBitmap, matrix, paint);\n            }\n\n            canvas.drawRect(mTiltShiftLinearControlRect, mShaderPaint);\n\n            canvas.restore();\n\n            //mTiltShiftLinearControlRect.set(mTiltShiftLinearRect);\n            if (mIsShowHelpOval) {\n                canvas.drawRect(mTiltShiftLinearControlRect, mTiltShiftLinearControlPaint);\n            }\n        }\n    }\n\n    public void updateRect(RectF bitmapRect) {\n        mFocusHeight = bitmapRect.height() / 2;\n\n        mTiltShiftLinearRect.set(\n                bitmapRect.left,\n                bitmapRect.centerY() - mFocusHeight / 2,\n                bitmapRect.right,\n                bitmapRect.centerY() + mFocusHeight / 2);\n\n        mBitmapRect.set(bitmapRect);\n\n        updateGradientMatrix(mTiltShiftLinearRect);\n\n        setPaintAlpha(125);\n    }\n\n    public void updateBlurBitmap(@NonNull Bitmap blurBitmap) {\n        mBlurBitmap = blurBitmap;\n    }\n\n    public void updateGradientRect() {\n        final float[] anchors = new float[]{0, mFeather, 1};\n\n        float start = 0;\n        float bottom = 0;\n\n        mLinearGradient = new android.graphics.LinearGradient(\n                0, start, 0, bottom, 0xffffffff, 0x00ffffff, Shader.TileMode.CLAMP\n        );\n\n        updateGradientMatrix(mTiltShiftLinearRect);\n    }\n\n    public void updateGradientShader(float value, Paint paint) {\n        mFeather = value;\n\n        final int[] colors = new int[]{0xff000000, 0xff000000, 0};\n        final float[] positions = new float[]{0, 0, 1, 1};\n\n        /*mRadialGradient = new android.graphics.RadialGradient(\n                0, 0, 1, colors, anchors, Shader.TileMode.CLAMP\n        );*/\n\n        mLinearGradient = new android.graphics.LinearGradient(\n                0, 0, 2, 2, colors, positions, Shader.TileMode.CLAMP\n        );\n        paint.setShader(mLinearGradient);\n        updateGradientMatrix(mTiltShiftLinearRect);\n    }\n\n    private void updateGradientMatrix(RectF rectF) {\n        mGradientMatrix.reset();\n        mGradientMatrix.postTranslate(rectF.centerX(), rectF.centerY());\n        mGradientMatrix.postScale(rectF.height() / 2, rectF.height() / 2, rectF.centerX(), rectF.centerY());\n        mLinearGradient.setLocalMatrix(mGradientMatrix);\n    }\n\n    public void actionMove(MotionEvent event) {\n        mTempTiltShiftLinearRect.set(mTiltShiftLinearRect);\n\n        switch (mMode) {\n            case MOVE:\n                float distanceX = event.getX() - mPreX;\n                float distanceY = event.getY() - mPreY;\n\n                mTempTiltShiftLinearRect.offsetTo(distanceX, distanceY);\n                break;\n            case ROTATE_AND_SCALE:\n                float dist = MotionEventUtil.getDelta(event);\n                float scale = ((dist - mPreDistance) / displayDistance());\n\n                mPreDistance = dist;\n\n                scale += 1;\n                scale *= scale;\n\n                RectUtil.scaleRect(mTempTiltShiftLinearRect, scale);\n\n                mFocusHeight = mTempTiltShiftLinearRect.height();\n                break;\n        }\n\n        if (mTempTiltShiftLinearRect.width() > mControlPointTolerance\n                && mTempTiltShiftLinearRect.height() > mControlPointTolerance) {\n            if (isTiltShiftInRect()) {\n                mTiltShiftLinearRect.set(mTempTiltShiftLinearRect);\n\n                mPreX = event.getX();\n                mPreY = event.getY();\n            }\n\n            updateGradientMatrix(mTiltShiftLinearRect);\n\n            //ViewCompat.postInvalidateOnAnimation(mImageEditorView);\n        }\n    }\n\n    public void actionDown(MotionEvent event) {\n        mPreX = event.getX();\n        mPreY = event.getY();\n\n        mMode = MOVE;\n    }\n\n    public void actionPointerDown(MotionEvent event) {\n        mMode = ROTATE_AND_SCALE;\n    }\n\n    public void actionUp() {\n        mMode = NONE;\n    }\n\n    public void actionPointerUp() {\n        mMode = NONE;\n    }\n\n    public void setPaintAlpha(int value) {\n\n    }\n\n    public int getPaintAlpha() {\n        return 0;\n    }\n\n    private float displayDistance() {\n        return (float) Math.sqrt(mViewWidth * mViewWidth + mViewHeight * mViewHeight);\n    }\n\n    private boolean isTiltShiftInRect() {\n        return mBitmapRect.contains(\n                mTempTiltShiftLinearRect.centerX(),\n                mTempTiltShiftLinearRect.centerY()\n        );\n    }\n\n    public void setHelpOvalEnabled(boolean enabled) {\n        mIsShowHelpOval = enabled;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorRadialTiltShift.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.animation.Animator;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.PorterDuff;\nimport android.graphics.PorterDuffXfermode;\nimport android.graphics.RadialGradient;\nimport android.graphics.RectF;\nimport android.graphics.Shader;\nimport android.support.annotation.NonNull;\nimport android.view.MotionEvent;\n\nimport net.iquesoft.iquephoto.core.enums.EditorMode;\nimport net.iquesoft.iquephoto.utils.MotionEventUtil;\nimport net.iquesoft.iquephoto.utils.RectUtil;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorMode.*;\n\n// TODO: FadeIn and FadeOut Animators.\npublic class EditorRadialTiltShift {\n    private static final int FADEOUT_DELAY = 1000;\n\n    private float mFeather = 0.7f;\n    private float mFocusRadius;\n    private float mGradientInset = 100;\n    private float mControlPointTolerance = 20;\n\n    private float mPreX;\n    private float mPreY;\n\n    private int mViewWidth;\n    private int mViewHeight;\n\n    private boolean mIsShowHelpOval = true;\n\n    private float mPreDistance;\n\n    private Bitmap mBitmap;\n    private Bitmap mBlurBitmap;\n\n    private Paint mPaint;\n    private Paint mShaderPaint;\n    private Paint mTiltShiftRadialPaint;\n    private Paint mTiltShiftRadialControlPaint;\n\n    private RectF mBitmapRect = new RectF();\n    private RectF mRadialTiltShiftRect;\n    private RectF mRadialTiltShiftTempRect;\n    private RectF mRadialTiltShiftControlRect;\n\n    private Matrix mGradientMatrix;\n\n    private RadialGradient mRadialGradient;\n\n    private Animator mFadeInAnimator;\n    private Animator mFadeOutAnimator;\n\n    private EditorMode mMode = NONE;\n\n    public EditorRadialTiltShift(int viewWidth, int viewHeight) {\n        mViewWidth = viewWidth;\n        mViewHeight = viewHeight;\n        initialize();\n    }\n\n    public void initialize() {\n        mPaint = new Paint();\n\n        mTiltShiftRadialControlPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mTiltShiftRadialControlPaint.setColor(Color.WHITE);\n        mTiltShiftRadialControlPaint.setStrokeWidth(5f);\n        mTiltShiftRadialControlPaint.setStyle(Paint.Style.STROKE);\n        mTiltShiftRadialControlPaint.setAlpha(125);\n        mTiltShiftRadialControlPaint.setDither(true);\n\n        mTiltShiftRadialPaint = new Paint();\n        mTiltShiftRadialPaint.setAntiAlias(true);\n        mTiltShiftRadialPaint.setFilterBitmap(false);\n        mTiltShiftRadialPaint.setDither(true);\n\n        mGradientMatrix = new Matrix();\n\n        mRadialTiltShiftRect = new RectF();\n        mRadialTiltShiftControlRect = new RectF();\n        mRadialTiltShiftTempRect = new RectF();\n\n        mShaderPaint = new Paint();\n        mShaderPaint.setAntiAlias(true);\n        mShaderPaint.setFilterBitmap(false);\n        mShaderPaint.setDither(true);\n        mShaderPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));\n\n        updateGradientShader();\n\n        mControlPointTolerance *= 1.5f;\n\n        mGradientInset = 0;\n\n        //mFadeInAnimator = ObjectAnimator.ofFloat(mImageEditorView, \"paintAlpha\", 0, 125);\n        //mFadeOutAnimator = ObjectAnimator.ofFloat(mImageEditorView, \"paintAlpha\", 125, 0);\n        //mFadeOutAnimator.setStartDelay(FADEOUT_DELAY);\n    }\n\n    public void draw(@NonNull Canvas canvas, @NonNull Bitmap bitmap, @NonNull Matrix matrix, @NonNull Paint paint) {\n        if (!mRadialTiltShiftRect.isEmpty()) {\n\n            canvas.drawBitmap(bitmap, matrix, paint);\n\n            canvas.saveLayer(mBitmapRect, mPaint, Canvas.CLIP_TO_LAYER_SAVE_FLAG);\n\n            mRadialTiltShiftControlRect.set(mRadialTiltShiftRect);\n            mRadialTiltShiftControlRect.inset(-mGradientInset, -mGradientInset);\n\n            if (mBlurBitmap != null) {\n                canvas.drawBitmap(mBlurBitmap, matrix, paint);\n            }\n\n            canvas.drawCircle(\n                    mRadialTiltShiftControlRect.centerX(),\n                    mRadialTiltShiftControlRect.centerY(),\n                    mFocusRadius,\n                    mShaderPaint\n            );\n\n            canvas.restore();\n\n            mRadialTiltShiftControlRect.set(mRadialTiltShiftRect);\n\n            if (mIsShowHelpOval) {\n                canvas.drawCircle(\n                        mRadialTiltShiftRect.centerX(),\n                        mRadialTiltShiftRect.centerY(),\n                        mFocusRadius,\n                        mTiltShiftRadialControlPaint\n                );\n            }\n        }\n    }\n\n    public void updateRect(RectF bitmapRect) {\n        if (bitmapRect.height() <= bitmapRect.width()) {\n            mFocusRadius = bitmapRect.height() / 3;\n        } else {\n            mFocusRadius = bitmapRect.width() / 3;\n        }\n\n        mRadialTiltShiftRect.set(0, 0, mFocusRadius, mFocusRadius);\n\n        mRadialTiltShiftRect.offsetTo(\n                bitmapRect.centerX() - mFocusRadius / 2,\n                bitmapRect.centerY() - mFocusRadius / 2\n        );\n\n        mBitmapRect.set(bitmapRect);\n\n        updateGradientMatrix(mRadialTiltShiftRect);\n\n        setPaintAlpha(125);\n        //mFadeOutAnimator.start();\n    }\n\n    private void updateGradientShader() {\n        final int[] colors = new int[]{0xff000000, 0xff000000, 0};\n        final float[] anchors = new float[]{0, mFeather, 1};\n\n        mRadialGradient = new android.graphics.RadialGradient(\n                0, 0, 1, colors, anchors, Shader.TileMode.CLAMP\n        );\n        updateGradientMatrix(mRadialTiltShiftRect);\n        mShaderPaint.setShader(mRadialGradient);\n    }\n\n    public void updateBlurBitmap(@NonNull Bitmap bitmap) {\n        mBlurBitmap = bitmap;\n    }\n\n    private void updateGradientMatrix(RectF rectF) {\n        mGradientMatrix.reset();\n        mGradientMatrix.postTranslate(rectF.centerX(), rectF.centerY());\n        mGradientMatrix.postScale(rectF.height() / 2, rectF.height() / 2, rectF.centerX(), rectF.centerY());\n        mRadialGradient.setLocalMatrix(mGradientMatrix);\n    }\n\n    public void actionDown(MotionEvent event) {\n        //mFadeOutAnimator.cancel();\n\n        if (getPaintAlpha() != 125) {\n            // mFadeInAnimator.start();\n        }\n\n        if (event.getPointerCount() == 1) {\n            mMode = MOVE;\n        }\n\n        mPreX = event.getX();\n        mPreY = event.getY();\n    }\n\n    public void actionMove(MotionEvent event) {\n        mRadialTiltShiftTempRect.set(mRadialTiltShiftRect);\n\n        switch (mMode) {\n            case MOVE:\n                float distanceX = event.getX() - mPreX;\n                float distanceY = event.getY() - mPreY;\n\n                mRadialTiltShiftTempRect.offset(distanceX, distanceY);\n                break;\n            case ROTATE_AND_SCALE:\n                float dist = MotionEventUtil.getDelta(event);\n                float scale = ((dist - mPreDistance) / displayDistance());\n\n                mPreDistance = dist;\n\n                scale += 1;\n                scale *= scale;\n\n                RectUtil.scaleRect(mRadialTiltShiftTempRect, scale);\n\n                mFocusRadius = mRadialTiltShiftTempRect.height();\n\n                break;\n        }\n\n        if (mRadialTiltShiftTempRect.width() > mControlPointTolerance\n                && mRadialTiltShiftTempRect.height() > mControlPointTolerance) {\n            if (isTiltShiftInRect()) {\n                mRadialTiltShiftRect.set(mRadialTiltShiftTempRect);\n\n                mPreX = event.getX();\n                mPreY = event.getY();\n            }\n\n            updateGradientMatrix(mRadialTiltShiftRect);\n\n        }\n    }\n\n    public void actionPointerDown(MotionEvent event) {\n        if (event.getPointerCount() == 2) {\n            mPreDistance = MotionEventUtil.getDelta(event);\n            mMode = ROTATE_AND_SCALE;\n        }\n    }\n\n    public void actionUp() {\n        // mFadeOutAnimator.start();\n\n        mMode = NONE;\n    }\n\n    public void actionPointerUp() {\n        mMode = NONE;\n    }\n\n    public void setPaintAlpha(int value) {\n        mTiltShiftRadialControlPaint.setAlpha(value);\n        //mImageEditorView.postInvalidate();\n    }\n\n    public int getPaintAlpha() {\n        return mTiltShiftRadialControlPaint.getAlpha();\n    }\n\n    private float displayDistance() {\n        return (float) Math.sqrt(mViewWidth * mViewWidth + mViewHeight * mViewHeight);\n    }\n\n    private boolean isTiltShiftInRect() {\n        return mBitmapRect.contains(\n                mRadialTiltShiftTempRect.centerX(),\n                mRadialTiltShiftTempRect.centerY()\n        );\n    }\n\n    public void setHelpOvalEnabled(boolean enabled) {\n        mIsShowHelpOval = enabled;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorSticker.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\nimport android.view.MotionEvent;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.utils.MatrixUtil;\nimport net.iquesoft.iquephoto.utils.RectUtil;\n\nimport javax.inject.Inject;\n\npublic class EditorSticker {\n    private static final float MIN_SCALE = 0.15f;\n    private static final int HELP_BOX_PAD = 25;\n    private static final int BUTTON_WIDTH = 30;\n\n    private float mRotateAngle = 0;\n\n    private float mInitWidth;\n\n    private boolean mIsDrawHelperFrame = true;\n\n    private Bitmap mBitmap;\n\n    private Paint mPaint;\n    private Paint mHelperFramePaint;\n\n    private Matrix mMatrix;\n\n    private RectF mImageRect;\n\n    private RectF mDstRect;\n\n    private RectF mFrameRect;\n\n    private Rect mDeleteHandleSrcRect;\n    private Rect mFrontHandleSrcRect;\n    private Rect mTransparencyHandleSrcRect;\n    private Rect mScaleAndRotateHandleSrcRect;\n\n    private RectF mDeleteHandleDstRect;\n    private RectF mFrontHandleDstRect;\n    private RectF mTransparencyHandleDstRect;\n    private RectF mScaleAndRotateHandleDstRect;\n\n    @Inject\n    EditorFrame mEditorFrame;\n\n    public EditorSticker(Bitmap bitmap, RectF imageRect) {\n        mBitmap = bitmap;\n\n        mImageRect = imageRect;\n\n        App.getAppComponent().inject(this);\n\n        mPaint = new Paint();\n        mHelperFramePaint = new Paint(mEditorFrame.getFramePaint());\n\n        initialize();\n    }\n\n    private void initialize() {\n        int stickerWidth = Math.min(mBitmap.getWidth(), (int) mImageRect.width() >> 1);\n        int stickerHeight = stickerWidth * mBitmap.getHeight() / mBitmap.getWidth();\n\n        float left = mImageRect.centerX() - (stickerWidth / 2);\n        float top = mImageRect.centerY() - (stickerHeight / 2);\n\n        mDstRect = new RectF(left, top, left + stickerWidth, top + stickerHeight);\n\n        mMatrix = new Matrix();\n        mMatrix.postTranslate(mDstRect.left, mDstRect.top);\n        mMatrix.postScale((float) stickerWidth / mBitmap.getWidth(),\n                (float) stickerHeight / mBitmap.getHeight(), mDstRect.left,\n                mDstRect.top);\n\n        mInitWidth = mDstRect.width();\n\n        mFrameRect = new RectF(mDstRect);\n        updateFrameRect();\n\n        mTransparencyHandleSrcRect = new Rect(0, 0, mEditorFrame.getDeleteHandleBitmap().getWidth(),\n                mEditorFrame.getDeleteHandleBitmap().getHeight());\n        mDeleteHandleSrcRect = new Rect(0, 0, mEditorFrame.getResizeHandleBitmap().getWidth(),\n                mEditorFrame.getResizeHandleBitmap().getHeight());\n        mScaleAndRotateHandleSrcRect = new Rect(0, 0, mEditorFrame.getTransparencyHandleBitmap().getWidth(),\n                mEditorFrame.getTransparencyHandleBitmap().getHeight());\n        mFrontHandleSrcRect = new Rect(0, 0, mEditorFrame.getFrontHandleBitmap().getWidth(),\n                mEditorFrame.getFrontHandleBitmap().getHeight());\n\n        int handleHalfSize = mEditorFrame.getDeleteHandleBitmap().getWidth() / 2;\n\n        mDeleteHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n        mScaleAndRotateHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n        mFrontHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n        mTransparencyHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n    }\n\n    private void updateFrameRect() {\n        mFrameRect.left -= HELP_BOX_PAD;\n        mFrameRect.right += HELP_BOX_PAD;\n        mFrameRect.top -= HELP_BOX_PAD;\n        mFrameRect.bottom += HELP_BOX_PAD;\n    }\n\n    public void setStickerTouched(boolean isTouched) {\n        if (isTouched) {\n            mHelperFramePaint.setAlpha(255);\n        } else {\n            mHelperFramePaint.set(mEditorFrame.getFramePaint());\n        }\n    }\n\n    public void actionMove(float dx, float dy) {\n        mMatrix.postTranslate(dx, dy);\n\n        mDstRect.offset(dx, dy);\n\n        mFrameRect.offset(dx, dy);\n\n        Log.i(\"Sticker\", \"Move: \" + \"\\n\" + \"X = \" + MatrixUtil.getMatrixX(mMatrix) +\n                \"\\n\" + \"Y = \" + MatrixUtil.getMatrixY(mMatrix));\n    }\n\n    public void updateRotateAndScale(final float dx, final float dy) {\n        float stickerCenterX = mDstRect.centerX();\n        float stickerCenterY = mDstRect.centerY();\n\n        float handleCenterX = mScaleAndRotateHandleDstRect.centerX();\n        float handleCenterY = mScaleAndRotateHandleDstRect.centerY();\n\n        float n_x = handleCenterX + dx;\n        float n_y = handleCenterY + dy;\n\n        float xa = handleCenterX - stickerCenterX;\n        float ya = handleCenterY - stickerCenterY;\n\n        float xb = n_x - stickerCenterX;\n        float yb = n_y - stickerCenterY;\n\n        float srcLen = (float) Math.sqrt(xa * xa + ya * ya);\n        float curLen = (float) Math.sqrt(xb * xb + yb * yb);\n\n        float scale = curLen / srcLen;\n\n        float newWidth = mDstRect.width() * scale;\n        if (newWidth / mInitWidth < MIN_SCALE) {\n            return;\n        }\n\n        mMatrix.postScale(scale, scale, mDstRect.centerX(),\n                mDstRect.centerY());\n\n        RectUtil.scaleRect(mDstRect, scale);\n\n        mFrameRect.set(mDstRect);\n        updateFrameRect();\n\n        mScaleAndRotateHandleDstRect.offsetTo(mFrameRect.right - BUTTON_WIDTH, mFrameRect.bottom\n                - BUTTON_WIDTH);\n        mDeleteHandleDstRect.offsetTo(mFrameRect.left - BUTTON_WIDTH, mFrameRect.top\n                - BUTTON_WIDTH);\n\n        double cos = (xa * xb + ya * yb) / (srcLen * curLen);\n        if (cos > 1 || cos < -1)\n            return;\n        float angle = (float) Math.toDegrees(Math.acos(cos));\n\n        float calMatrix = xa * yb - xb * ya;\n\n        int flag = calMatrix > 0 ? 1 : -1;\n        angle = flag * angle;\n\n        mRotateAngle += angle;\n        mMatrix.postRotate(angle, mDstRect.centerX(),\n                mDstRect.centerY());\n\n        RectUtil.rotateRect(mScaleAndRotateHandleDstRect, mDstRect.centerX(),\n                mDstRect.centerY(), mRotateAngle);\n        RectUtil.rotateRect(mDeleteHandleDstRect, mDstRect.centerX(),\n                mDstRect.centerY(), mRotateAngle);\n\n        Log.i(\"Sticker\", \"Scale = \" + MatrixUtil.getScale(mMatrix) + \"\\n\" +\n                \"Angle = \" + MatrixUtil.getAngle(mMatrix));\n    }\n\n    public void draw(@NonNull Canvas canvas) {\n        canvas.drawBitmap(mBitmap, mMatrix, mPaint);\n\n        if (mIsDrawHelperFrame) drawHelperFrame(canvas);\n    }\n\n    private void drawHelperFrame(Canvas canvas) {\n        canvas.save();\n        canvas.rotate(mRotateAngle, mFrameRect.centerX(), mFrameRect.centerY());\n\n        canvas.drawRect(mFrameRect, mHelperFramePaint);\n        canvas.restore();\n\n        int offsetValue = ((int) mDeleteHandleDstRect.width()) >> 1;\n\n        mDeleteHandleDstRect.offsetTo(\n                mFrameRect.left - offsetValue,\n                mFrameRect.top - offsetValue\n        );\n\n        mScaleAndRotateHandleDstRect.offsetTo(\n                mFrameRect.right - offsetValue,\n                mFrameRect.bottom - offsetValue\n        );\n\n        mTransparencyHandleDstRect.offsetTo(\n                mFrameRect.right - offsetValue,\n                mFrameRect.top - offsetValue\n        );\n\n        mFrontHandleDstRect.offsetTo(\n                mFrameRect.left - offsetValue,\n                mFrameRect.bottom - offsetValue\n        );\n\n        RectUtil.rotateRect(mDeleteHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        RectUtil.rotateRect(mTransparencyHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        RectUtil.rotateRect(mScaleAndRotateHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        RectUtil.rotateRect(mFrontHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        canvas.drawBitmap(mEditorFrame.getDeleteHandleBitmap(),\n                mDeleteHandleSrcRect,\n                mDeleteHandleDstRect,\n                null);\n\n        canvas.drawBitmap(mEditorFrame.getTransparencyHandleBitmap(),\n                mTransparencyHandleSrcRect,\n                mTransparencyHandleDstRect,\n                null);\n\n        canvas.drawBitmap(mEditorFrame.getResizeHandleBitmap(),\n                mScaleAndRotateHandleSrcRect,\n                mScaleAndRotateHandleDstRect,\n                null);\n\n        canvas.drawBitmap(mEditorFrame.getFrontHandleBitmap(),\n                mFrontHandleSrcRect,\n                mFrontHandleDstRect,\n                null);\n    }\n\n    public boolean isInside(MotionEvent event) {\n        return mDstRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInDeleteHandleButton(MotionEvent event) {\n        return mDeleteHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInScaleAndRotateHandleButton(MotionEvent event) {\n        return mScaleAndRotateHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInFrontHandleButton(MotionEvent event) {\n        return mFrontHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInTransparencyHandleButton(MotionEvent event) {\n        return mTransparencyHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public Paint getPaint() {\n        return mPaint;\n    }\n\n    public void setHelpFrameEnabled(boolean enabled) {\n        mIsDrawHelperFrame = enabled;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorText.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.Paint;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.graphics.Typeface;\nimport android.support.annotation.NonNull;\nimport android.text.TextPaint;\nimport android.view.MotionEvent;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Text;\nimport net.iquesoft.iquephoto.utils.RectUtil;\nimport net.iquesoft.iquephoto.utils.SizeUtil;\n\nimport javax.inject.Inject;\n\nimport static net.iquesoft.iquephoto.core.model.EditorFrame.EDITOR_FRAME_PADDING;\n\npublic class EditorText {\n    static final int DEFAULT_COLOR = Color.BLACK;\n    private static final float DEFAULT_TEXT_SIZE = 120;\n\n    private String mText;\n\n    private int mColor;\n    private int mOpacity = 255;\n\n    private float mX;\n    private float mY;\n\n    private float mScale = 1;\n\n    private float mRotateAngle = 0;\n\n    private boolean mIsDrawHelperFrame = true;\n\n    private Typeface mTypeface;\n\n    private Paint mHelperFramePaint;\n    private TextPaint mTextPaint;\n\n    private Rect mTextRect;\n\n    private Rect mDeleteHandleSrcRect;\n    private Rect mFrontHandleSrcRect;\n    private Rect mTransparencyHandleSrcRect;\n    private Rect mResizeAndScaleHandleSrcRect;\n\n    private RectF mFrameRect;\n\n    private RectF mDeleteHandleDstRect;\n    private RectF mFrontHandleDstRect;\n    private RectF mTransparencyHandleDstRect;\n    private RectF mResizeAndScaleHandleDstRect;\n\n    @Inject\n    EditorFrame mEditorFrame;\n\n    public EditorText(Text text) {\n        mText = text.getText();\n\n        mTypeface = text.getTypeface();\n\n        mColor = text.getColor();\n\n        App.getAppComponent().inject(this);\n\n        mHelperFramePaint = new Paint(mEditorFrame.getFramePaint());\n\n        initTextPaint();\n        initEditorText();\n    }\n\n    private void initEditorText() {\n        mTextRect = new Rect();\n        mFrameRect = new RectF();\n\n        mTransparencyHandleSrcRect = new Rect(0, 0, mEditorFrame.getDeleteHandleBitmap().getWidth(),\n                mEditorFrame.getDeleteHandleBitmap().getHeight());\n        mDeleteHandleSrcRect = new Rect(0, 0, mEditorFrame.getResizeHandleBitmap().getWidth(),\n                mEditorFrame.getResizeHandleBitmap().getHeight());\n        mResizeAndScaleHandleSrcRect = new Rect(0, 0, mEditorFrame.getTransparencyHandleBitmap().getWidth(),\n                mEditorFrame.getTransparencyHandleBitmap().getHeight());\n        mFrontHandleSrcRect = new Rect(0, 0, mEditorFrame.getFrontHandleBitmap().getWidth(),\n                mEditorFrame.getFrontHandleBitmap().getHeight());\n\n        int handleHalfSize = mEditorFrame.getDeleteHandleBitmap().getWidth() / 2;\n\n        mDeleteHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n        mResizeAndScaleHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n        mFrontHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n        mTransparencyHandleDstRect = new RectF(0, 0, handleHalfSize << 1, handleHalfSize << 1);\n    }\n\n    private void initTextPaint() {\n        mTextPaint = new TextPaint();\n        mTextPaint.setAntiAlias(true);\n        mTextPaint.setColor(mColor);\n        mTextPaint.setAlpha(mOpacity);\n\n        mTextPaint.setTextSize(SizeUtil.dp2px(DEFAULT_TEXT_SIZE));\n        mTextPaint.setTypeface(mTypeface);\n        mTextPaint.setTextAlign(Paint.Align.CENTER);\n    }\n\n    public void draw(@NonNull Canvas canvas) {\n        mTextPaint.getTextBounds(mText, 0, mText.length(), mTextRect);\n\n        mTextRect.offset((int) mX - (mTextRect.width() >> 1), (int) mY);\n\n        mFrameRect.set(mTextRect.left - SizeUtil.dp2px(EDITOR_FRAME_PADDING), mTextRect.top - SizeUtil.dp2px(EDITOR_FRAME_PADDING),\n                mTextRect.right + SizeUtil.dp2px(EDITOR_FRAME_PADDING), mTextRect.bottom + SizeUtil.dp2px(EDITOR_FRAME_PADDING));\n\n        RectUtil.scaleRect(mFrameRect, mScale);\n\n        canvas.save();\n        canvas.scale(mScale, mScale, mFrameRect.centerX(), mFrameRect.centerY());\n        canvas.rotate(mRotateAngle, mFrameRect.centerX(), mFrameRect.centerY());\n        canvas.drawText(mText, mX, mY, mTextPaint);\n        canvas.restore();\n\n        if (mIsDrawHelperFrame) {\n            drawHelperFrame(canvas);\n        }\n    }\n\n    private void drawHelperFrame(Canvas canvas) {\n        int offsetValue = ((int) mDeleteHandleDstRect.width()) >> 1;\n\n        mDeleteHandleDstRect.offsetTo(mFrameRect.left - offsetValue, mFrameRect.top - offsetValue);\n        mResizeAndScaleHandleDstRect.offsetTo(mFrameRect.right - offsetValue, mFrameRect.bottom - offsetValue);\n        mTransparencyHandleDstRect.offsetTo(mFrameRect.right - offsetValue, mFrameRect.top - offsetValue);\n        mFrontHandleDstRect.offsetTo(mFrameRect.left - offsetValue, mFrameRect.bottom - offsetValue);\n\n        RectUtil.rotateRect(mDeleteHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        RectUtil.rotateRect(mTransparencyHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        RectUtil.rotateRect(mResizeAndScaleHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        RectUtil.rotateRect(mFrontHandleDstRect, mFrameRect.centerX(),\n                mFrameRect.centerY(), mRotateAngle);\n\n        canvas.save();\n        canvas.rotate(mRotateAngle, mFrameRect.centerX(), mFrameRect.centerY());\n        canvas.drawRect(mFrameRect, mHelperFramePaint);\n        canvas.restore();\n\n        canvas.drawBitmap(mEditorFrame.getDeleteHandleBitmap(),\n                mDeleteHandleSrcRect, mDeleteHandleDstRect, null);\n        canvas.drawBitmap(mEditorFrame.getTransparencyHandleBitmap(),\n                mTransparencyHandleSrcRect, mTransparencyHandleDstRect, null);\n        canvas.drawBitmap(mEditorFrame.getResizeHandleBitmap(),\n                mResizeAndScaleHandleSrcRect, mResizeAndScaleHandleDstRect, null);\n        canvas.drawBitmap(mEditorFrame.getFrontHandleBitmap(),\n                mFrontHandleSrcRect, mFrontHandleDstRect, null);\n    }\n\n    public void setX(float x) {\n        mX = x;\n    }\n\n    public void setY(float y) {\n        mY = y;\n    }\n\n    public float getX() {\n        return mX;\n    }\n\n    public float getY() {\n        return mY;\n    }\n\n    public RectF getRotateAndScaleHandleDstRect() {\n        return mResizeAndScaleHandleDstRect;\n    }\n\n    public RectF getResizeHandleDstRect() {\n        return mResizeAndScaleHandleDstRect;\n    }\n\n    public void setHelperFrameOpacity() {\n        mHelperFramePaint.setAlpha(255);\n    }\n\n    public void resetHelperFrameOpacity() {\n        mHelperFramePaint.set(mEditorFrame.getFramePaint());\n    }\n\n    public void updateRotateAndScale(float distanceX, float distanceY) {\n        float frameCenterX = mFrameRect.centerX();\n        float frameCenterY = mFrameRect.centerY();\n\n        float handleCenterX = mResizeAndScaleHandleDstRect.centerX();\n        float handleCenterY = mResizeAndScaleHandleDstRect.centerY();\n\n        float newX = handleCenterX + distanceX;\n        float newY = handleCenterY + distanceY;\n\n        float xa = handleCenterX - frameCenterX;\n        float ya = handleCenterY - frameCenterY;\n\n        float xb = newX - frameCenterX;\n        float yb = newY - frameCenterY;\n\n        float sourceLength = (float) Math.sqrt(Math.pow(xa, 2) + Math.pow(ya, 2));\n        float currentLength = (float) Math.sqrt(Math.pow(xb, 2) + Math.pow(yb, 2));\n\n        float scale = currentLength / sourceLength;\n\n        mScale *= scale;\n\n        float newWidth = mFrameRect.width() * mScale;\n\n        if (newWidth < 70) {\n            mScale /= scale;\n            return;\n        }\n\n        double cos = (xa * xb + ya * yb) / (sourceLength * currentLength);\n\n        if (cos > 1 || cos < -1) return;\n\n        float angle = (float) Math.toDegrees(Math.acos(cos));\n        float calMatrix = xa * yb - xb * ya;\n\n        int flag = calMatrix > 0 ? 1 : -1;\n        angle = flag * angle;\n\n        mRotateAngle += angle;\n    }\n\n    public boolean isInside(MotionEvent event) {\n        return mFrameRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInDeleteHandleButton(MotionEvent event) {\n        return mDeleteHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInFrontHandleButton(MotionEvent event) {\n        return mFrontHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    // TODO: Stickers transparency.\n    public boolean isInTransparencyHandleButton(MotionEvent event) {\n        return mTransparencyHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public boolean isInResizeAndScaleHandleButton(MotionEvent event) {\n        return mResizeAndScaleHandleDstRect.contains(event.getX(), event.getY());\n    }\n\n    public void setHelpFrameEnabled(boolean enabled) {\n        mIsDrawHelperFrame = enabled;\n    }\n\n    public Paint getPaint() {\n        return mTextPaint;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorTiltShift.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.RectF;\nimport android.view.MotionEvent;\n\npublic interface EditorTiltShift {\n\n    void initialize(Context context);\n\n    void draw(Canvas canvas, Bitmap bitmap, Matrix matrix, Paint paint);\n\n    void updateRect(RectF bitmapRect);\n\n    void updateGradientRect();\n\n    void updateGradientShader(float value, final Paint paint);\n\n    void updateGradientMatrix(RectF rectF);\n\n    void actionMove(MotionEvent event);\n\n    void actionDown(MotionEvent event);\n\n    void actionPointerDown(MotionEvent event);\n\n    void actionUp();\n\n    void actionPointerUp();\n\n    void setPaintAlpha(int value);\n\n    int getPaintAlpha();\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/core/model/EditorVignette.java",
    "content": "package net.iquesoft.iquephoto.core.model;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.DashPathEffect;\nimport android.graphics.Matrix;\nimport android.graphics.Paint;\nimport android.graphics.PorterDuff;\nimport android.graphics.PorterDuffXfermode;\nimport android.graphics.RadialGradient;\nimport android.graphics.RectF;\nimport android.graphics.Shader;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\nimport android.view.MotionEvent;\n\nimport net.iquesoft.iquephoto.core.enums.EditorMode;\nimport net.iquesoft.iquephoto.utils.LogHelper;\nimport net.iquesoft.iquephoto.utils.MatrixUtil;\nimport net.iquesoft.iquephoto.utils.MotionEventUtil;\nimport net.iquesoft.iquephoto.utils.RectUtil;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorMode.*;\n\npublic class EditorVignette {\n    private static final String TAG = \"Vignette\";\n    private static final int FADEOUT_DELAY = 3000;\n\n    private float mFeather = 0.7f;\n\n    private float mPreX;\n    private float mPreY;\n\n    private int mViewWidth;\n    private int mViewHeight;\n\n    private float mPreDistance;\n\n    private float mGradientInset = 100;\n    private float mControlPointTolerance = 20;\n\n    private boolean mIsShowHelpOval = true;\n\n    private Paint mPaint = new Paint();\n    private Paint mShaderPaint;\n    private Paint mVignettePaint;\n    private Paint mVignetteControlPaint;\n\n    private RectF mBitmapRect = new RectF();\n    private RectF mVignetteRect;\n    private RectF mTempVignetteRect = new RectF();\n    private RectF mVignetteControlRect = new RectF();\n\n    private RadialGradient mRadialGradient;\n\n    private Matrix mGradientMatrix;\n\n    private EditorMode mMode = NONE;\n\n    public EditorVignette(int viewWidth, int viewHeight) {\n        mViewWidth = viewWidth;\n        mViewHeight = viewHeight;\n\n        initializeVignette();\n    }\n\n    private void initializeVignette() {\n        mVignetteControlPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mVignetteControlPaint.setColor(Color.WHITE);\n        mVignetteControlPaint.setStrokeWidth(5f);\n        mVignetteControlPaint.setStyle(Paint.Style.STROKE);\n        mVignetteControlPaint.setAlpha(125);\n        mVignetteControlPaint.setDither(true);\n        mVignetteControlPaint.setPathEffect(\n                new DashPathEffect(\n                        new float[]{10, 20}, 0)\n        );\n\n        mVignettePaint = new Paint();\n        mVignettePaint.setAntiAlias(true);\n        mVignettePaint.setFilterBitmap(false);\n        mVignettePaint.setDither(true);\n\n        mGradientMatrix = new Matrix();\n        mVignetteRect = new RectF();\n\n        updateMask(55);\n\n        mShaderPaint = new Paint();\n        mShaderPaint.setAntiAlias(true);\n        mShaderPaint.setFilterBitmap(false);\n        mShaderPaint.setDither(true);\n        mShaderPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));\n\n        updateGradientShader(mFeather, mShaderPaint);\n\n        mControlPointTolerance = mControlPointTolerance * 1.5f;\n\n        mGradientInset = 0;\n    }\n\n    public void updateMask(int value) {\n        if (value >= 0) {\n            mVignettePaint.setColor(Color.BLACK);\n        } else {\n            mVignettePaint.setColor(Color.WHITE);\n        }\n\n        value = Math.max(Math.min(Math.abs(value), 100), 0);\n        value *= 2.55;\n\n        mVignetteControlPaint.setAlpha(125);\n        mVignettePaint.setAlpha(value);\n    }\n\n    private void updateGradientShader(float value, final Paint paint) {\n        mFeather = value;\n\n        final int[] colors = new int[]{0xff000000, 0xff000000, 0};\n        final float[] anchors = new float[]{0, mFeather, 1};\n\n        mRadialGradient = new android.graphics.RadialGradient(\n                0, 0, 1, colors, anchors, Shader.TileMode.CLAMP\n        );\n        paint.setShader(mRadialGradient);\n        updateGradientMatrix(mVignetteRect);\n    }\n\n    private void updateGradientMatrix(RectF rectF) {\n        mGradientMatrix.reset();\n        mGradientMatrix.postTranslate(rectF.centerX(), rectF.centerY());\n        mGradientMatrix.postScale(rectF.width() / 2, rectF.height() / 2, rectF.centerX(), rectF.centerY());\n        mRadialGradient.setLocalMatrix(mGradientMatrix);\n    }\n\n    /**\n     * Reset the Vignette Rect when Tool changed.\n     */\n    public void updateRect(RectF bitmapRect) {\n        mVignetteRect.set(bitmapRect);\n        mVignetteRect.inset(mControlPointTolerance, mControlPointTolerance);\n\n        mBitmapRect.set(bitmapRect);\n\n        Log.i(TAG, \"Is Reset!\");\n\n        updateGradientMatrix(mVignetteRect);\n    }\n\n    /**\n     * @param canvas is a view canvas if you want to draw on image canvas call prepareToDraw().\n     */\n    public void draw(@NonNull Canvas canvas) {\n        if (!mVignetteRect.isEmpty()) {\n            canvas.saveLayer(mBitmapRect, mPaint, Canvas.CLIP_TO_LAYER_SAVE_FLAG);\n\n            mVignetteControlRect.set(mVignetteRect);\n            mVignetteControlRect.inset(-mGradientInset, -mGradientInset);\n\n            canvas.drawRect(mBitmapRect, mVignettePaint);\n            canvas.drawOval(mVignetteControlRect, mShaderPaint);\n\n            canvas.restore();\n\n            if (mIsShowHelpOval) {\n                mVignetteControlRect.inset(50, 50);\n                canvas.drawOval(mVignetteControlRect, mVignetteControlPaint);\n            }\n        }\n    }\n\n    public void actionDown(MotionEvent motionEvent) {\n        mMode = MOVE;\n\n        Log.i(TAG, \"Action: Down \\n\" +\n                \"Mode: \" + mMode.name());\n\n        mPreX = motionEvent.getX();\n        mPreY = motionEvent.getY();\n    }\n\n    public void actionPointerDown(MotionEvent event) {\n        if (event.getPointerCount() == 2) {\n            float angle = MotionEventUtil.getAngle(event);\n\n            if (angle < 0) {\n                angle += 180;\n            }\n\n            if (angle > 36 && angle < 72 || angle > 108 && angle < 144) {\n                mPreDistance = MotionEventUtil.getDelta(event);\n                mMode = ROTATE_AND_SCALE;\n            } else if (angle >= 72 && angle <= 108) {\n                mMode = RESIZE_HEIGHT;\n            } else {\n                mMode = RESIZE_WIDTH;\n            }\n\n            Log.i(TAG, \"Action: Pointer Down\" + \"\\n\"\n                    + \"Angle: \" + String.valueOf(angle) + \"\\n\"\n                    + \"Mode: \" + mMode.name());\n        }\n    }\n\n    public void actionMove(MotionEvent event) {\n        mTempVignetteRect.set(mVignetteRect);\n\n        float distanceX = event.getX() - mPreX;\n        float distanceY = event.getY() - mPreY;\n\n        Log.i(TAG, \"Action: Move \\n\" +\n                \"Mode: \" + mMode.name());\n\n        switch (mMode) {\n            case MOVE:\n                mTempVignetteRect.offset(distanceX, distanceY);\n                break;\n            case ROTATE_AND_SCALE:\n                float dist = MotionEventUtil.getDelta(event);\n                float displayDistance = MotionEventUtil.getDisplayDistance(\n                        mViewWidth,\n                        mViewHeight\n                );\n\n                float scale = ((dist - mPreDistance) / displayDistance);\n\n                mPreDistance = dist;\n\n                scale += 1;\n                scale *= scale;\n\n                RectUtil.scaleRect(mTempVignetteRect, scale);\n                break;\n            case RESIZE_HEIGHT:\n                mTempVignetteRect.inset(0, distanceY);\n                break;\n            case RESIZE_WIDTH:\n                mTempVignetteRect.inset(-distanceX, 0);\n                break;\n        }\n\n        if (mTempVignetteRect.width() > mControlPointTolerance\n                && mTempVignetteRect.height() > mControlPointTolerance) {\n            if (isVignetteInRect()) {\n                mVignetteRect.set(mTempVignetteRect);\n\n                mPreX = event.getX();\n                mPreY = event.getY();\n            }\n\n            updateGradientMatrix(mVignetteRect);\n        }\n    }\n\n    public void actionUp() {\n        mMode = NONE;\n        Log.i(TAG, \"Action: Up \\n\" +\n                \"Mode: \" + mMode.name());\n    }\n\n    public void actionPointerUp() {\n        mMode = MOVE;\n        Log.i(TAG, \"Action: Pointer Up \\n\" +\n                \"Mode: \" + mMode.name());\n    }\n\n    public void prepareToDraw(@NonNull Canvas canvas, @NonNull Matrix matrix) {\n        LogHelper.logRect(\"Vignette - before\", mVignetteRect);\n\n        float scale = MatrixUtil.getScale(matrix);\n\n        float x = MatrixUtil.getMatrixX(matrix);\n        float y = MatrixUtil.getMatrixY(matrix);\n\n        float newLeft = (mVignetteRect.left - x) / scale;\n        float newTop = (mVignetteRect.top - y) / scale;\n\n        mVignetteRect.offsetTo(newLeft, newTop);\n\n        mVignetteRect.right /= scale;\n        mVignetteRect.bottom /= scale;\n\n        updateGradientMatrix(mVignetteRect);\n\n        mIsShowHelpOval = false;\n\n        mBitmapRect.set(0, 0, canvas.getWidth(), canvas.getHeight()); // To save layer.\n\n        LogHelper.logRect(\"Vignette - after\", mVignetteRect);\n    }\n\n    private boolean isVignetteInRect() {\n        return mBitmapRect.contains(\n                mTempVignetteRect.centerX(),\n                mTempVignetteRect.centerY()\n        );\n    }\n\n    public void setHelpOvalEnabled(boolean enabled) {\n        mIsShowHelpOval = enabled;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/di/AppComponent.java",
    "content": "package net.iquesoft.iquephoto.di;\n\nimport android.content.Context;\n\nimport net.iquesoft.iquephoto.core.model.EditorSticker;\nimport net.iquesoft.iquephoto.core.model.EditorText;\nimport net.iquesoft.iquephoto.di.modules.AppModule;\nimport net.iquesoft.iquephoto.di.modules.EditorModule;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.AdjustPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.ColorsPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.DrawingPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.FiltersPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.FontsPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.FramesPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.OverlaysPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.StickersPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.StickersSetPresenter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.ToolsPresenter;\nimport net.iquesoft.iquephoto.ui.dialogs.FontPickerDialog;\n\nimport javax.inject.Singleton;\n\nimport dagger.Component;\n\n@Singleton\n@Component(modules = {AppModule.class, EditorModule.class})\npublic interface AppComponent {\n    Context getContext();\n\n    void inject(ToolsPresenter toolsPresenter);\n\n    void inject(AdjustPresenter adjustPresenter);\n\n    void inject(FiltersPresenter filtersPresenter);\n\n    void inject(OverlaysPresenter overlaysPresenter);\n\n    void inject(FramesPresenter framesPresenter);\n\n    void inject(StickersSetPresenter stickersSetPresenter);\n\n    void inject(StickersPresenter stickersPresenter);\n\n    void inject(ColorsPresenter colorsPresenter);\n\n    void inject(DrawingPresenter drawingPresenter);\n\n    void inject(FontsPresenter fontsPresenter);\n\n    void inject(FontPickerDialog fontPickerDialog);\n\n    void inject(EditorSticker editorSticker);\n\n    void inject(EditorText editorText);\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/di/modules/AppModule.java",
    "content": "package net.iquesoft.iquephoto.di.modules;\n\nimport android.content.Context;\n\nimport javax.inject.Singleton;\n\nimport dagger.Module;\nimport dagger.Provides;\n\n@Module\npublic class AppModule {\n    private Context mContext;\n\n    public AppModule(Context context) {\n        mContext = context;\n    }\n\n    @Provides\n    @Singleton\n    Context provideContext() {\n        return mContext;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/di/modules/EditorModule.java",
    "content": "package net.iquesoft.iquephoto.di.modules;\n\nimport android.graphics.ColorMatrix;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.model.EditorFrame;\nimport net.iquesoft.iquephoto.models.Adjust;\nimport net.iquesoft.iquephoto.models.BrushSize;\nimport net.iquesoft.iquephoto.models.EditorColor;\nimport net.iquesoft.iquephoto.models.Filter;\nimport net.iquesoft.iquephoto.models.Font;\nimport net.iquesoft.iquephoto.models.Frame;\nimport net.iquesoft.iquephoto.models.Overlay;\nimport net.iquesoft.iquephoto.models.Sticker;\nimport net.iquesoft.iquephoto.models.StickersSet;\nimport net.iquesoft.iquephoto.models.Tool;\nimport net.iquesoft.iquephoto.ui.fragments.ImageAdjustmentFragment;\nimport net.iquesoft.iquephoto.ui.fragments.TextFragment;\nimport net.iquesoft.iquephoto.ui.fragments.AdjustFragment;\nimport net.iquesoft.iquephoto.ui.fragments.DrawingFragment;\nimport net.iquesoft.iquephoto.ui.fragments.FiltersFragment;\nimport net.iquesoft.iquephoto.ui.fragments.FramesFragment;\nimport net.iquesoft.iquephoto.ui.fragments.OverlaysFragment;\nimport net.iquesoft.iquephoto.ui.fragments.StickersSetFragment;\nimport net.iquesoft.iquephoto.ui.fragments.TiltShiftFragment;\nimport net.iquesoft.iquephoto.ui.fragments.TransformFragment;\n\nimport java.util.Arrays;\nimport java.util.List;\n\nimport dagger.Module;\nimport dagger.Provides;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.BRIGHTNESS;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.CONTRAST;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.SATURATION;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.VIGNETTE;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.WARMTH;\n\n@Module\npublic class EditorModule {\n    @Provides\n    List<Tool> provideTools() {\n        return Arrays.asList(\n                new Tool(R.string.filters, R.drawable.ic_filter_white_50dp, FiltersFragment.newInstance()),\n                new Tool(R.string.adjust, R.drawable.ic_adjust_white_50dp, new AdjustFragment()),\n                new Tool(R.string.overlay, R.drawable.ic_overlay_white_50dp, new OverlaysFragment()),\n                new Tool(R.string.stickers, R.drawable.ic_stiker_white_50dp, new StickersSetFragment()),\n                new Tool(R.string.frames, R.drawable.ic_frame_white_50dp, new FramesFragment()),\n                new Tool(R.string.transform, R.drawable.ic_transform_white_50dp, new TransformFragment()),\n                new Tool(R.string.vignette, R.drawable.ic_vignette_white_50dp, ImageAdjustmentFragment.newInstance(VIGNETTE)),\n                new Tool(R.string.tilt_shift, R.drawable.ic_tilt_shift_white_50dp, new TiltShiftFragment()),\n                new Tool(R.string.drawing, R.drawable.ic_drawing_white_50dp, new DrawingFragment()),\n                new Tool(R.string.text, R.drawable.ic_letters_white_50dp, new TextFragment())\n        );\n    }\n\n    @Provides\n    List<Filter> provideFilters() {\n        return Arrays.asList(\n                new Filter(\"F02\", new ColorMatrix(new float[]{\n                        1, 0, 0, 0, 0,\n                        0, 1, 0, 0, 0,\n                        0.50f, 0, 1, 0, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F03\", new ColorMatrix(new float[]{\n                        1.5f, 0, 0, 0, -40,\n                        0, 1.5f, 0, 0, -40,\n                        0, 0, 1.5f, 0, -40,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F01\", new ColorMatrix(new float[]{\n                        2, -1, 0, 0, 0,\n                        -1, 2, 0, 0, 0,\n                        0, -1, 2, 0, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F12\", new ColorMatrix(new float[]{ // TechColor mMatrix\n                        1.9125277891456083f, -0.8545344976951645f, -0.09155508482755585f, 0, 11.793603434377337f,\n                        -0.3087833385928097f, 1.7658908555458428f, -0.10601743074722245f, 0, -70.35205161461398f,\n                        -0.231103377548616f, -0.7501899197440212f, 1.847597816108189f, 0, 30.950940869491138f,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F04\", new ColorMatrix(new float[]{\n                        1, 0, 0, 0.2f, 0,\n                        0, 1, 0, 0, 0,\n                        0, 0, 1, 0.2f, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F05\", new ColorMatrix(new float[]{\n                        1, 0, 0, 0, 0,\n                        0, 1.25f, 0, 0, 0,\n                        0, 0, 0, 0.5f, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F06\", new ColorMatrix(new float[]{\n                        1, 0, 0, 0, 0,\n                        0, 0.5f, 0, 0, 0,\n                        0, 0, 0, 0.5f, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F07\", new ColorMatrix(new float[]{\n                        1, 0, 0, 0, 0,\n                        0, 0, 0, 0, 0,\n                        0, 0, 1, 1, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F08\", new ColorMatrix(new float[]{ // Polaroid mMatrix\n                        1.438f, -0.062f, -0.062f, 0, 0,\n                        -0.122f, 1.378f, -0.122f, 0, 0,\n                        -0.016f, -0.016f, 1.483f, 0, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F09\", new ColorMatrix(new float[]{ // CodaChrome mMatrix\n                        1.1285582396593525f, -0.3967382283601348f, -0.03992559172921793f, 0, 63.72958762196502f,\n                        -0.16404339962244616f, 1.0835251566291304f, -0.05498805115633132f, 0, 24.732407896706203f,\n                        -0.16786010706155763f, -0.5603416277695248f, 1.6014850761964943f, 0, 35.62982807460946f,\n                        0, 0, 0, 1, 0})),\n\n                new Filter(\"F10\", new ColorMatrix(new float[]{ // LSD mMatrix\n                        2, -0.4f, 0.5f, 0, 0,\n                        -0.5f, 2, -0.4f, 0, 0,\n                        -0.4f, -0.5f, 3, 0, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F11\", new ColorMatrix(new float[]{ // Vintage mMatrix\n                        0.6279345635605994f, 0.3202183420819367f, -0.03965408211312453f, 0, 9.651285835294123f,\n                        0.02578397704808868f, 0.6441188644374771f, 0.03259127616149294f, 0, 7.462829176470591f,\n                        0.0466055556782719f, -0.0851232987247891f, 0.5241648018700465f, 0, 5.159190588235296f,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"F13\", new ColorMatrix(new float[]{ // Browni mMatrix\n                        0.5997023498159715f, 0.34553243048391263f, -0.2708298674538042f, 0, 47.43192855600873f,\n                        -0.037703249837783157f, 0.8609577587992641f, 0.15059552388459913f, 0, -36.96841498319127f,\n                        0.24113635128153335f, -0.07441037908422492f, 0.44972182064877153f, 0, -7.562075277591283f,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"BW01\", new ColorMatrix(new float[]{\n                        1, 0, 0, 0, 0,\n                        1, 0, 0, 0, 0,\n                        1, 0, 0, 0, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"BW02\", new ColorMatrix(new float[]{\n                        0, 1, 0, 0, 0,\n                        0, 1, 0, 0, 0,\n                        0, 1, 0, 0, 0,\n                        0, 0, 0, 1, 0})),\n                new Filter(\"BW03\", new ColorMatrix(new float[]{\n                        0, 0, 1, 0, 0,\n                        0, 0, 1, 0, 0,\n                        0, 0, 1, 0, 0,\n                        0, 0, 0, 1, 0}))\n        );\n    }\n\n    @Provides\n    List<Adjust> provideAdjust() {\n        return Arrays.asList(\n                new Adjust(R.string.brightness, R.drawable.ic_brightness,\n                        ImageAdjustmentFragment.newInstance(BRIGHTNESS)),\n                new Adjust(R.string.contrast, R.drawable.ic_contrast,\n                        ImageAdjustmentFragment.newInstance(CONTRAST)),\n                new Adjust(R.string.saturation, R.drawable.ic_saturation,\n                        ImageAdjustmentFragment.newInstance(SATURATION)),\n                new Adjust(R.string.warmth, R.drawable.ic_warmth,\n                        ImageAdjustmentFragment.newInstance(WARMTH))\n                //  TODO: new Adjust(R.string.shadows, R.drawable.ic_shadows, ),\n                // TODO: new Adjust(R.string.tint, R.drawable.ic_fade, TINT, ),\n                // TODO: new Adjust(R.string.exposure, R.drawable.ic_exposure, EXPOSURE, ),\n                // TODO: new Adjust(R.string.fade, R.drawable.ic_fade, )\n        );\n    }\n\n    @Provides\n    List<StickersSet> provideStickersSet() {\n        return Arrays.asList(\n                new StickersSet(R.string.emoji, R.drawable.s_emoji_02, getEmojiStickers()),\n                new StickersSet(R.string.flags, R.drawable.s_flags, getFlagsStickers()),\n                new StickersSet(R.string.christmas, R.drawable.s_christmas_01, getChristmasStickers()),\n                new StickersSet(R.string.valentines_day, R.drawable.s_valentines_day_01, getValentinesDayStickers())\n        );\n    }\n\n    @Provides\n    List<Overlay> provideOverlays() {\n        return Arrays.asList(\n                new Overlay(\"D01\", R.drawable.overlay_dust_02),\n                new Overlay(\"D02\", R.drawable.overlay_dust_03),\n                new Overlay(\"FD01\", R.drawable.overlay_fd_01),\n                new Overlay(\"FD02\", R.drawable.overlay_fd_02)\n        );\n    }\n\n    @Provides\n    List<Frame> provideFrames() {\n        return Arrays.asList(\n                new Frame(\"GRUNGE01\", R.drawable.frame_grunge_01),\n                new Frame(\"GRUNGE02\", R.drawable.frame_grunge_02),\n                new Frame(\"GRUNGE03\", R.drawable.frame_grunge_03),\n                new Frame(\"GRUNGE04\", R.drawable.frame_grunge_04),\n                new Frame(\"HL01\", R.drawable.frame_h_01)\n        );\n    }\n\n    @Provides\n    List<Font> provideFonts() {\n        return Arrays.asList(\n                new Font(\"Souses\", \"Souses.otf\"),\n                new Font(\"Black Sword\", \"Blacksword.otf\"),\n                new Font(\"Summer Hearts\", \"SummerHearts-Regular.otf\"),\n                new Font(\"Cigarettes & Coffee\", \"CigarettesAndCoffee.ttf\"),\n                new Font(\"Abys\", \"Abys-Regular.otf\"),\n                new Font(\"Reis\", \"REIS-Regular.ttf\"));\n    }\n\n    @Provides\n    List<EditorColor> provideColors() {\n        return Arrays.asList(\n                new EditorColor(R.color.white),\n                new EditorColor(R.color.black),\n                new EditorColor(R.color.brown),\n                new EditorColor(R.color.red),\n                new EditorColor(R.color.crimson),\n                new EditorColor(R.color.indian_red),\n                new EditorColor(R.color.khaki),\n                new EditorColor(R.color.yellow),\n                new EditorColor(R.color.gold),\n                new EditorColor(R.color.orange),\n                new EditorColor(R.color.green_yellow),\n                new EditorColor(R.color.spring_green),\n                new EditorColor(R.color.lime),\n                new EditorColor(R.color.olive_drab),\n                new EditorColor(R.color.aqua),\n                new EditorColor(R.color.sky_blue),\n                new EditorColor(R.color.blue),\n                new EditorColor(R.color.cyan),\n                new EditorColor(R.color.magenta),\n                new EditorColor(R.color.purple),\n                new EditorColor(R.color.dark_violet),\n                new EditorColor(R.color.indigo));\n    }\n\n    @Provides\n    List<BrushSize> provideSizes() {\n        return Arrays.asList(\n                new BrushSize(5f),\n                new BrushSize(7.5f),\n                new BrushSize(10f),\n                new BrushSize(12.5f),\n                new BrushSize(15f),\n                new BrushSize(17.5f),\n                new BrushSize(20f),\n                new BrushSize(22.5f),\n                new BrushSize(25f),\n                new BrushSize(27.5f)\n        );\n    }\n\n    @Provides\n    EditorFrame provideEditorFrame() {\n        return new EditorFrame(App.getAppComponent().getContext());\n    }\n\n    private List<Sticker> getEmojiStickers() {\n        return Arrays.asList(\n                new Sticker(R.drawable.s_emoji_01),\n                new Sticker(R.drawable.s_emoji_02),\n                new Sticker(R.drawable.s_emoji_03),\n                new Sticker(R.drawable.s_emoji_04),\n                new Sticker(R.drawable.s_emoji_05),\n                new Sticker(R.drawable.s_emoji_06),\n                new Sticker(R.drawable.s_emoji_07));\n    }\n\n    private List<Sticker> getFlagsStickers() {\n        return Arrays.asList(\n                new Sticker(R.drawable.s_flag_01),\n                new Sticker(R.drawable.s_flag_02),\n                new Sticker(R.drawable.s_flag_03),\n                new Sticker(R.drawable.s_flag_04),\n                new Sticker(R.drawable.s_flag_05),\n                new Sticker(R.drawable.s_flag_06));\n    }\n\n    private List<Sticker> getChristmasStickers() {\n        return Arrays.asList(\n                new Sticker(R.drawable.s_flag_01),\n                new Sticker(R.drawable.s_flag_02),\n                new Sticker(R.drawable.s_flag_03),\n                new Sticker(R.drawable.s_flag_04),\n                new Sticker(R.drawable.s_flag_05),\n                new Sticker(R.drawable.s_flag_06));\n    }\n\n    private List<Sticker> getValentinesDayStickers() {\n        return Arrays.asList(\n                new Sticker(R.drawable.s_valentines_day_01),\n                new Sticker(R.drawable.s_valentines_day_02),\n                new Sticker(R.drawable.s_valentines_day_03),\n                new Sticker(R.drawable.s_valentines_day_04));\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/graphics/CircleSizeDrawable.java",
    "content": "package net.iquesoft.iquephoto.graphics;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.Paint;\nimport android.graphics.PixelFormat;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.support.annotation.NonNull;\n\npublic class CircleSizeDrawable extends Drawable {\n    private float mSize;\n\n    private final Paint mPaint;\n\n    public CircleSizeDrawable(final float size) {\n        mSize = size;\n        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mPaint.setStrokeWidth(5f);\n        mPaint.setStyle(Paint.Style.STROKE);\n        mPaint.setColor(Color.GRAY);\n    }\n\n    @Override\n    public void draw(@NonNull final Canvas canvas) {\n        final Rect bounds = getBounds();\n        canvas.drawCircle(bounds.centerX(), bounds.centerY(), mSize, mPaint);\n    }\n\n    @Override\n    public void setAlpha(final int alpha) {\n        mPaint.setAlpha(alpha);\n    }\n\n    @Override\n    public void setColorFilter(final ColorFilter cf) {\n        mPaint.setColorFilter(cf);\n    }\n\n    @Override\n    public int getOpacity() {\n        return PixelFormat.TRANSLUCENT;\n    }\n\n    public void setSelected(boolean isSelected) {\n        if (isSelected) {\n            mPaint.setColor(Color.RED);\n        } else {\n            mPaint.setColor(Color.GRAY);\n        }\n\n        invalidateSelf();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/graphics/ColorCircleDrawable.java",
    "content": "package net.iquesoft.iquephoto.graphics;\n\nimport android.graphics.Canvas;\nimport android.graphics.Color;\nimport android.graphics.ColorFilter;\nimport android.graphics.Paint;\nimport android.graphics.PixelFormat;\nimport android.graphics.Rect;\nimport android.graphics.drawable.Drawable;\nimport android.support.annotation.NonNull;\n\npublic class ColorCircleDrawable extends Drawable {\n    private boolean mIsSelected;\n\n    private final Paint mPaint;\n    private final Paint mColorPaint;\n\n    public ColorCircleDrawable(final int color) {\n        mColorPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mColorPaint.setColor(color);\n\n        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);\n        mPaint.setColor(Color.LTGRAY);\n        mPaint.setAlpha(155);\n    }\n\n    @Override\n    public void draw(@NonNull final Canvas canvas) {\n        //final int mRadius = 40;\n        final Rect bounds = getBounds();\n\n        if (mIsSelected) {\n            canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.height() / 2, mPaint);\n        }\n\n        canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.height() / 3, mColorPaint);\n    }\n\n    @Override\n    public void setAlpha(final int alpha) {\n        mColorPaint.setAlpha(alpha);\n    }\n\n    @Override\n    public void setColorFilter(final ColorFilter cf) {\n        mColorPaint.setColorFilter(cf);\n    }\n\n    @Override\n    public int getOpacity() {\n        return PixelFormat.TRANSLUCENT;\n    }\n\n    public void setSelected(boolean isSelected) {\n        mIsSelected = isSelected;\n\n        invalidateSelf();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/graphics/SquareFrameLayout.java",
    "content": "package net.iquesoft.iquephoto.graphics;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.widget.FrameLayout;\n\npublic class SquareFrameLayout extends FrameLayout {\n    public SquareFrameLayout(Context context) {\n        super(context);\n    }\n\n    public SquareFrameLayout(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public SquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {\n        super(context, attrs, defStyleAttr);\n    }\n\n    @Override\n    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {\n        super.onMeasure(widthMeasureSpec, widthMeasureSpec);\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Adjust.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.support.annotation.DrawableRes;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.StringRes;\nimport android.support.v4.app.Fragment;\n\npublic class Adjust {\n    @StringRes\n    private int mTitle;\n\n    @DrawableRes\n    private int mIcon;\n\n    private Fragment mFragment;\n\n    public Adjust(@StringRes int title, @DrawableRes int icon, @NonNull Fragment fragment) {\n        mTitle = title;\n        mIcon = icon;\n        mFragment = fragment;\n    }\n\n    public int getTitle() {\n        return mTitle;\n    }\n\n    public int getIcon() {\n        return mIcon;\n    }\n\n    public Fragment getFragment() {\n        return mFragment;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/BrushSize.java",
    "content": "package net.iquesoft.iquephoto.models;\n\npublic class BrushSize {\n    private float mSize;\n\n    public BrushSize(float size) {\n        mSize = size;\n    }\n\n    public float getSize() {\n        return mSize;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/EditorColor.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.support.annotation.ColorRes;\n\nimport net.iquesoft.iquephoto.R;\n\nimport java.util.Arrays;\nimport java.util.List;\n\npublic class EditorColor {\n    @ColorRes\n    private int mColor;\n\n    public static List<EditorColor> getColorsList() {\n        return Arrays.asList(editorColors);\n    }\n\n    private static EditorColor[] editorColors = {\n            new EditorColor(R.color.brown),\n            new EditorColor(R.color.red),\n            new EditorColor(R.color.crimson),\n            new EditorColor(R.color.indian_red),\n            new EditorColor(R.color.khaki),\n            new EditorColor(R.color.yellow),\n            new EditorColor(R.color.gold),\n            new EditorColor(R.color.orange),\n            new EditorColor(R.color.green_yellow),\n            new EditorColor(R.color.spring_green),\n            new EditorColor(R.color.lime),\n            new EditorColor(R.color.olive_drab),\n            new EditorColor(R.color.aqua),\n            new EditorColor(R.color.sky_blue),\n            new EditorColor(R.color.blue),\n            new EditorColor(R.color.cyan),\n            new EditorColor(R.color.magenta),\n            new EditorColor(R.color.purple),\n            new EditorColor(R.color.dark_violet),\n            new EditorColor(R.color.indigo)\n\n    };\n\n    public EditorColor(@ColorRes int color) {\n        mColor = color;\n    }\n\n    public int getColor() {\n        return mColor;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Filter.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.graphics.ColorMatrix;\n\npublic class Filter {\n    private String mTitle;\n    private ColorMatrix mColorMatrix;\n\n    public Filter(String title, ColorMatrix colorMatrix) {\n        mTitle = title;\n        mColorMatrix = colorMatrix;\n    }\n\n    public String getTitle() {\n        return mTitle;\n    }\n\n    public ColorMatrix getColorMatrix() {\n        return mColorMatrix;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Font.java",
    "content": "package net.iquesoft.iquephoto.models;\n\npublic class Font {\n    private String mTitle;\n    private String mPath;\n\n    public Font(String title, String path) {\n        mTitle = title;\n        mPath = path;\n    }\n\n    public String getTitle() {\n        return mTitle;\n    }\n\n    public String getPath() {\n        return \"fonts/\" + mPath;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Frame.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.support.annotation.DrawableRes;\n\npublic class Frame {\n    private String mTitle;\n\n    @DrawableRes\n    private int mImage;\n\n    public Frame(String title, @DrawableRes int image) {\n        mTitle = title;\n        mImage = image;\n    }\n\n    public String getTitle() {\n        return mTitle;\n    }\n\n    public int getImage() {\n        return mImage;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Image.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.os.Parcel;\nimport android.os.Parcelable;\n\npublic class Image implements Parcelable {\n    private int mId;\n    private String mPath;\n\n    public Image(int id, String path) {\n        mId = id;\n        mPath = path;\n    }\n\n    public int getId() {\n        return mId;\n    }\n\n    public String getPath() {\n        return mPath;\n    }\n\n    protected Image(Parcel in) {\n        mId = in.readInt();\n        mPath = in.readString();\n    }\n\n    @Override\n    public int describeContents() {\n        return 0;\n    }\n\n    @Override\n    public void writeToParcel(Parcel dest, int flags) {\n        dest.writeInt(mId);\n        dest.writeString(mPath);\n    }\n\n    public static final Parcelable.Creator<Image> CREATOR = new Parcelable.Creator<Image>() {\n        @Override\n        public Image createFromParcel(Parcel in) {\n            return new Image(in);\n        }\n\n        @Override\n        public Image[] newArray(int size) {\n            return new Image[size];\n        }\n    };\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/ImageAlbum.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport java.util.ArrayList;\n\npublic class ImageAlbum {\n\n    private String mName;\n    private ArrayList<Image> mImages;// = new ArrayList<>();\n\n    public ImageAlbum(String name) {\n        mName = name;\n        mImages = new ArrayList<>();\n    }\n\n    public String getName() {\n        return mName;\n    }\n\n    public ArrayList<Image> getImages() {\n        return mImages;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Overlay.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.support.annotation.DrawableRes;\n\npublic class Overlay {\n    private String mTitle;\n\n    @DrawableRes\n    private int mImage;\n\n    public Overlay(String title, @DrawableRes int image) {\n        mTitle = title;\n        mImage = image;\n    }\n\n    public String getTitle() {\n        return mTitle;\n    }\n\n    public int getImage() {\n        return mImage;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/ParcelablePaint.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.graphics.Paint;\nimport android.os.Parcel;\nimport android.os.Parcelable;\nimport android.support.annotation.IntRange;\nimport android.support.annotation.NonNull;\n\npublic class ParcelablePaint implements Parcelable {\n    private Paint mPaint;\n\n    public ParcelablePaint(@NonNull Paint paint) {\n        mPaint = paint;\n    }\n\n    public Paint getPaint() {\n        return mPaint;\n    }\n\n    public void setAlpha(@IntRange(from = 0, to = 255) int value) {\n        mPaint.setAlpha(value);\n    }\n\n    protected ParcelablePaint(Parcel in) {\n        mPaint = (Paint) in.readValue(Paint.class.getClassLoader());\n    }\n\n    @Override\n    public int describeContents() {\n        return 0;\n    }\n\n    @Override\n    public void writeToParcel(Parcel dest, int flags) {\n        dest.writeValue(mPaint);\n    }\n\n    public static final Parcelable.Creator<ParcelablePaint> CREATOR = new Parcelable.Creator<ParcelablePaint>() {\n        @Override\n        public ParcelablePaint createFromParcel(Parcel in) {\n            return new ParcelablePaint(in);\n        }\n\n        @Override\n        public ParcelablePaint[] newArray(int size) {\n            return new ParcelablePaint[size];\n        }\n    };\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Sticker.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.os.Parcel;\nimport android.os.Parcelable;\nimport android.support.annotation.DrawableRes;\n\npublic class Sticker implements Parcelable {\n    @DrawableRes\n    private int mImage;\n\n    public Sticker(@DrawableRes int image) {\n        mImage = image;\n    }\n\n    public int getImage() {\n        return mImage;\n    }\n\n    public void setImage(int image) {\n        mImage = image;\n    }\n\n    protected Sticker(Parcel in) {\n        mImage = in.readInt();\n    }\n\n    @Override\n    public int describeContents() {\n        return 0;\n    }\n\n    @Override\n    public void writeToParcel(Parcel parcel, int i) {\n        parcel.writeInt(mImage);\n    }\n\n    public static final Parcelable.Creator<Sticker> CREATOR = new Parcelable.Creator<Sticker>() {\n        @Override\n        public Sticker createFromParcel(Parcel in) {\n            return new Sticker(in);\n        }\n\n        @Override\n        public Sticker[] newArray(int size) {\n            return new Sticker[size];\n        }\n    };\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/StickersSet.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.support.annotation.DrawableRes;\nimport android.support.annotation.StringRes;\n\nimport java.util.List;\n\npublic class StickersSet {\n    @StringRes\n    private int mTitle;\n\n    @DrawableRes\n    private int mIcon;\n\n    private List<Sticker> mStickers;\n\n    public StickersSet(@StringRes int title, @DrawableRes int icon, List<Sticker> stickers) {\n        mTitle = title;\n        mIcon = icon;\n        mStickers = stickers;\n    }\n\n    public List<Sticker> getStickers() {\n        return mStickers;\n    }\n\n    public int getTitle() {\n        return mTitle;\n    }\n\n    public int getIcon() {\n        return mIcon;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Text.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.graphics.Typeface;\n\npublic class Text {\n    private String mText;\n    private Typeface mTypeface;\n    private int mColor;\n\n    public Text(String text, Typeface typeface, int color) {\n        mText = text;\n        mTypeface = typeface;\n        mColor = color;\n    }\n\n    public String getText() {\n        return mText;\n    }\n\n    public void setText(String text) {\n        mText = text;\n    }\n\n    public Typeface getTypeface() {\n        return mTypeface;\n    }\n\n    public void setTypeface(Typeface typeface) {\n        mTypeface = typeface;\n    }\n\n    public int getColor() {\n        return mColor;\n    }\n\n    public void setColor(int color) {\n        mColor = color;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/models/Tool.java",
    "content": "package net.iquesoft.iquephoto.models;\n\nimport android.support.annotation.DrawableRes;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.StringRes;\nimport android.support.v4.app.Fragment;\n\npublic class Tool {\n    @StringRes\n    private int mTitle;\n\n    @DrawableRes\n    private int mIcon;\n\n    private Fragment mFragment;\n\n    public Tool(@StringRes int title, @DrawableRes int icon, @NonNull Fragment fragment) {\n        mTitle = title;\n        mIcon = icon;\n        mFragment = fragment;\n    }\n\n    public int getIcon() {\n        return mIcon;\n    }\n\n    public int getTitle() {\n        return mTitle;\n    }\n\n    public Fragment getFragment() {\n        return mFragment;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/activity/EditorActivityPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.activity;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.provider.MediaStore;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.presentation.views.activity.EditorActivityView;\nimport net.iquesoft.iquephoto.tasks.ImageSaveTask;\nimport net.iquesoft.iquephoto.utils.LogHelper;\n\nimport java.io.IOException;\n\n@InjectViewState\npublic class EditorActivityPresenter extends MvpPresenter<EditorActivityView> {\n    public static final String INSTAGRAM_PACKAGE_NAME = \"com.instagram.android\";\n    public static final String FACEBOOK_PACKAGE_NAME = \"com.facebook.katana\";\n\n    private Uri mUri;\n\n    private Bitmap mBitmap;\n\n    private Context mContext;\n\n    public EditorActivityPresenter(@NonNull Context context, @NonNull Intent intent) {\n        mContext = context;\n\n        try {\n            mUri = intent.getData();\n\n            mBitmap = MediaStore.Images.Media.getBitmap(\n                    context.getContentResolver(), mUri\n            );\n\n            LogHelper.logBitmap(\"Cropped Bitmap\", mBitmap);\n\n            getViewState().startEditing(mBitmap);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n\n    public void onBackPressed(@NonNull Bitmap alteredBitmap) {\n        if (!mBitmap.sameAs(alteredBitmap)) {\n            getViewState().showAlertDialog();\n        } else {\n            getViewState().navigateBack(false);\n        }\n    }\n\n    public void setAlteredImageUri(@NonNull Uri uri) {\n        mUri = uri;\n    }\n\n    public void save(@NonNull Bitmap bitmap) {\n        new ImageSaveTask(mContext, bitmap).execute();\n    }\n\n    public void share(@Nullable String packageName) {\n        if (isApplicationExist(mContext, packageName)) {\n            getViewState().share(mUri, packageName);\n        } else {\n            switch (packageName) {\n                case INSTAGRAM_PACKAGE_NAME:\n                    getViewState().\n                            showApplicationNotExistAlertDialog(R.string.instagram_alert, packageName);\n                    break;\n                case FACEBOOK_PACKAGE_NAME:\n                    getViewState().\n                            showApplicationNotExistAlertDialog(R.string.facebook_alert, packageName);\n                    break;\n            }\n        }\n    }\n\n    private boolean isApplicationExist(Context context, @Nullable String packageName) {\n        if (packageName == null) {\n            return true;\n        } else {\n            try {\n                context.getPackageManager().getApplicationInfo(packageName, 0);\n                return true;\n            } catch (PackageManager.NameNotFoundException e) {\n                return false;\n            }\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/activity/GalleryActivityPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.activity;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.presentation.views.activity.GalleryView;\n\n@InjectViewState\npublic class GalleryActivityPresenter extends MvpPresenter<GalleryView> {\n\n    /*public void onBackPressed(RecyclerView recyclerView) {\n        Object object = recyclerView.getAdapter();\n\n        if (object != null) {\n            String classSimpleName = object.getClass().getSimpleName();\n            if (classSimpleName.equalsIgnoreCase(ImageAlbumsAdapter.class.getSimpleName()))\n                getViewState().navigateBack();\n            else\n                getViewState.showFolders();\n        } else\n            getViewState.navigateBack();\n    }*/\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/activity/HomeActivityPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.activity;\n\nimport android.annotation.SuppressLint;\nimport android.content.Context;\nimport android.net.Uri;\nimport android.os.Environment;\nimport android.support.annotation.NonNull;\nimport android.support.v4.content.FileProvider;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\nimport com.tbruyelle.rxpermissions.RxPermissions;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.presentation.views.activity.HomeView;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\nimport static android.Manifest.permission.CAMERA;\nimport static android.Manifest.permission.READ_EXTERNAL_STORAGE;\nimport static android.app.Activity.RESULT_OK;\nimport static net.iquesoft.iquephoto.ui.activities.HomeActivity.REQ_CAMERA;\n\n@InjectViewState\npublic class HomeActivityPresenter extends MvpPresenter<HomeView> {\n    private String mCurrentPhotoPath;\n\n    public void openCamera(@NonNull Context context) {\n        checkPermission(context, CAMERA);\n    }\n\n    public void openGallery(@NonNull Context context) {\n        checkPermission(context, READ_EXTERNAL_STORAGE);\n    }\n\n    public void startEditing(int requestCode, int resultCode) {\n        if (requestCode == REQ_CAMERA && resultCode == RESULT_OK) {\n            getViewState().startEditing(mCurrentPhotoPath);\n        }\n    }\n\n    private void checkPermission(Context context, String permission) {\n        RxPermissions.getInstance(context)\n                .request(permission)\n                .subscribe(granted -> {\n                            if (granted) {\n                                switch (permission) {\n                                    case CAMERA:\n                                        startCamera(context);\n                                        break;\n                                    case READ_EXTERNAL_STORAGE:\n                                        getViewState().startGallery();\n                                        break;\n                                }\n                            } else {\n                                switch (permission) {\n                                    case CAMERA:\n                                        getViewState()\n                                                .showPermissionDenied(R.string.camera_permission);\n                                        break;\n                                    case READ_EXTERNAL_STORAGE:\n                                        getViewState()\n                                                .showPermissionDenied(R.string.read_storage_permission);\n                                        break;\n                                }\n                            }\n                        }\n                );\n    }\n\n    private void startCamera(Context context) {\n        File photoFile = null;\n        try {\n            photoFile = createImageFile(context);\n        } catch (IOException ex) {\n            ex.printStackTrace();\n        }\n        if (photoFile != null) {\n            Uri photoURI = FileProvider.getUriForFile(context,\n                    \"net.iquesoft.iquephoto.provider\",\n                    photoFile);\n\n            getViewState().startCamera(photoURI);\n        }\n    }\n\n    private File createImageFile(Context context) throws IOException {\n        @SuppressLint(\"SimpleDateFormat\")\n        String timeStamp = new SimpleDateFormat(\"yyyyMMdd_HHmmss\").format(new Date());\n        String imageFileName = \"JPEG_\" + timeStamp + \"_\";\n        File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);\n        File image = File.createTempFile(\n                imageFileName,  /* prefix */\n                \".jpg\",         /* suffix */\n                storageDir      /* directory */\n        );\n\n        mCurrentPhotoPath = image.getAbsolutePath();\n\n        return image;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/activity/PreviewActivityPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.activity;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Matrix;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.net.Uri;\nimport android.support.annotation.NonNull;\nimport android.support.design.widget.TabLayout;\nimport android.util.DisplayMetrics;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\nimport com.isseiaoki.simplecropview.CropImageView;\nimport com.isseiaoki.simplecropview.callback.CropCallback;\nimport com.isseiaoki.simplecropview.callback.SaveCallback;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.presentation.views.activity.PreviewView;\nimport net.iquesoft.iquephoto.tasks.DecodeScaledImageAsyncTask;\nimport net.iquesoft.iquephoto.ui.activities.PreviewActivity;\n\nimport static com.isseiaoki.simplecropview.CropImageView.CropMode.*;\nimport static net.iquesoft.iquephoto.tasks.DecodeScaledImageAsyncTask.*;\n\n@InjectViewState\npublic class PreviewActivityPresenter extends MvpPresenter<PreviewView> {\n    public PreviewActivityPresenter(@NonNull Context context, @NonNull Intent intent) {\n        DecodeScaledImageAsyncTask decodeScaledImageAsyncTask =\n                new DecodeScaledImageAsyncTask(context);\n        decodeScaledImageAsyncTask.setProgressListener(new OnProgressListener() {\n            @Override\n            public void onStarted() {\n                getViewState().showProgress();\n            }\n\n            @Override\n            public void onFinished(Bitmap bitmap) {\n                getViewState().setupImage(bitmap);\n            }\n        });\n        decodeScaledImageAsyncTask.execute(intent.getStringExtra(PreviewActivity.IMAGE_PATH));\n\n        initCropModes();\n    }\n\n    private static final int[] CROP_MODES = {\n            R.string.crop_free,\n            R.string.crop_original,\n            R.string.crop_square,\n            R.string.crop_3_4,\n            R.string.crop_4_3,\n            R.string.crop_9_16,\n            R.string.crop_16_9\n    };\n\n    private CropCallback cropCallback = new CropCallback() {\n        @Override\n        public void onSuccess(Bitmap cropped) {\n\n        }\n\n        @Override\n        public void onError() {\n\n        }\n    };\n\n    private SaveCallback saveCallback = new SaveCallback() {\n        @Override\n        public void onSuccess(Uri outputUri) {\n            getViewState().startEditingImage(outputUri);\n            getViewState().dismissProgress();\n        }\n\n        @Override\n        public void onError() {\n\n        }\n    };\n\n    private void initCropModes() {\n        for (int i = 0; i < CROP_MODES.length; i++) {\n            if (i == 0) getViewState().createTab(CROP_MODES[i], true);\n            else getViewState().createTab(CROP_MODES[i], false);\n        }\n    }\n\n    public void changeCropMode(@NonNull TabLayout.Tab tab) {\n        CropImageView.CropMode cropMode = FREE;\n\n        switch (tab.getPosition()) {\n            case 0:\n                cropMode = FREE;\n                break;\n            case 1:\n                cropMode = FIT_IMAGE;\n                break;\n            case 2:\n                cropMode = SQUARE;\n                break;\n            case 3:\n                cropMode = RATIO_3_4;\n                break;\n            case 4:\n                cropMode = RATIO_4_3;\n                break;\n            case 5:\n                cropMode = RATIO_9_16;\n                break;\n            case 6:\n                cropMode = RATIO_16_9;\n                break;\n        }\n\n        getViewState().onCropModeChanged(cropMode);\n    }\n\n    public void cropImage(Uri uri, CropImageView cropImageView) {\n        getViewState().showProgress();\n        cropImageView.startCrop(uri, cropCallback, saveCallback);\n    }\n\n    public void flipImageHorizontal(Bitmap bitmap) {\n        Matrix matrix = new Matrix();\n        matrix.preScale(-1, 1);\n\n        Bitmap flippedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);\n        if (flippedBitmap != null) {\n            flippedBitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT);\n            Drawable drawable = new BitmapDrawable(flippedBitmap);\n            getViewState().flipImage(drawable);\n        }\n    }\n\n    public void flipImageVertical(Bitmap bitmap) {\n        Matrix matrix = new Matrix();\n        matrix.preScale(1, -1);\n\n        Bitmap flippedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);\n        if (flippedBitmap != null) {\n            flippedBitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT);\n            Drawable drawable = new BitmapDrawable(flippedBitmap);\n            getViewState().flipImage(drawable);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/AddTextPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\nimport android.graphics.Typeface;\nimport android.support.annotation.NonNull;\nimport android.support.v4.content.res.ResourcesCompat;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.EditorColor;\nimport net.iquesoft.iquephoto.models.Text;\nimport net.iquesoft.iquephoto.presentation.views.fragment.AddTextView;\n\n@InjectViewState\npublic class AddTextPresenter extends MvpPresenter<AddTextView> {\n    public void changeTextColor(@NonNull Context context, EditorColor editorColor) {\n        int color = ResourcesCompat.getColor(context.getResources(), editorColor.getColor(), null);\n    }\n\n    public void addText(String text, Typeface typeface, int color) {\n        if (!text.isEmpty()) {\n            Text texts = new Text(text, typeface, color);\n            getViewState().addText(texts);\n        } else\n            getViewState().showToastMessage(R.string.text_is_empty);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/AdjustPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Adjust;\nimport net.iquesoft.iquephoto.presentation.views.fragment.AdjustView;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class AdjustPresenter extends MvpPresenter<AdjustView> {\n    @Inject\n    Lazy<List<Adjust>> mAdjusts;\n\n    public AdjustPresenter() {\n        App.getAppComponent().inject(this);\n        getViewState().setupAdapter(mAdjusts.get());\n    }\n\n    public void changeAdjust(Adjust adjust) {\n        getViewState().adjustChanged(adjust.getFragment());\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/ColorsPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.EditorColor;\nimport net.iquesoft.iquephoto.presentation.views.fragment.ColorsView;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\n@InjectViewState\npublic class ColorsPresenter extends MvpPresenter<ColorsView> {\n    @Inject\n    List<EditorColor> mColors;\n\n    public ColorsPresenter() {\n        App.getAppComponent().inject(this);\n\n        getViewState().setupAdapter(mColors);\n    }\n\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/DrawingPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\nimport android.support.annotation.NonNull;\nimport android.support.v4.content.res.ResourcesCompat;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.BrushSize;\nimport net.iquesoft.iquephoto.models.EditorColor;\nimport net.iquesoft.iquephoto.presentation.views.fragment.DrawingView;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class DrawingPresenter extends MvpPresenter<DrawingView> {\n    @Inject\n    Lazy<List<BrushSize>> mSizes;\n\n    @Inject\n    Lazy<List<EditorColor>> mColors;\n\n    public DrawingPresenter() {\n        App.getAppComponent().inject(this);\n\n        getViewState().setupSizesAdapter(mSizes.get());\n        getViewState().setupColorsAdapter(mColors.get());\n    }\n\n    public void changeBrushColor(@NonNull Context context, EditorColor editorColor) {\n        int color = ResourcesCompat.getColor(context.getResources(), editorColor.getColor(), null);\n\n        getViewState().onBrushColorChanged(color);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/FiltersPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Paint;\nimport android.net.Uri;\nimport android.support.annotation.NonNull;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Filter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.FiltersView;\nimport net.iquesoft.iquephoto.ui.fragments.TransparencyFragment;\nimport net.iquesoft.iquephoto.utils.BitmapUtil;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class FiltersPresenter extends MvpPresenter<FiltersView> {\n    @Inject\n    Lazy<List<Filter>> mFilters;\n\n    public FiltersPresenter(@NonNull Context context, @NonNull Bitmap bitmap) {\n        App.getAppComponent().inject(this);\n\n        Uri uri = BitmapUtil.getUriOfBitmap(context, bitmap);\n\n        getViewState().setupFiltersAdapter(uri, mFilters.get());\n    }\n\n    public void changeFilter(@NonNull Filter filter) {\n        getViewState().filterChanged(filter.getColorMatrix());\n    }\n\n    public void changeFilterIntensity(@NonNull Paint filterPaint) {\n        getViewState().onChangeFilterIntensityClicked(\n                TransparencyFragment.newInstance(filterPaint)\n        );\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/FontsPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Font;\nimport net.iquesoft.iquephoto.presentation.views.fragment.FontsView;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\n@InjectViewState\npublic class FontsPresenter extends MvpPresenter<FontsView> {\n    @Inject\n    List<Font> mFonts;\n\n    public FontsPresenter() {\n        App.getAppComponent().inject(this);\n\n        getViewState().setupAdapter(mFonts);\n    }\n\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/FramesPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.support.annotation.NonNull;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Frame;\nimport net.iquesoft.iquephoto.presentation.views.fragment.FramesView;\nimport net.iquesoft.iquephoto.utils.BitmapUtil;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class FramesPresenter extends MvpPresenter<FramesView> {\n    @Inject\n    Lazy<List<Frame>> mFrames;\n\n    public FramesPresenter() {\n        App.getAppComponent().inject(this);\n        getViewState().setupAdapter(mFrames.get());\n    }\n\n    public void changeOverlay(@NonNull Context context, Frame frame) {\n        Bitmap bitmap = BitmapUtil.drawable2Bitmap(context, frame.getImage());\n\n        getViewState().onFrameChanged(bitmap);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/GalleryAlbumsPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.presentation.views.fragment.GalleryAlbumsView;\nimport net.iquesoft.iquephoto.tasks.ImageFetchTask;\n\n@InjectViewState\npublic class GalleryAlbumsPresenter extends MvpPresenter<GalleryAlbumsView> {\n    public void fetchImages(Context context) {\n        ImageFetchTask imageFetchTask = new ImageFetchTask(context);\n        imageFetchTask.setOnImageLoadedListener(albums -> {\n            if (albums != null) {\n                getViewState().setupAdapter(albums);\n            } else {\n                getViewState().showNoImages();\n            }\n        });\n        imageFetchTask.execute();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/GalleryImagesPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.os.Bundle;\nimport android.support.annotation.NonNull;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.models.Image;\nimport net.iquesoft.iquephoto.presentation.views.fragment.GalleryImagesView;\nimport net.iquesoft.iquephoto.ui.fragments.GalleryImagesFragment;\n\n@InjectViewState\npublic class GalleryImagesPresenter extends MvpPresenter<GalleryImagesView> {\n    public GalleryImagesPresenter(@NonNull Bundle bundle) {\n        setupAlbumImages(bundle);\n    }\n\n    private void setupAlbumImages(Bundle bundle) {\n        if (bundle != null) {\n            getViewState().setupAdapter(\n                    bundle.getParcelableArrayList(GalleryImagesFragment.ARG_PARAM)\n            );\n        }\n    }\n\n    public void setImageForEdit(Image image) {\n        getViewState().editImage(image.getPath());\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/ImageAdjustmentPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.os.Bundle;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.presentation.views.fragment.ImageAdjustmentView;\nimport net.iquesoft.iquephoto.ui.fragments.ImageAdjustmentFragment;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.NONE;\n\n@InjectViewState\npublic class ImageAdjustmentPresenter extends MvpPresenter<ImageAdjustmentView> {\n    private EditorTool mCurrentCommand = NONE;\n\n    public ImageAdjustmentPresenter(@NonNull Bundle bundle) {\n        mCurrentCommand =\n                (EditorTool) bundle.getSerializable(ImageAdjustmentFragment.ARG_PARAM);\n\n        assert mCurrentCommand != null;\n        Log.i(\"ImageAdjustment\", \"Current tool = \" + mCurrentCommand.name());\n\n        setupSlider();\n    }\n\n    public void onResume() {\n        switch (mCurrentCommand) {\n            case FILTERS:\n                getViewState().changeToolbarSubtitle(R.string.intensity);\n                break;\n            case BRIGHTNESS:\n                getViewState().changeToolbarSubtitle(R.string.brightness);\n                break;\n            case CONTRAST:\n                getViewState().changeToolbarSubtitle(R.string.contrast);\n                break;\n            case SATURATION:\n                getViewState().changeToolbarSubtitle(R.string.saturation);\n                break;\n            case WARMTH:\n                getViewState().changeToolbarSubtitle(R.string.warmth);\n                break;\n            case TRANSFORM_STRAIGHTEN:\n                getViewState().changeToolbarSubtitle(R.string.transform_straighten);\n                break;\n        }\n\n        getViewState().changeToolbarTitle(getToolTitle());\n        getViewState().setEditorTool(mCurrentCommand);\n    }\n\n    public void progressChanged(int value) {\n        switch (mCurrentCommand) {\n            case BRIGHTNESS:\n                getViewState().onBrightnessChanged(value);\n                break;\n            case CONTRAST:\n                getViewState().onContrastChanged(value);\n                break;\n            case SATURATION:\n                getViewState().onSaturationChanged(value);\n                break;\n            case WARMTH:\n                getViewState().onWarmthChanged(value);\n                break;\n            case TRANSFORM_STRAIGHTEN:\n                getViewState().onStraightenTransformChanged(value);\n                break;\n            case VIGNETTE:\n                getViewState().onVignetteChanged(value);\n                break;\n        }\n    }\n\n    private void setupSlider() {\n        switch (mCurrentCommand) {\n            case VIGNETTE:\n                getViewState().setSeekBarValues(-100, 100, 70);\n                break;\n            case TRANSFORM_HORIZONTAL:\n                getViewState().setSeekBarValues(-30, 30, 0);\n                break;\n            case TRANSFORM_STRAIGHTEN:\n                getViewState().setSeekBarValues(-30, 30, 0);\n                break;\n            case TRANSFORM_VERTICAL:\n                getViewState().setSeekBarValues(-30, 30, 0);\n                break;\n            default:\n                getViewState().setSeekBarValues(-100, 100, 0);\n                break;\n        }\n    }\n\n    private int getToolTitle() {\n        int title = R.string.adjust;\n\n        switch (mCurrentCommand) {\n            case FILTERS:\n                title = R.string.filters;\n                break;\n            case TRANSFORM_STRAIGHTEN:\n                title = R.string.transform;\n                break;\n            case VIGNETTE:\n                title = R.string.vignette;\n                break;\n        }\n\n        return title;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/OverlaysPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.support.annotation.NonNull;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Overlay;\nimport net.iquesoft.iquephoto.presentation.views.fragment.OverlaysView;\nimport net.iquesoft.iquephoto.utils.BitmapUtil;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class OverlaysPresenter extends MvpPresenter<OverlaysView> {\n    @Inject\n    Lazy<List<Overlay>> mOverlays;\n\n    public OverlaysPresenter() {\n        App.getAppComponent().inject(this);\n        getViewState().setupAdapter(mOverlays.get());\n    }\n\n    public void changeOverlay(@NonNull Context context, Overlay overlay) {\n        Bitmap bitmap = BitmapUtil.drawable2Bitmap(context, overlay.getImage());\n\n        getViewState().onOverlayChanged(bitmap);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/StickersPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.os.Bundle;\nimport android.support.annotation.NonNull;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Sticker;\nimport net.iquesoft.iquephoto.models.StickersSet;\nimport net.iquesoft.iquephoto.presentation.views.fragment.StickersView;\nimport net.iquesoft.iquephoto.ui.fragments.StickersFragment;\nimport net.iquesoft.iquephoto.ui.fragments.StickersSetFragment;\nimport net.iquesoft.iquephoto.utils.BitmapUtil;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n/**\n * Listens to user actions from the UI ({@link StickersFragment}), retrieves the data and updates\n * the UI as required.\n */\n@InjectViewState\npublic class StickersPresenter extends MvpPresenter<StickersView> {\n    @Inject\n    Lazy<List<StickersSet>> mStickersSets;\n\n    /**\n     * Creates a presenter for the add/edit view.\n     *\n     * @param bundle contains stickers from set how was clicked on({@link StickersSetFragment}).\n     */\n    public StickersPresenter(@NonNull Bundle bundle) {\n        App.getAppComponent().inject(this);\n        setupStickersSet(bundle);\n    }\n\n    private void setupStickersSet(Bundle bundle) {\n        List<Sticker> stickers = bundle.getParcelableArrayList(StickersFragment.ARG_STICKERS);\n\n        getViewState().setupAdapter(stickers);\n        getViewState().setupToolbarSubtitle(bundle.getInt(StickersFragment.ARG_TITLE));\n    }\n\n    /**\n     * Get clicked sticker from res and add it on image.\n     *\n     * @param context to get bitmap from res.\n     * @param sticker is clicked sticker to add on image.\n     */\n    public void stickerClicked(@NonNull Context context, Sticker sticker) {\n        Bitmap bitmap = BitmapUtil.drawable2Bitmap(context, sticker.getImage());\n\n        getViewState().addSticker(bitmap);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/StickersSetPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Sticker;\nimport net.iquesoft.iquephoto.models.StickersSet;\nimport net.iquesoft.iquephoto.presentation.views.fragment.StickersSetView;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class StickersSetPresenter extends MvpPresenter<StickersSetView> {\n    @Inject\n    Lazy<List<StickersSet>> mStickersSets;\n\n    public StickersSetPresenter() {\n        App.getAppComponent().inject(this);\n        getViewState().setupAdapter(mStickersSets.get());\n    }\n\n    public void stickersSetClicked(StickersSet stickersSet) {\n        ArrayList<Sticker> stickers = new ArrayList<>(stickersSet.getStickers());\n\n        getViewState().showStickers(stickersSet.getTitle(), stickers);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/TiltShiftFragmentPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.presentation.views.fragment.TiltShiftView;\n\n@InjectViewState\npublic class TiltShiftFragmentPresenter extends MvpPresenter<TiltShiftView> {\n    public void changeTiltShift(EditorTool command) {\n        getViewState().onTiltShiftChanged(command);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/ToolsPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.models.Tool;\nimport net.iquesoft.iquephoto.presentation.views.fragment.ToolsView;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport dagger.Lazy;\n\n@InjectViewState\npublic class ToolsPresenter extends MvpPresenter<ToolsView> {\n    @Inject\n    Lazy<List<Tool>> mTools;\n\n    public ToolsPresenter() {\n        App.getAppComponent().inject(this);\n        getViewState().setupTools(mTools.get());\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/TransformPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.presentation.views.fragment.TransformView;\n\n@InjectViewState\npublic class TransformPresenter extends MvpPresenter<TransformView> {\n\n    public void setupTransform(EditorTool editorTool) {\n        // TODO: mEditorView.setupToolFragment(editorTool);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/presenters/fragment/TransparencyPresenter.java",
    "content": "package net.iquesoft.iquephoto.presentation.presenters.fragment;\n\nimport android.graphics.Paint;\nimport android.os.Bundle;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\n\nimport com.arellomobile.mvp.InjectViewState;\nimport com.arellomobile.mvp.MvpPresenter;\n\nimport net.iquesoft.iquephoto.models.ParcelablePaint;\nimport net.iquesoft.iquephoto.presentation.views.fragment.IntensityView;\nimport net.iquesoft.iquephoto.ui.fragments.TransparencyFragment;\n\n@InjectViewState\npublic class TransparencyPresenter extends MvpPresenter<IntensityView> {\n    private final int mOldValue;\n\n    private Paint mPaint;\n\n    public TransparencyPresenter(@NonNull Bundle bundle) {\n        ParcelablePaint parcelablePaint = bundle.getParcelable(TransparencyFragment.ARG_PARAM);\n        if (parcelablePaint != null) {\n            mPaint = parcelablePaint.getPaint();\n        }\n\n        mOldValue = mPaint.getAlpha();\n    }\n\n    public void progressChanged(int value) {\n        int alpha = (int) Math.round((2.55 * value));\n\n        Log.i(\"TransparencyChanged\", String.valueOf(alpha));\n\n        mPaint.setAlpha(alpha);\n        getViewState().onTransparencyChanged(getStringValue(value));\n    }\n\n    public void cancelChanges() {\n        mPaint.setAlpha(mOldValue);\n        getViewState().onTransparencyChanged(getStringValue(mOldValue));\n    }\n\n    public void applyChanges() {\n\n    }\n\n    private String getStringValue(int value) {\n        return String.valueOf(value) + \"%\";\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/activity/CameraActivityView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.activity;\n\nimport android.graphics.ColorMatrix;\nimport android.support.v4.app.Fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\npublic interface CameraActivityView extends MvpView {\n    void setupCamera(Fragment fragment);\n\n    void setupFragment(Fragment fragment);\n\n    void hideFiltersButton();\n\n    void setFilter(ColorMatrix colorMatrix);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/activity/EditorActivityView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.activity;\n\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\n\npublic interface EditorActivityView extends MvpView {\n\n    void startEditing(Bitmap bitmap);\n\n    void showLoading();\n\n    void hideLoading();\n\n    void showAlertDialog();\n    \n    void showApplicationNotExistAlertDialog(@StringRes int messageBody, @NonNull String packageName);\n\n    void showToastMessage(int stringResource);\n\n    void navigateBack(boolean isFragment);\n\n    void share(@NonNull Uri uri, @Nullable String packageName);\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/activity/GalleryView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.activity;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.ImageAlbum;\n\npublic interface GalleryView extends MvpView {\n    void showImages(ImageAlbum imageAlbum);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/activity/HomeView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.activity;\n\nimport android.net.Uri;\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\n\npublic interface HomeView extends MvpView {\n    void startGallery();\n\n    void startCamera(Uri uri);\n\n    void startEditing(String photoPath);\n\n    void showPermissionDenied(@StringRes int message);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/activity/PreviewView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.activity;\n\nimport android.graphics.Bitmap;\nimport android.graphics.drawable.Drawable;\nimport android.net.Uri;\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\nimport com.isseiaoki.simplecropview.CropImageView;\n\npublic interface PreviewView extends MvpView {\n\n    void setupImage(Bitmap bitmap);\n\n    void onCropModeChanged(CropImageView.CropMode cropMode);\n\n    void startEditingImage(Uri uri);\n\n    void showProgress();\n\n    void flipImage(Drawable drawable);\n\n    void dismissProgress();\n\n    void createTab(@StringRes int title, boolean selected);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/AddTextView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Text;\n\npublic interface AddTextView extends MvpView {\n    void addText(Text text);\n\n    void onTextColorChanged(@ColorInt int color);\n\n    void showToastMessage(@StringRes int messageText);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/AdjustView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.support.v4.app.Fragment;\n\nimport com.arellomobile.mvp.MvpView;\nimport com.arellomobile.mvp.viewstate.strategy.SkipStrategy;\nimport com.arellomobile.mvp.viewstate.strategy.StateStrategyType;\n\nimport net.iquesoft.iquephoto.models.Adjust;\n\nimport java.util.List;\n\npublic interface AdjustView extends MvpView {\n    void setupAdapter(List<Adjust> adjusts);\n\n    @StateStrategyType(SkipStrategy.class)\n    void adjustChanged(Fragment fragment);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/ColorsView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.EditorColor;\n\nimport java.util.List;\n\npublic interface ColorsView extends MvpView {\n    void setupAdapter(List<EditorColor> colors);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/DrawingView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.support.annotation.ColorInt;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.BrushSize;\nimport net.iquesoft.iquephoto.models.EditorColor;\n\nimport java.util.List;\n\npublic interface DrawingView extends MvpView {\n    void setupSizesAdapter(List<BrushSize> sizes);\n\n    void setupColorsAdapter(List<EditorColor> colors);\n\n    void onBrushColorChanged(@ColorInt int color);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/FiltersView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.graphics.ColorMatrix;\nimport android.net.Uri;\nimport android.support.v4.app.Fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Filter;\n\nimport java.util.List;\n\npublic interface FiltersView extends MvpView {\n    void setupFiltersAdapter(Uri uri, List<Filter> filters);\n\n    void filterChanged(ColorMatrix colorMatrix);\n\n    void onChangeFilterIntensityClicked(Fragment fragment);\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/FontsView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Font;\n\nimport java.util.List;\n\npublic interface FontsView extends MvpView {\n    void setupAdapter(List<Font> fonts);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/FramesView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.graphics.Bitmap;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Frame;\n\nimport java.util.List;\n\npublic interface FramesView extends MvpView {\n    void setupAdapter(List<Frame> frames);\n\n    void onFrameChanged(Bitmap bitmap);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/GalleryAlbumsView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.ImageAlbum;\n\nimport java.util.List;\n\npublic interface GalleryAlbumsView extends MvpView {\n    void showNoImages();\n\n    void setupAdapter(List<ImageAlbum> imageAlbums);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/GalleryImagesView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Image;\n\nimport java.util.List;\n\npublic interface GalleryImagesView extends MvpView {\n    void setupAdapter(List<Image> images);\n\n    void editImage(String imagePath);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/ImageAdjustmentView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\n\npublic interface ImageAdjustmentView extends MvpView {\n    void changeToolbarTitle(@StringRes int title);\n\n    void changeToolbarSubtitle(@StringRes int subtitle);\n\n    void onIntensityChanged(int value);\n\n    void onBrightnessChanged(int value);\n\n    void onContrastChanged(int value);\n\n    void onSaturationChanged(int value);\n\n    void onWarmthChanged(int value);\n\n    void onStraightenTransformChanged(int value);\n\n    void onVignetteChanged(int value);\n\n    void setEditorTool(EditorTool tool);\n\n    void setSeekBarValues(int minValue, int maxValue, int value);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/IntensityView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\npublic interface IntensityView extends MvpView {\n    void onTransparencyChanged(String value);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/OverlaysView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.graphics.Bitmap;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Overlay;\n\nimport java.util.List;\n\npublic interface OverlaysView extends MvpView {\n    void setupAdapter(List<Overlay> overlays);\n\n    void onOverlayChanged(Bitmap bitmap);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/StickersSetView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\nimport com.arellomobile.mvp.viewstate.strategy.SkipStrategy;\nimport com.arellomobile.mvp.viewstate.strategy.StateStrategyType;\n\nimport net.iquesoft.iquephoto.models.Sticker;\nimport net.iquesoft.iquephoto.models.StickersSet;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic interface StickersSetView extends MvpView {\n    void setupAdapter(List<StickersSet> stickersSets);\n\n    @StateStrategyType(SkipStrategy.class)\n    void showStickers(@StringRes int title, ArrayList<Sticker> stickers);\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/StickersView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport android.graphics.Bitmap;\nimport android.support.annotation.StringRes;\n\nimport com.arellomobile.mvp.MvpView;\nimport com.arellomobile.mvp.viewstate.strategy.SkipStrategy;\nimport com.arellomobile.mvp.viewstate.strategy.StateStrategyType;\n\nimport net.iquesoft.iquephoto.models.Sticker;\n\nimport java.util.List;\n\npublic interface StickersView extends MvpView {\n    void setupAdapter(List<Sticker> stickers);\n\n    void setupToolbarSubtitle(@StringRes int subtitle);\n\n    @StateStrategyType(SkipStrategy.class)\n    void addSticker(Bitmap bitmap);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/TiltShiftView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\n\npublic interface TiltShiftView extends MvpView {\n    void onTiltShiftChanged(EditorTool command);\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/ToolsView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\nimport net.iquesoft.iquephoto.models.Tool;\n\nimport java.util.List;\n\npublic interface ToolsView extends MvpView {\n    void setupTools(List<Tool> tools);\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/TransformHorizontalView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\npublic interface TransformHorizontalView {\n\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/TransformStraightenView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\npublic interface TransformStraightenView {\n\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/TransformVerticalView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\npublic interface TransformVerticalView {\n\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/presentation/views/fragment/TransformView.java",
    "content": "package net.iquesoft.iquephoto.presentation.views.fragment;\n\nimport com.arellomobile.mvp.MvpView;\n\npublic interface TransformView extends MvpView {\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/tasks/DecodeScaledImageAsyncTask.java",
    "content": "package net.iquesoft.iquephoto.tasks;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.graphics.Canvas;\nimport android.graphics.Point;\nimport android.os.AsyncTask;\nimport android.os.Build;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\nimport android.view.Display;\nimport android.view.WindowManager;\n\npublic class DecodeScaledImageAsyncTask extends AsyncTask<String, Void, Bitmap> {\n    private static String TAG = DecodeScaledImageAsyncTask.class.getSimpleName();\n\n    private int mMaxSize;\n\n    private Context mContext;\n\n    private OnProgressListener mListener;\n\n    public interface OnProgressListener {\n        void onStarted();\n\n        void onFinished(Bitmap bitmap);\n    }\n\n    public DecodeScaledImageAsyncTask(Context context) {\n        mContext = context;\n    }\n\n    @Override\n    protected void onPreExecute() {\n        super.onPreExecute();\n\n        mMaxSize = calculateMaxBitmapSize(mContext);\n    }\n\n    @Override\n    protected Bitmap doInBackground(String... strings) {\n        return decodeSampledBitmapFromFile(strings[0], mMaxSize, mMaxSize);\n    }\n\n    @Override\n    protected void onPostExecute(Bitmap bitmap) {\n        mListener.onFinished(bitmap);\n    }\n\n    public void setProgressListener(OnProgressListener listener) {\n        mListener = listener;\n    }\n\n    private int calculateMaxBitmapSize(@NonNull Context context) {\n        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);\n        Display display = wm.getDefaultDisplay();\n\n        Point size = new Point();\n        int width, height;\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {\n            display.getSize(size);\n            width = size.x;\n            height = size.y;\n        } else {\n            width = display.getWidth();\n            height = display.getHeight();\n        }\n\n        int maxBitmapSize = (int) Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));\n\n        Canvas canvas = new Canvas();\n        final int maxCanvasSize = Math.min(canvas.getMaximumBitmapWidth(), canvas.getMaximumBitmapHeight());\n        if (maxCanvasSize > 0) {\n            maxBitmapSize = Math.min(maxBitmapSize, maxCanvasSize);\n        }\n\n        Log.d(TAG, \"maxBitmapSize: \" + maxBitmapSize);\n        return maxBitmapSize;\n    }\n\n    private int calculateInSampleSize(\n            BitmapFactory.Options options, int reqWidth, int reqHeight) {\n        final int height = options.outHeight;\n        final int width = options.outWidth;\n        int inSampleSize = 1;\n\n        if (height > reqHeight || width > reqWidth) {\n            final int halfHeight = height / 2;\n            final int halfWidth = width / 2;\n\n            while ((halfHeight / inSampleSize) >= reqHeight\n                    && (halfWidth / inSampleSize) >= reqWidth) {\n                inSampleSize *= 2;\n            }\n        }\n\n        Log.i(\"Bitmap\", \"inSampleSize = \" + String.valueOf(inSampleSize));\n\n        return inSampleSize;\n    }\n\n    private Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) {\n        final BitmapFactory.Options options = new BitmapFactory.Options();\n        options.inJustDecodeBounds = true;\n        BitmapFactory.decodeFile(path, options);\n\n        options.inJustDecodeBounds = false;\n        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);\n\n        return BitmapFactory.decodeFile(path, options);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/tasks/ImageCacheSaveTask.java",
    "content": "package net.iquesoft.iquephoto.tasks;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.net.Uri;\nimport android.os.AsyncTask;\nimport android.support.v4.content.FileProvider;\n\nimport net.iquesoft.iquephoto.BuildConfig;\n\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.IOException;\nimport java.io.OutputStream;\n\npublic class ImageCacheSaveTask extends AsyncTask<Void, Void, Uri> {\n    private Bitmap mBitmap;\n    private Context mContext;\n\n    private OnImageCacheSaveListener mOnImageCacheSaveListener;\n\n    public interface OnImageCacheSaveListener {\n        void onSaveStarted();\n\n        void onImageSaved(Uri uri);\n    }\n\n    public void setOnImageLoadedListener(OnImageCacheSaveListener onImageCacheSaveListener) {\n        mOnImageCacheSaveListener = onImageCacheSaveListener;\n    }\n\n    public ImageCacheSaveTask(Context context, Bitmap bitmap) {\n        mBitmap = bitmap;\n        mContext = context;\n    }\n\n    @Override\n    protected void onPreExecute() {\n        super.onPreExecute();\n        mOnImageCacheSaveListener.onSaveStarted();\n    }\n\n    @Override\n    protected Uri doInBackground(Void... voids) {\n        Uri uri = null;\n\n        try {\n            uri = FileProvider.getUriForFile(mContext,\n                    BuildConfig.APPLICATION_ID + \".provider\",\n                    getTempFile(mContext));\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n\n        if (uri != null) {\n            OutputStream outputStream = null;\n            try {\n                outputStream = mContext.getContentResolver()\n                        .openOutputStream(uri);\n            } catch (FileNotFoundException e) {\n                e.printStackTrace();\n            }\n\n            if (outputStream != null) {\n                mBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);\n            }\n        }\n\n        return uri;\n    }\n\n    @Override\n    protected void onPostExecute(Uri uri) {\n        super.onPostExecute(uri);\n\n        mOnImageCacheSaveListener.onImageSaved(uri);\n    }\n\n    private File getTempFile(Context context) throws IOException {\n        return File.createTempFile(\"temp\", \".jpeg\", context.getCacheDir());\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/tasks/ImageFetchTask.java",
    "content": "package net.iquesoft.iquephoto.tasks;\n\nimport android.content.Context;\nimport android.database.Cursor;\nimport android.os.AsyncTask;\nimport android.provider.MediaStore;\n\nimport net.iquesoft.iquephoto.models.Image;\nimport net.iquesoft.iquephoto.models.ImageAlbum;\n\nimport java.io.File;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\npublic class ImageFetchTask extends AsyncTask<Void, Void, List<ImageAlbum>> {\n    private Context mContext;\n    private List<ImageAlbum> mFoldersList;\n\n    private final String[] mProjection = new String[]{\n            MediaStore.Images.Media._ID,\n            MediaStore.Images.Media.DATA,\n            MediaStore.Images.Media.BUCKET_DISPLAY_NAME\n    };\n\n    private OnImageLoadedListener mListener;\n\n    public interface OnImageLoadedListener {\n        void onImageLoaded(List<ImageAlbum> imageAlba);\n    }\n\n    public void setOnImageLoadedListener(OnImageLoadedListener listener) {\n        mListener = listener;\n    }\n\n    public ImageFetchTask(Context context) {\n        mContext = context;\n    }\n\n    @Override\n    protected void onPreExecute() {\n        super.onPreExecute();\n    }\n\n    @Override\n    protected List<ImageAlbum> doInBackground(Void... params) {\n        Cursor cursor = mContext.getContentResolver()\n                .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, mProjection,\n                        null, null, MediaStore.Images.Media.DATE_ADDED);\n\n        Map<String, ImageAlbum> folderMap = new HashMap<>();\n\n        if (cursor != null) {\n            if (cursor.moveToLast())\n                do {\n                    int id = cursor.getInt(cursor.getColumnIndex(mProjection[0]));\n                    String path = cursor.getString(cursor.getColumnIndex(mProjection[1]));\n                    String folderName = cursor.getString(cursor.getColumnIndex(mProjection[2]));\n\n                    File file = new File(path);\n                    if (file.exists()) {\n                        Image image = new Image(id, path);\n\n                        ImageAlbum imageAlbum = folderMap.get(folderName);\n                        if (imageAlbum == null) {\n                            imageAlbum = new ImageAlbum(folderName);\n                            folderMap.put(folderName, imageAlbum);\n                        }\n                        imageAlbum.getImages().add(image);\n                    }\n                } while (cursor.moveToPrevious());\n            cursor.close();\n        }\n\n        if (!folderMap.isEmpty())\n            mFoldersList = new ArrayList<>(folderMap.values());\n\n        return mFoldersList;\n    }\n\n    @Override\n    protected void onPostExecute(List<ImageAlbum> imageAlba) {\n        super.onPostExecute(imageAlba);\n        mListener.onImageLoaded(imageAlba);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/tasks/ImageSaveTask.java",
    "content": "package net.iquesoft.iquephoto.tasks;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.os.AsyncTask;\nimport android.os.Environment;\nimport android.util.Log;\nimport android.widget.Toast;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.ui.dialogs.LoadingDialog;\n\nimport java.io.File;\nimport java.io.FileNotFoundException;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\npublic class ImageSaveTask extends AsyncTask<Void, Void, Void> {\n    private static final String TAG = ImageSaveTask.class.getSimpleName();\n\n    private final static String IMAGE_STORAGE_PATH = Environment.getExternalStorageDirectory().toString() + \"/\" +\n            android.os.Environment.DIRECTORY_DCIM + \"/iQuePhoto\";\n\n    private Bitmap mBitmap;\n    private Context mContext;\n\n    private LoadingDialog mLoadingDialog;\n\n    public ImageSaveTask(Context context, Bitmap bitmap) {\n        mBitmap = bitmap;\n        mContext = context;\n\n        mLoadingDialog = new LoadingDialog(context);\n    }\n\n    @Override\n    protected void onPreExecute() {\n        super.onPreExecute();\n        mLoadingDialog.show();\n    }\n\n    @Override\n    protected Void doInBackground(Void... voids) {\n        File file = getOutputMediaFile();\n        if (file == null) {\n            Log.d(TAG,\n                    \"Error creating media file, check storage permissions: \");\n            return null;\n        }\n        try {\n            FileOutputStream fileOutputStream = new FileOutputStream(file);\n            mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);\n            fileOutputStream.close();\n        } catch (FileNotFoundException e) {\n            Log.d(TAG, \"File not found: \" + e.getMessage());\n        } catch (IOException e) {\n            Log.d(TAG, \"Error accessing file: \" + e.getMessage());\n        }\n\n        return null;\n    }\n\n    @Override\n    protected void onPostExecute(Void aVoid) {\n        super.onPostExecute(aVoid);\n        mLoadingDialog.dismiss();\n\n        Toast.makeText(mContext, R.string.image_saved, Toast.LENGTH_SHORT).show();\n    }\n\n    private File getOutputMediaFile() {\n        File mediaStorageDir = new File(IMAGE_STORAGE_PATH);\n\n        if (!mediaStorageDir.exists()) {\n            if (!mediaStorageDir.mkdirs()) {\n                return null;\n            }\n        }\n        String timeStamp = new SimpleDateFormat(\"yyyyMMdd_HHmmss\").format(new Date());\n        File mediaFile;\n        String mImageName = \"iQuePhoto_\" + timeStamp + \".jpg\";\n        mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);\n        return mediaFile;\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/activities/EditorActivity.java",
    "content": "package net.iquesoft.iquephoto.ui.activities;\n\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.Paint;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.annotation.StringRes;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.app.FragmentManager;\nimport android.support.v4.app.FragmentTransaction;\nimport android.support.v7.app.AlertDialog;\nimport android.support.v7.view.menu.MenuBuilder;\nimport android.support.v7.view.menu.MenuPopupHelper;\nimport android.support.v7.widget.Toolbar;\nimport android.util.Log;\nimport android.view.Menu;\nimport android.view.MenuInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.widget.Button;\nimport android.widget.FrameLayout;\nimport android.widget.Toast;\n\nimport com.arellomobile.mvp.MvpAppCompatActivity;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.EditorListener;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.presentation.presenters.activity.EditorActivityPresenter;\nimport net.iquesoft.iquephoto.presentation.views.activity.EditorActivityView;\nimport net.iquesoft.iquephoto.tasks.ImageSaveTask;\nimport net.iquesoft.iquephoto.ui.dialogs.LoadingDialog;\nimport net.iquesoft.iquephoto.ui.fragments.TransparencyFragment;\nimport net.iquesoft.iquephoto.ui.fragments.ToolsFragment;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\n\nimport static net.iquesoft.iquephoto.presentation.presenters.activity.EditorActivityPresenter.FACEBOOK_PACKAGE_NAME;\nimport static net.iquesoft.iquephoto.presentation.presenters.activity.EditorActivityPresenter.INSTAGRAM_PACKAGE_NAME;\n\npublic class EditorActivity extends MvpAppCompatActivity implements EditorActivityView {\n    @InjectPresenter\n    EditorActivityPresenter mPresenter;\n\n    @ProvidePresenter\n    EditorActivityPresenter provideEditorPresenter() {\n        return new EditorActivityPresenter(this, getIntent());\n    }\n\n    @BindView(R.id.toolbar_editor)\n    Toolbar mToolbar;\n\n    @BindView(R.id.button_undo)\n    Button mUndoButton;\n\n    @BindView(R.id.image_editor_view)\n    ImageEditorView mImageEditorView;\n\n    @BindView(R.id.frame_layout_fragment_container)\n    FrameLayout mFragmentContainer;\n\n    private MenuPopupHelper mMenuPopupHelper;\n\n    private FragmentManager mFragmentManager;\n\n    private LoadingDialog mLoadingDialog;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_editor);\n\n        ButterKnife.bind(this);\n\n        setSupportActionBar(mToolbar);\n\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            mToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);\n        }\n\n        mLoadingDialog = new LoadingDialog(this);\n\n        mImageEditorView.setMvpDelegate(getMvpDelegate());\n\n        mImageEditorView.setUndoListener(new EditorListener() {\n            @Override\n            public void onTransparencyHandleButtonClicked(Paint paint) {\n                setupFragment(TransparencyFragment.newInstance(paint));\n            }\n\n            @Override\n            public void hasChanges(int count) {\n                if (count != 0) {\n                    mUndoButton.setText(String.valueOf(count));\n                } else {\n                    mUndoButton.setText(String.valueOf(0));\n                    mUndoButton.setVisibility(View.GONE);\n                }\n            }\n\n            @Override\n            public void onAppliedImageSaved(Uri uri) {\n                // set the image uri from cache for share this image later\n                mPresenter.setAlteredImageUri(uri);\n\n                // ToolsFragment.class.getSimpleName();\n\n                // return to ToolsFragment\n                mFragmentManager.popBackStack();\n            }\n        });\n\n        ToolbarUtil.showTitle(false, this);\n\n        mFragmentManager = getSupportFragmentManager();\n        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();\n        fragmentTransaction.add(\n                mFragmentContainer.getId(), new ToolsFragment(), ToolsFragment.class.getSimpleName()\n        ).commit();\n\n\n        Log.i(\"BackStack\", String.valueOf(mFragmentManager.getBackStackEntryCount()));\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_editor, menu);\n\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        switch (item.getItemId()) {\n            case R.id.action_share:\n                showSharePopupMenu();\n                break;\n            case R.id.action_apply:\n                mImageEditorView.applyChanges();\n                break;\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n\n    private void showSharePopupMenu() {\n        if (mMenuPopupHelper == null) {\n            MenuBuilder menuBuilder = new MenuBuilder(this);\n            menuBuilder.setCallback(new MenuBuilder.Callback() {\n                @Override\n                public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {\n                    Bitmap bitmap = mImageEditorView.getAlteredImageBitmap();\n\n                    switch (item.getItemId()) {\n                        case R.id.action_save:\n                            mPresenter.save(bitmap);\n                            return true;\n                        case R.id.action_instagram:\n                            mPresenter.share(INSTAGRAM_PACKAGE_NAME);\n                            return true;\n                        case R.id.action_facebook:\n                            mPresenter.share(FACEBOOK_PACKAGE_NAME);\n                            return true;\n                        case R.id.action_more:\n                            mPresenter.share(null);\n                            return true;\n                    }\n                    return false;\n                }\n\n                @Override\n                public void onMenuModeChange(MenuBuilder menu) {\n\n                }\n            });\n\n            MenuInflater menuInflater = new MenuInflater(this);\n            menuInflater.inflate(R.menu.menu_share, menuBuilder);\n            mMenuPopupHelper = new MenuPopupHelper(this, menuBuilder, findViewById(R.id.action_share));\n            mMenuPopupHelper.setForceShowIcon(true);\n            mMenuPopupHelper.show();\n        } else {\n            mMenuPopupHelper.show();\n        }\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n    }\n\n    @Override\n    public boolean onSupportNavigateUp() {\n        onBackPressed();\n        return super.onSupportNavigateUp();\n    }\n\n    @Override\n    public void onBackPressed() {\n        if (mFragmentManager.getBackStackEntryCount() == 0) {\n            mPresenter.onBackPressed(mImageEditorView.getAlteredImageBitmap());\n        } else if (mFragmentManager.getBackStackEntryCount() == 1) {\n            mToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);\n            ToolbarUtil.showTitle(false, this);\n            navigateBack(true);\n        } else if (mFragmentManager.getBackStackEntryCount() > 1) {\n            ToolbarUtil.updateSubtitle(null, this);\n            navigateBack(true);\n        }\n    }\n\n    @Override\n    public void startEditing(Bitmap bitmap) {\n        mImageEditorView.setImageBitmap(bitmap);\n    }\n\n    @Override\n    public void showLoading() {\n        mLoadingDialog.show();\n    }\n\n    @Override\n    public void hideLoading() {\n        mLoadingDialog.dismiss();\n    }\n\n    @Override\n    public void showAlertDialog() {\n        AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialog);\n        builder.setMessage(getString(R.string.on_back_alert))\n                .setPositiveButton(getString(R.string.ok), (dialogInterface, i) -> finish())\n                .setNeutralButton(getString(R.string.save), ((dialogInterface1, i) ->\n                        new ImageSaveTask(this, mImageEditorView.getAlteredImageBitmap()).execute())\n                )\n                .setNegativeButton(getString(R.string.cancel), (dialogInterface, i1) -> dialogInterface.dismiss())\n                .show();\n    }\n\n    @Override\n    public void showApplicationNotExistAlertDialog(@StringRes int messageBody, @NonNull String packageName) {\n        AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialog);\n        builder.setTitle(getString(R.string.application_does_not_exist));\n        builder.setMessage(getString(messageBody));\n        builder.setPositiveButton(getString(R.string.install), (dialogInterface, i) -> {\n            try {\n                startActivity(new Intent(Intent.ACTION_VIEW,\n                        Uri.parse(\"market://details?id=\" + packageName)));\n            } catch (android.content.ActivityNotFoundException e) {\n                startActivity(new Intent(Intent.ACTION_VIEW,\n                        Uri.parse(\"https://play.google.com/store/apps/details?id=\" + packageName)));\n            }\n        });\n\n        builder.setNegativeButton(getString(R.string.dismiss), (dialogInterface, i1) -> dialogInterface.dismiss());\n        builder.show();\n    }\n\n    public void setupFragment(Fragment fragment) {\n        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();\n        fragmentTransaction.replace(mFragmentContainer.getId(), fragment)\n                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)\n                .addToBackStack(null)\n                .commit();\n\n        mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);\n        ToolbarUtil.showTitle(true, this);\n        mUndoButton.setVisibility(View.GONE);\n\n        Log.i(\"BackStack\", String.valueOf(mFragmentManager.getBackStackEntryCount()));\n    }\n\n    @Override\n    public void showToastMessage(int stringResource) {\n        Toast.makeText(getApplicationContext(), getString(stringResource), Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void navigateBack(boolean isFragment) {\n        if (isFragment) {\n            if (mFragmentManager.getBackStackEntryCount() > 1)\n                super.onBackPressed();\n            else if (mFragmentManager.getBackStackEntryCount() == 0)\n                mPresenter.onBackPressed(mImageEditorView.getAlteredImageBitmap());\n            else if (mFragmentManager.getBackStackEntryCount() == 1) {\n                super.onBackPressed();\n            }\n        } else finish();\n    }\n\n    @Override\n    public void share(@NonNull Uri uri, @Nullable String packageName) {\n        Intent intent = new Intent(Intent.ACTION_SEND);\n        intent.setType(\"image/*\");\n        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n        //intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);\n        intent.putExtra(Intent.EXTRA_STREAM, uri);\n        if (packageName != null) {\n            intent.setPackage(packageName);\n        }\n\n        startActivity(intent);\n    }\n\n    @OnClick(R.id.button_undo)\n    void onClickUndo() {\n        mImageEditorView.undo();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/activities/GalleryActivity.java",
    "content": "package net.iquesoft.iquephoto.ui.activities;\n\nimport android.os.Bundle;\nimport android.support.v4.app.FragmentManager;\nimport android.support.v4.app.FragmentTransaction;\nimport android.support.v7.widget.Toolbar;\n\nimport com.arellomobile.mvp.MvpAppCompatActivity;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.models.ImageAlbum;\nimport net.iquesoft.iquephoto.presentation.presenters.activity.GalleryActivityPresenter;\nimport net.iquesoft.iquephoto.presentation.views.activity.GalleryView;\nimport net.iquesoft.iquephoto.ui.fragments.GalleryAlbumsFragment;\nimport net.iquesoft.iquephoto.ui.fragments.GalleryImagesFragment;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\npublic class GalleryActivity extends MvpAppCompatActivity implements GalleryView {\n    @InjectPresenter\n    GalleryActivityPresenter mPresenter;\n\n    @BindView(R.id.toolbar_gallery)\n    Toolbar mToolbar;\n\n    private FragmentManager mFragmentManager;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_gallery);\n\n        ButterKnife.bind(this);\n\n        setSupportActionBar(mToolbar);\n\n        if (getSupportActionBar() != null) {\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n            mToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);\n        }\n\n        mFragmentManager = getSupportFragmentManager();\n\n        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();\n        fragmentTransaction.add(R.id.galleryFragmentFrameLayout, new GalleryAlbumsFragment())\n                .commit();\n    }\n\n    @Override\n    public boolean onSupportNavigateUp() {\n        onBackPressed();\n        return super.onSupportNavigateUp();\n    }\n\n    @Override\n    public void onBackPressed() {\n        if (mFragmentManager.getBackStackEntryCount() == 1) {\n            super.onBackPressed();\n            mToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);\n            mToolbar.setTitle(R.string.gallery);\n        } else {\n            finish();\n        }\n    }\n\n    @Override\n    public void showImages(ImageAlbum imageAlbum) {\n        mToolbar.setTitle(imageAlbum.getName());\n        mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);\n\n        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();\n        fragmentTransaction.replace(R.id.galleryFragmentFrameLayout, GalleryImagesFragment.newInstance(imageAlbum.getImages()))\n                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)\n                .addToBackStack(null)\n                .commit();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/activities/HomeActivity.java",
    "content": "package net.iquesoft.iquephoto.ui.activities;\n\nimport android.content.Intent;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.provider.MediaStore;\nimport android.provider.Settings;\nimport android.support.annotation.StringRes;\nimport android.support.v7.app.AlertDialog;\n\nimport com.arellomobile.mvp.MvpAppCompatActivity;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.presentation.presenters.activity.HomeActivityPresenter;\nimport net.iquesoft.iquephoto.presentation.views.activity.HomeView;\n\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\n\npublic class HomeActivity extends MvpAppCompatActivity implements HomeView {\n    public static final int REQ_CAMERA = 1;\n\n    @InjectPresenter\n    HomeActivityPresenter mPresenter;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n\n        setContentView(R.layout.activity_home);\n\n        ButterKnife.bind(this);\n    }\n\n    @OnClick(R.id.button_camera)\n    void onClickCamera() {\n        mPresenter.openCamera(this);\n    }\n\n    @OnClick(R.id.gallery_button)\n    void onClickGallery() {\n        mPresenter.openGallery(this);\n    }\n\n    @Override\n    protected void onActivityResult(int requestCode, int resultCode, Intent data) {\n        super.onActivityResult(requestCode, resultCode, data);\n        mPresenter.startEditing(requestCode, resultCode);\n    }\n\n    @Override\n    public void startGallery() {\n        Intent intent = new Intent(HomeActivity.this, GalleryActivity.class);\n        startActivity(intent);\n    }\n\n    @Override\n    public void startCamera(Uri uri) {\n        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);\n        if (intent.resolveActivity(getPackageManager()) != null) {\n            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);\n            startActivityForResult(intent, REQ_CAMERA);\n        }\n    }\n\n    @Override\n    public void startEditing(String photoPath) {\n        Intent intent = new Intent(HomeActivity.this, PreviewActivity.class);\n        intent.putExtra(PreviewActivity.IMAGE_PATH, photoPath);\n        startActivity(intent);\n    }\n\n    @Override\n    public void showPermissionDenied(@StringRes int message) {\n        AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialog)\n                .setTitle(getString(R.string.permission_denied))\n                .setMessage(getString(message))\n                .setPositiveButton(getString(R.string.go_to_app_settings), (dialogInterface, i) -> {\n                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,\n                            Uri.parse(\"package:\" + \"net.iquesoft.iquephoto\"));\n                    intent.addCategory(Intent.CATEGORY_DEFAULT);\n                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n                    startActivity(intent);\n                    finish();\n                })\n                .setNegativeButton(getString(R.string.dismiss), (dialogInterface, i1) -> dialogInterface.dismiss());\n        builder.show();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/activities/PreviewActivity.java",
    "content": "package net.iquesoft.iquephoto.ui.activities;\n\nimport android.content.Intent;\nimport android.graphics.Bitmap;\nimport android.graphics.drawable.Drawable;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.support.annotation.Nullable;\nimport android.support.annotation.StringRes;\nimport android.support.design.widget.TabLayout;\nimport android.support.v7.widget.Toolbar;\nimport android.view.Menu;\nimport android.view.MenuItem;\n\nimport com.arellomobile.mvp.MvpAppCompatActivity;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\nimport com.isseiaoki.simplecropview.CropImageView;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.presentation.presenters.activity.PreviewActivityPresenter;\nimport net.iquesoft.iquephoto.presentation.views.activity.PreviewView;\nimport net.iquesoft.iquephoto.ui.dialogs.LoadingDialog;\nimport net.iquesoft.iquephoto.utils.LogHelper;\n\nimport java.io.File;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\n\npublic class PreviewActivity extends MvpAppCompatActivity implements PreviewView {\n    public static final String IMAGE_PATH = \"image path\";\n\n    @InjectPresenter\n    PreviewActivityPresenter mPresenter;\n\n    @ProvidePresenter\n    PreviewActivityPresenter providePreviewPresenter() {\n        return new PreviewActivityPresenter(this, getIntent());\n    }\n\n    @BindView(R.id.toolbar_preview)\n    Toolbar mToolbar;\n\n    @BindView(R.id.tab_layout_crop)\n    TabLayout mTabLayout;\n\n    @BindView(R.id.crop_image_view)\n    CropImageView mCropImageView;\n\n    private LoadingDialog mLoadingDialog;\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_preview);\n\n        ButterKnife.bind(this);\n\n        setSupportActionBar(mToolbar);\n\n        if (getSupportActionBar() != null)\n            getSupportActionBar().setDisplayHomeAsUpEnabled(true);\n\n        mLoadingDialog = new LoadingDialog(this);\n\n        mToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);\n        mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {\n            @Override\n            public void onTabSelected(TabLayout.Tab tab) {\n                mPresenter.changeCropMode(tab);\n            }\n\n            @Override\n            public void onTabUnselected(TabLayout.Tab tab) {\n\n            }\n\n            @Override\n            public void onTabReselected(TabLayout.Tab tab) {\n\n            }\n        });\n    }\n\n    @Override\n    public boolean onCreateOptionsMenu(Menu menu) {\n        getMenuInflater().inflate(R.menu.menu_crop, menu);\n\n        return super.onCreateOptionsMenu(menu);\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        switch (item.getItemId()) {\n            case R.id.action_crop:\n                mPresenter.cropImage(createSaveUri(), mCropImageView);\n                break;\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n\n    @Override\n    public boolean onSupportNavigateUp() {\n        super.onBackPressed();\n        return super.onSupportNavigateUp();\n    }\n\n    @OnClick(R.id.button_flip_horizontal)\n    void onClickFlipHorizontal() {\n        mPresenter.flipImageHorizontal(mCropImageView.getImageBitmap());\n    }\n\n    @OnClick(R.id.button_flip_vertical)\n    void onClickFlipVertical() {\n        mPresenter.flipImageVertical(mCropImageView.getImageBitmap());\n    }\n\n    @OnClick(R.id.button_rotate_left)\n    void onClickRotateLeft() {\n        mCropImageView.rotateImage(CropImageView.RotateDegrees.ROTATE_M90D);\n    }\n\n    @OnClick(R.id.button_rotate_right)\n    void onClickRotateRight() {\n        mCropImageView.rotateImage(CropImageView.RotateDegrees.ROTATE_90D);\n    }\n\n    public Uri createSaveUri() {\n        return Uri.fromFile(new File(getCacheDir(), \"cropped\"));\n    }\n\n    @Override\n    public void setupImage(Bitmap bitmap) {\n        mCropImageView.setImageBitmap(bitmap);\n\n        LogHelper.logBitmap(\"Preview Bitmap\", bitmap);\n    }\n\n    @Override\n    public void onCropModeChanged(CropImageView.CropMode cropMode) {\n        mCropImageView.setCropMode(cropMode);\n    }\n\n    @Override\n    public void startEditingImage(Uri uri) {\n        Intent intent = new Intent(PreviewActivity.this, EditorActivity.class);\n        intent.setData(uri);\n        startActivity(intent);\n        mLoadingDialog.dismiss();\n        finish();\n    }\n\n    @Override\n    public void showProgress() {\n        mLoadingDialog.show();\n    }\n\n    @Override\n    public void flipImage(Drawable drawable) {\n        mCropImageView.setImageDrawable(drawable);\n    }\n\n    @Override\n    public void dismissProgress() {\n        //mProgressDialog.dismiss();\n    }\n\n    @Override\n    public void createTab(@StringRes int title, boolean selected) {\n        mTabLayout.addTab(mTabLayout.newTab().setText(title), selected);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/dialogs/ColorPickerDialog.java",
    "content": "package net.iquesoft.iquephoto.ui.dialogs;\n\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.os.Bundle;\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.Window;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.ColorAdapter;\nimport net.iquesoft.iquephoto.models.EditorColor;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\n\npublic class ColorPickerDialog extends Dialog {\n    private EditorColor mColor;\n    private Context mContext;\n\n    //private RGBColorPickerDialog mRGBColorPickerDialog;\n\n    private OnColorClickListener mOnColorClickListener;\n\n    public interface OnColorClickListener {\n        void onClick(EditorColor editorColor);\n    }\n\n    private ColorAdapter mAdapter;\n\n    @BindView(R.id.colorRecyclerView)\n    RecyclerView recyclerView;\n\n    public ColorPickerDialog(Context context) {\n        super(context);\n        mContext = context;\n\n        //mRGBColorPickerDialog = new RGBColorPickerDialog(context);\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        requestWindowFeature(Window.FEATURE_NO_TITLE);\n        setContentView(R.layout.dialog_color_picker);\n\n        ButterKnife.bind(this);\n\n        mAdapter = new ColorAdapter(EditorColor.getColorsList());\n        mAdapter.setOnColorClickListener(editorColor ->\n                mColor = editorColor\n        );\n\n        recyclerView.setLayoutManager(new GridLayoutManager(mContext, 4));\n        recyclerView.setAdapter(mAdapter);\n    }\n\n    @OnClick(R.id.applyColor)\n    void onClickApply() {\n        mOnColorClickListener.onClick(mColor);\n        dismiss();\n    }\n\n    @OnClick(R.id.cancelColor)\n    void onClickCancel() {\n        dismiss();\n    }\n\n    public void setOnColorClickListener(OnColorClickListener onColorClickListener) {\n        mOnColorClickListener = onColorClickListener;\n\n        //mRGBColorPickerDialog.setOnColorClickListener(onColorClickListener);\n    }\n\n    @OnClick(R.id.rgbButton)\n    void onClickRGB() {\n        dismiss();\n        // mRGBColorPickerDialog.show();\n    }\n\n    @OnClick(R.id.argbButton)\n    void onClikcARGB() {\n        dismiss();\n    }\n\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/dialogs/FontPickerDialog.java",
    "content": "package net.iquesoft.iquephoto.ui.dialogs;\n\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.graphics.Typeface;\nimport android.graphics.drawable.ColorDrawable;\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.Window;\n\nimport net.iquesoft.iquephoto.App;\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.FontsAdapter;\nimport net.iquesoft.iquephoto.models.Font;\n\nimport java.util.List;\n\nimport javax.inject.Inject;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\n\nimport static android.graphics.Color.TRANSPARENT;\n\npublic class FontPickerDialog extends Dialog {\n    @Inject\n    List<Font> mFonts;\n\n    @BindView(R.id.fontsRecyclerView)\n    RecyclerView fontsList;\n\n    private String mText;\n    private Context mContext;\n\n    private Typeface mTypeface;\n\n    private OnFontClickListener mOnFontClickListener;\n\n    public interface OnFontClickListener {\n        void onClick(Typeface typeface);\n    }\n\n    private boolean mBold;\n    private boolean mItalic;\n\n    public FontPickerDialog(Context context) {\n        super(context);\n        mContext = context;\n    }\n\n    public FontPickerDialog(Context context, int themeResId) {\n        super(context, themeResId);\n        mContext = context;\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        requestWindowFeature(Window.FEATURE_NO_TITLE);\n        if (getWindow() != null) {\n            getWindow().setBackgroundDrawable(new ColorDrawable(TRANSPARENT));\n        }\n        setContentView(R.layout.dialog_font_picker);\n\n        ButterKnife.bind(this);\n\n        App.getAppComponent().inject(this);\n\n        initFontsList();\n    }\n\n    /*@OnClick(R.id.applyFontButton)\n    void onClickApply() {\n        mOnFontClickListener.onFilterClicked(mTypeface);\n        dismiss();\n    }\n\n    @OnClick(R.id.cancelTextStyle)\n    void onClickCancel() {\n        dismiss();\n    }*/\n\n    private void initFontsList() {\n        FontsAdapter fontsAdapter = new FontsAdapter(mFonts);\n        fontsList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));\n\n        fontsAdapter.setOnFontClickListener(font ->\n                mTypeface = Typeface.createFromAsset(mContext.getAssets(), font.getPath())\n        );\n\n        fontsList.setAdapter(fontsAdapter);\n    }\n\n    public void setOnFontClickListener(OnFontClickListener onFontClickListener) {\n        mOnFontClickListener = onFontClickListener;\n    }\n\n    public boolean isItalic() {\n        return mItalic;\n    }\n\n    public void setItalic(boolean italic) {\n        mItalic = italic;\n    }\n\n    public boolean isBold() {\n        return mBold;\n    }\n\n    public void setBold(boolean bold) {\n        mBold = bold;\n    }\n\n    public String getText() {\n        return mText;\n    }\n\n    public void setText(String text) {\n        mText = text;\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/dialogs/LoadingDialog.java",
    "content": "package net.iquesoft.iquephoto.ui.dialogs;\n\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.graphics.drawable.ColorDrawable;\nimport android.os.Bundle;\nimport android.view.Window;\n\nimport net.iquesoft.iquephoto.R;\n\npublic class LoadingDialog extends Dialog {\n\n    public LoadingDialog(Context context) {\n        super(context);\n    }\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        requestWindowFeature(Window.FEATURE_NO_TITLE);\n        if (getWindow() != null) {\n            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));\n        }\n        setContentView(R.layout.dialog_loading);\n        setCanceledOnTouchOutside(false);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/AdjustFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.support.v4.app.Fragment;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.Menu;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.adapters.AdjustAdapter;\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Adjust;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.AdjustPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.AdjustView;\nimport net.iquesoft.iquephoto.ui.activities.EditorActivity;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.NONE;\n\npublic class AdjustFragment extends MvpAppCompatFragment implements AdjustView {\n    @InjectPresenter\n    AdjustPresenter mPresenter;\n\n    @BindView(R.id.recycler_view_adjust)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setHasOptionsMenu(true);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_adjust, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        ((ImageEditorView) getActivity().findViewById(R.id.image_editor_view))\n                .changeTool(NONE);\n        ToolbarUtil.updateTitle(R.string.adjust, getActivity());\n        ToolbarUtil.updateSubtitle(null, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void onPrepareOptionsMenu(Menu menu) {\n        super.onPrepareOptionsMenu(menu);\n        menu.removeItem(R.id.action_share);\n    }\n\n    @Override\n    public void setupAdapter(List<Adjust> adjusts) {\n        AdjustAdapter adapter = new AdjustAdapter(adjusts);\n        adapter.setOnAdjustClickListener(adjust -> mPresenter.changeAdjust(adjust));\n        mRecyclerView.setLayoutManager(\n                new LinearLayoutManager(null, LinearLayout.HORIZONTAL, false)\n        );\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void adjustChanged(Fragment fragment) {\n        ((EditorActivity) getActivity())\n                .setupFragment(fragment);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/DrawingFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.support.annotation.ColorInt;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.ColorAdapter;\nimport net.iquesoft.iquephoto.adapters.SizesAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.BrushSize;\nimport net.iquesoft.iquephoto.models.EditorColor;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.DrawingPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.DrawingView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.DRAWING;\n\npublic class DrawingFragment extends ToolFragment implements DrawingView {\n    @InjectPresenter\n    DrawingPresenter mPresenter;\n\n    @BindView(R.id.recycler_view_sizes)\n    RecyclerView mSizesRecyclerView;\n\n    @BindView(R.id.recycler_view_colors)\n    RecyclerView mColorsRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    public static DrawingFragment newInstance() {\n        return new DrawingFragment();\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView = (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_drawing, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mImageEditorView.changeTool(DRAWING);\n        ToolbarUtil.updateTitle(R.string.drawing, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupSizesAdapter(List<BrushSize> sizes) {\n        SizesAdapter adapter = new SizesAdapter(sizes);\n        adapter.setOnSizeClickListener(size ->\n                mImageEditorView.setBrushSize(size.getSize())\n        );\n        mSizesRecyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        mSizesRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void setupColorsAdapter(List<EditorColor> colors) {\n        ColorAdapter adapter = new ColorAdapter(colors);\n        adapter.setOnColorClickListener(editorColor ->\n                mPresenter.changeBrushColor(getContext(), editorColor)\n        );\n        mColorsRecyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        mColorsRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void onBrushColorChanged(@ColorInt int color) {\n        mImageEditorView.setBrushColor(color);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/FiltersFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.graphics.ColorMatrix;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.support.v4.app.Fragment;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.FiltersAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Filter;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.FiltersPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.FiltersView;\nimport net.iquesoft.iquephoto.ui.activities.EditorActivity;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.FILTERS;\n\npublic class FiltersFragment extends ToolFragment implements FiltersView {\n    @InjectPresenter\n    FiltersPresenter mPresenter;\n\n    @ProvidePresenter\n    FiltersPresenter provideFilterPresenter() {\n        return new FiltersPresenter(\n                getContext(), mImageEditorView.getAlteredImageBitmap()\n        );\n    }\n\n    @BindView(R.id.recycler_view_filters)\n    RecyclerView mFiltersRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    public static FiltersFragment newInstance() {\n        return new FiltersFragment();\n    }\n\n    public FiltersFragment() {\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView = (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_filters, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        ToolbarUtil.updateTitle(R.string.filters, getActivity());\n        mImageEditorView.changeTool(FILTERS);\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupFiltersAdapter(Uri uri, List<Filter> filters) {\n        FiltersAdapter adapter = new FiltersAdapter(uri, filters);\n        adapter.setFiltersListener(\n                new FiltersAdapter.OnFilterClickListener() {\n                    @Override\n                    public void onFilterClicked(Filter filter) {\n                        mPresenter.changeFilter(filter);\n                    }\n\n                    @Override\n                    public void onIntensityClicked() {\n                        // TODO: Filter intensity.\n                        //mPresenter.changeFilterIntensity(mImageEditorView.get);\n                    }\n                }\n        );\n\n        mFiltersRecyclerView.setLayoutManager(new LinearLayoutManager(null, LinearLayout.HORIZONTAL, false));\n        mFiltersRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void filterChanged(ColorMatrix colorMatrix) {\n        mImageEditorView.setFilter(colorMatrix);\n    }\n\n    @Override\n    public void onChangeFilterIntensityClicked(Fragment fragment) {\n        ((EditorActivity) getActivity()).setupFragment(fragment);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/FontsFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.MenuItem;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Toast;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.FontsAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Font;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.FontsPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.FontsView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.TEXT;\n\npublic class FontsFragment extends ToolFragment implements FontsView {\n    @InjectPresenter\n    FontsPresenter presenter;\n\n    @BindView(R.id.fontsRecyclerView)\n    RecyclerView recyclerView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    public static FontsFragment newInstance() {\n        return new FontsFragment();\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView = (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_fonts, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mImageEditorView.changeTool(TEXT);\n        ToolbarUtil.updateSubtitle(R.string.font, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public boolean onOptionsItemSelected(MenuItem item) {\n        if (item.getItemId() == R.id.action_apply) {\n            Toast.makeText(getContext(), \"Da\", Toast.LENGTH_SHORT).show();\n        }\n\n        return super.onOptionsItemSelected(item);\n    }\n\n    @Override\n    public void setupAdapter(List<Font> fonts) {\n        FontsAdapter adapter = new FontsAdapter(fonts);\n        recyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        recyclerView.setAdapter(adapter);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/FramesFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.graphics.Bitmap;\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.FramesAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Frame;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.FramesPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.FramesView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.FRAMES;\n\npublic class FramesFragment extends ToolFragment implements FramesView {\n    @InjectPresenter\n    FramesPresenter mPresenter;\n\n    @BindView(R.id.recycler_view_frames)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView = (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_frames, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        ToolbarUtil.updateTitle(R.string.frames, getActivity());\n        mImageEditorView.changeTool(FRAMES);\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupAdapter(List<Frame> frames) {\n        FramesAdapter adapter = new FramesAdapter(frames);\n        adapter.setFramesListener(frame -> mPresenter.changeOverlay(getContext(), frame));\n        mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void onFrameChanged(Bitmap bitmap) {\n        mImageEditorView.setFrame(bitmap);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/GalleryAlbumsFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.LinearLayout;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.ImageAlbumsAdapter;\nimport net.iquesoft.iquephoto.models.ImageAlbum;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.GalleryAlbumsPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.GalleryAlbumsView;\nimport net.iquesoft.iquephoto.ui.activities.GalleryActivity;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\nimport butterknife.Unbinder;\n\npublic class GalleryAlbumsFragment extends MvpAppCompatFragment implements GalleryAlbumsView {\n    @InjectPresenter\n    GalleryAlbumsPresenter mPresenter;\n\n    @BindView(R.id.recycler_view_albums)\n    RecyclerView mRecyclerView;\n\n    @BindView(R.id.linear_layout_no_images)\n    LinearLayout mNoImagesLinearLayout;\n\n    private Unbinder mUnbinder;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_gallery_albums, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mPresenter.fetchImages(getContext());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void showNoImages() {\n        mNoImagesLinearLayout.setVisibility(View.VISIBLE);\n    }\n\n    @Override\n    public void setupAdapter(List<ImageAlbum> imageAlbums) {\n        if (mNoImagesLinearLayout.getVisibility() == View.VISIBLE) {\n            mNoImagesLinearLayout.setVisibility(View.GONE);\n        }\n\n        ImageAlbumsAdapter adapter = new ImageAlbumsAdapter(imageAlbums);\n        adapter.setOnAlbumClickListener(imageAlbum ->\n                ((GalleryActivity) getActivity()).showImages(imageAlbum));\n        mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @OnClick(R.id.button_take_photo)\n    void onClickTakePhoto() {\n        Intent intent = new Intent(\"app.intent.action.Camera\");\n        startActivity(intent);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/GalleryImagesFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.content.Intent;\nimport android.os.Bundle;\nimport android.support.v7.widget.GridLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.ImagesAdapter;\nimport net.iquesoft.iquephoto.models.Image;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.GalleryImagesPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.GalleryImagesView;\nimport net.iquesoft.iquephoto.ui.activities.PreviewActivity;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\npublic class GalleryImagesFragment extends MvpAppCompatFragment implements GalleryImagesView {\n    public static final String ARG_PARAM = \"images\";\n\n    @InjectPresenter\n    GalleryImagesPresenter mPresenter;\n\n    @ProvidePresenter\n    GalleryImagesPresenter provideGalleryImagesPresenter() {\n        return new GalleryImagesPresenter(getArguments());\n    }\n\n    @BindView(R.id.recycler_view_images)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    public static GalleryImagesFragment newInstance(ArrayList<Image> images) {\n        Bundle args = new Bundle();\n        args.putParcelableArrayList(ARG_PARAM, images);\n\n        GalleryImagesFragment fragment = new GalleryImagesFragment();\n        fragment.setArguments(args);\n\n        return fragment;\n    }\n    \n    public GalleryImagesFragment() {\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_gallery_images, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupAdapter(List<Image> images) {\n        ImagesAdapter adapter = new ImagesAdapter(images);\n\n        adapter.setOnImageClickListener(image -> mPresenter.setImageForEdit(image));\n\n        mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void editImage(String imagePath) {\n        Intent intent = new Intent(getActivity(), PreviewActivity.class);\n        intent.putExtra(PreviewActivity.IMAGE_PATH, imagePath);\n        startActivity(intent);\n        getActivity().finish();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/ImageAdjustmentFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.support.annotation.StringRes;\nimport android.util.Log;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.ImageAdjustmentPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.ImageAdjustmentView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport org.adw.library.widgets.discreteseekbar.DiscreteSeekBar;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\npublic class ImageAdjustmentFragment extends ToolFragment implements ImageAdjustmentView {\n    public static final String ARG_PARAM = \"command\";\n\n    @InjectPresenter\n    ImageAdjustmentPresenter mPresenter;\n\n    @ProvidePresenter\n    ImageAdjustmentPresenter provideImageAdjustmentPresenter() {\n        return new ImageAdjustmentPresenter(getArguments());\n    }\n\n    @BindView(R.id.minValueTextView)\n    TextView mMinValueTextView;\n\n    @BindView(R.id.currentValueTextView)\n    TextView mCurrentValueTextView;\n\n    @BindView(R.id.maxValueTextView)\n    TextView mMaxValueTextView;\n\n    @BindView(R.id.seek_bar_adjust)\n    DiscreteSeekBar mToolSeekBar;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    public static ImageAdjustmentFragment newInstance(EditorTool editorTool) {\n        Bundle args = new Bundle();\n        args.putSerializable(ARG_PARAM, editorTool);\n\n        ImageAdjustmentFragment fragment = new ImageAdjustmentFragment();\n        fragment.setArguments(args);\n\n        return fragment;\n    }\n\n    public ImageAdjustmentFragment() {\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView =\n                (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_slider_control, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        mToolSeekBar.setOnProgressChangeListener(new DiscreteSeekBar.OnProgressChangeListener() {\n            @Override\n            public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {\n                mPresenter.progressChanged(value);\n            }\n\n            @Override\n            public void onStartTrackingTouch(DiscreteSeekBar seekBar) {\n\n            }\n\n            @Override\n            public void onStopTrackingTouch(DiscreteSeekBar seekBar) {\n\n            }\n        });\n\n        return view;\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mPresenter.onResume();\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void changeToolbarTitle(@StringRes int title) {\n        ToolbarUtil.updateTitle(title, getActivity());\n    }\n\n    @Override\n    public void changeToolbarSubtitle(@StringRes int subtitle) {\n        ToolbarUtil.updateSubtitle(subtitle, getActivity());\n    }\n\n    @Override\n    public void onIntensityChanged(int value) {\n        Log.i(\"Adjustment\", \"Filter intensity = \" + String.valueOf(value));\n\n        mImageEditorView.setFilterIntensity(value);\n    }\n\n    @Override\n    public void onBrightnessChanged(int value) {\n        mImageEditorView.setBrightnessValue(value);\n    }\n\n    @Override\n    public void onContrastChanged(int value) {\n        mImageEditorView.setContrastValue(value);\n    }\n\n    @Override\n    public void onSaturationChanged(int value) {\n        mImageEditorView.setSaturationValue(value);\n    }\n\n    @Override\n    public void onWarmthChanged(int value) {\n        mImageEditorView.setWarmthValue(value);\n    }\n\n    @Override\n    public void onStraightenTransformChanged(int value) {\n        mImageEditorView.setStraightenTransformValue(value);\n    }\n\n    @Override\n    public void onVignetteChanged(int value) {\n        mImageEditorView.setVignetteIntensity(value);\n    }\n\n    @Override\n    public void setEditorTool(EditorTool tool) {\n        mImageEditorView.changeTool(tool);\n    }\n\n    @Override\n    public void setSeekBarValues(int minValue, int maxValue, int value) {\n        mToolSeekBar.setMin(minValue);\n        mMinValueTextView.setText(String.valueOf(minValue));\n\n        mToolSeekBar.setProgress(value);\n        mCurrentValueTextView.setText(String.valueOf(value));\n\n        mToolSeekBar.setMax(maxValue);\n        mMaxValueTextView.setText(String.valueOf(maxValue));\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/OverlaysFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.graphics.Bitmap;\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.OverlaysAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Overlay;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.OverlaysPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.OverlaysView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.OVERLAY;\n\npublic class OverlaysFragment extends ToolFragment implements OverlaysView {\n    @InjectPresenter\n    OverlaysPresenter mPresenter;\n\n    @BindView(R.id.recycler_view_overlays)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView =\n                (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_overlay, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        ToolbarUtil.updateTitle(R.string.overlay, getActivity());\n        mImageEditorView.changeTool(OVERLAY);\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupAdapter(List<Overlay> overlays) {\n        OverlaysAdapter adapter = new OverlaysAdapter(overlays);\n        adapter.setOnOverlayClickListener(overlay ->\n                mPresenter.changeOverlay(getContext(), overlay)\n        );\n\n        mRecyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void onOverlayChanged(Bitmap bitmap) {\n        mImageEditorView.setOverlay(bitmap);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/StickersFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.graphics.Bitmap;\nimport android.os.Bundle;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.StringRes;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.StickersAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Sticker;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.StickersPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.StickersView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\npublic class StickersFragment extends ToolFragment implements StickersView {\n    public static final String ARG_TITLE = \"stickers_title\";\n    public static final String ARG_STICKERS = \"stickers\";\n\n    @InjectPresenter\n    StickersPresenter mPresenter;\n\n    @ProvidePresenter\n    StickersPresenter provideStickersPresenter() {\n        return new StickersPresenter(getArguments());\n    }\n\n    @BindView(R.id.stickersRecyclerView)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    public static StickersFragment newInstance(@StringRes int title, @NonNull ArrayList<Sticker> stickers) {\n        StickersFragment fragment = new StickersFragment();\n\n        Bundle args = new Bundle();\n        args.putInt(ARG_TITLE, title);\n        args.putParcelableArrayList(ARG_STICKERS, stickers);\n\n        fragment.setArguments(args);\n\n        return fragment;\n    }\n\n    public StickersFragment() {\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_show_stickers, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupAdapter(List<Sticker> stickers) {\n        StickersAdapter adapter = new StickersAdapter(stickers);\n        adapter.setOnStickerClickListener(sticker ->\n                mPresenter.stickerClicked(getContext(), sticker)\n        );\n\n        mRecyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void setupToolbarSubtitle(@StringRes int subtitle) {\n        ToolbarUtil.updateSubtitle(subtitle, getActivity());\n    }\n\n    @Override\n    public void addSticker(Bitmap bitmap) {\n        ((ImageEditorView) getActivity()\n                .findViewById(R.id.image_editor_view)).addSticker(bitmap);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/StickersSetFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.support.annotation.StringRes;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.StickerSetAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Sticker;\nimport net.iquesoft.iquephoto.models.StickersSet;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.StickersSetPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.StickersSetView;\nimport net.iquesoft.iquephoto.ui.activities.EditorActivity;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.STICKERS;\n\npublic class StickersSetFragment extends ToolFragment implements StickersSetView {\n    @InjectPresenter\n    StickersSetPresenter mPresenter;\n\n    @BindView(R.id.stickersSetRecyclerView)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView = (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_stickers, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mImageEditorView.changeTool(STICKERS);\n        ToolbarUtil.updateTitle(R.string.stickers, getActivity());\n        ToolbarUtil.updateSubtitle(null, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupAdapter(List<StickersSet> stickersSets) {\n        StickerSetAdapter adapter = new StickerSetAdapter(stickersSets);\n        adapter.setStickerSetClickListener(stickersSet ->\n                mPresenter.stickersSetClicked(stickersSet)\n        );\n\n        mRecyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        mRecyclerView.setAdapter(adapter);\n    }\n\n    @Override\n    public void showStickers(@StringRes int title, ArrayList<Sticker> stickers) {\n        ((EditorActivity) getActivity()).setupFragment(StickersFragment.newInstance(title, stickers));\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/TextFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.content.Context;\nimport android.graphics.Color;\nimport android.graphics.Typeface;\nimport android.os.Bundle;\nimport android.support.annotation.ColorInt;\nimport android.support.annotation.StringRes;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.EditText;\nimport android.widget.LinearLayout;\nimport android.widget.Toast;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Text;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.AddTextPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.AddTextView;\nimport net.iquesoft.iquephoto.ui.dialogs.FontPickerDialog;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.TEXT;\n\npublic class TextFragment extends ToolFragment implements AddTextView {\n    @InjectPresenter\n    AddTextPresenter mPresenter;\n\n    @BindView(R.id.edit_text)\n    EditText mEditText;\n\n    private Context mContext;\n\n    private int mColor = Color.BLACK;\n\n    private Typeface mTypeface = Typeface.DEFAULT;\n\n    private Unbinder mUnbinder;\n\n    private FontPickerDialog mFontPickerDialog;\n    private ImageEditorView mImageEditorView;\n\n    public static TextFragment newInstance() {\n        return new TextFragment();\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView = (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_text, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        mContext = view.getContext();\n        mFontPickerDialog = new FontPickerDialog(mContext);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mImageEditorView.changeTool(TEXT);\n        ToolbarUtil.updateTitle(R.string.text, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void addText(Text text) {\n        mImageEditorView.addText(text);\n    }\n\n    @Override\n    public void onTextColorChanged(@ColorInt int color) {\n\n    }\n\n    @Override\n    public void showToastMessage(@StringRes int messageText) {\n        Toast.makeText(mContext, getResources().getString(messageText), Toast.LENGTH_SHORT).show();\n    }\n\n    @OnClick(R.id.addTextButton)\n    void onClickAddText() {\n        mPresenter.addText(mEditText.getText().toString(), mTypeface, mColor);\n    }\n\n    @OnClick(R.id.selectTextColorButton)\n    void onClickTextColorButton() {\n        //((EditorActivity) getActivity()).setupFragment(ColorsFragment.newInstance());\n    }\n\n    @OnClick(R.id.selectFontButton)\n    void onClickTextButton() {\n        mFontPickerDialog.show();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/TiltShiftFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.core.enums.EditorTool;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.TiltShiftFragmentPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.TiltShiftView;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.LINEAR_TILT_SHIFT;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.RADIAL_TILT_SHIFT;\n\npublic class TiltShiftFragment extends ToolFragment implements TiltShiftView {\n    @InjectPresenter\n    TiltShiftFragmentPresenter mPresenter;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        mImageEditorView =\n                (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_tilt_shift, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        mImageEditorView.changeTool(RADIAL_TILT_SHIFT);\n        ToolbarUtil.updateTitle(R.string.tilt_shift, getActivity());\n        ToolbarUtil.updateSubtitle(R.string.tilt_shift_radial, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void onTiltShiftChanged(EditorTool command) {\n        mImageEditorView.changeTool(command);\n    }\n\n    @OnClick(R.id.button_linear_tilt_shift)\n    void onClickLinear() {\n        mPresenter.changeTiltShift(LINEAR_TILT_SHIFT);\n    }\n\n    @OnClick(R.id.button_radial_tilt_shift)\n    void onClickRadial() {\n        mPresenter.changeTiltShift(RADIAL_TILT_SHIFT);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/ToolFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.view.Menu;\nimport android.view.MenuInflater;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\n\nimport net.iquesoft.iquephoto.R;\n\npublic abstract class ToolFragment extends MvpAppCompatFragment {\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        setHasOptionsMenu(true);\n        super.onCreate(savedInstanceState);\n    }\n\n    @Override\n    public void onPrepareOptionsMenu(Menu menu) {\n        menu.removeItem(R.id.action_share);\n        super.onPrepareOptionsMenu(menu);\n    }\n\n    @Override\n    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {\n        inflater.inflate(R.menu.menu_tool, menu);\n        super.onCreateOptionsMenu(menu, inflater);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/ToolsFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.support.v7.widget.LinearLayoutManager;\nimport android.support.v7.widget.RecyclerView;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.Button;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.adapters.ToolsAdapter;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.Tool;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.ToolsPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.ToolsView;\nimport net.iquesoft.iquephoto.ui.activities.EditorActivity;\n\nimport java.util.List;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.NONE;\n\npublic class ToolsFragment extends MvpAppCompatFragment implements ToolsView {\n    @InjectPresenter\n    ToolsPresenter mPresenter;\n\n    @BindView(R.id.recycler_view_tools)\n    RecyclerView mRecyclerView;\n\n    private Unbinder mUnbinder;\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_tools, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        ImageEditorView imageEditorView =\n                (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n        imageEditorView.changeTool(NONE);\n\n        Button undoButton = (Button) getActivity().findViewById(R.id.button_undo);\n\n        if (undoButton.getText().equals(\"0\")) {\n            undoButton.setVisibility(View.GONE);\n        } else {\n            undoButton.setVisibility(View.VISIBLE);\n        }\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void setupTools(List<Tool> tools) {\n        ToolsAdapter adapter = new ToolsAdapter(tools);\n        adapter.setOnToolsClickListener(tool ->\n                ((EditorActivity) getActivity()).setupFragment(tool.getFragment())\n        );\n\n        mRecyclerView.setLayoutManager(\n                new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)\n        );\n        mRecyclerView.setAdapter(adapter);\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/TransformFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.Menu;\nimport android.view.View;\nimport android.view.ViewGroup;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.TransformPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.TransformView;\nimport net.iquesoft.iquephoto.ui.activities.EditorActivity;\nimport net.iquesoft.iquephoto.utils.ToolbarUtil;\n\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\nimport butterknife.Unbinder;\n\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.TRANSFORM;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.TRANSFORM_HORIZONTAL;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.TRANSFORM_STRAIGHTEN;\nimport static net.iquesoft.iquephoto.core.enums.EditorTool.TRANSFORM_VERTICAL;\n\npublic class TransformFragment extends MvpAppCompatFragment implements TransformView {\n    @InjectPresenter\n    TransformPresenter mPresenter;\n\n    private Unbinder mUnbinder;\n\n    private EditorActivity mEditorActivity;\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setHasOptionsMenu(true);\n        mEditorActivity = (EditorActivity) getActivity();\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_transform, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n        ((ImageEditorView) getActivity().findViewById(R.id.image_editor_view))\n                .changeTool(TRANSFORM);\n        ToolbarUtil.updateTitle(R.string.transform, getActivity());\n        ToolbarUtil.updateSubtitle(null, getActivity());\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void onPrepareOptionsMenu(Menu menu) {\n        menu.clear();\n        super.onPrepareOptionsMenu(menu);\n    }\n\n    @OnClick(R.id.transformHorizontalButton)\n    void onClickTransformHorizontal() {\n        mEditorActivity.setupFragment(\n                ImageAdjustmentFragment.newInstance(TRANSFORM_HORIZONTAL)\n        );\n    }\n\n    @OnClick(R.id.transformStraightenButton)\n    void onClickTransformStraighten() {\n        mEditorActivity.setupFragment(\n                ImageAdjustmentFragment.newInstance(TRANSFORM_STRAIGHTEN)\n        );\n    }\n\n    @OnClick(R.id.transformVerticalButton)\n    void onClickTransformVertical() {\n        mEditorActivity.setupFragment(\n                ImageAdjustmentFragment.newInstance(TRANSFORM_VERTICAL)\n        );\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/ui/fragments/TransparencyFragment.java",
    "content": "package net.iquesoft.iquephoto.ui.fragments;\n\nimport android.graphics.Paint;\nimport android.os.Bundle;\nimport android.view.LayoutInflater;\nimport android.view.Menu;\nimport android.view.MenuInflater;\nimport android.view.View;\nimport android.view.ViewGroup;\nimport android.widget.TextView;\n\nimport com.arellomobile.mvp.MvpAppCompatFragment;\nimport com.arellomobile.mvp.presenter.InjectPresenter;\nimport com.arellomobile.mvp.presenter.ProvidePresenter;\n\nimport net.iquesoft.iquephoto.R;\nimport net.iquesoft.iquephoto.core.ImageEditorView;\nimport net.iquesoft.iquephoto.models.ParcelablePaint;\nimport net.iquesoft.iquephoto.presentation.presenters.fragment.TransparencyPresenter;\nimport net.iquesoft.iquephoto.presentation.views.fragment.IntensityView;\n\nimport org.adw.library.widgets.discreteseekbar.DiscreteSeekBar;\n\nimport butterknife.BindView;\nimport butterknife.ButterKnife;\nimport butterknife.OnClick;\nimport butterknife.Unbinder;\n\n/**\n * This Fragment uses for change Stickers or Texts transparency (from = 20%, to = 100%)\n * from ImageEditorView.\n */\npublic class TransparencyFragment extends MvpAppCompatFragment implements IntensityView {\n    public static final String ARG_PARAM = \"paint\";\n\n    @InjectPresenter\n    TransparencyPresenter mPresenter;\n\n    @ProvidePresenter\n    TransparencyPresenter provideTransparencyPresenter() {\n        return new TransparencyPresenter(getArguments());\n    }\n    \n    @BindView(R.id.transparencySeekBar)\n    DiscreteSeekBar mSeekBar;\n\n    @BindView(R.id.transparencyCurrentValueTextView)\n    TextView mCurrentValueTextView;\n\n    private Unbinder mUnbinder;\n\n    private ImageEditorView mImageEditorView;\n\n    /**\n     * @param paint is EditorSticker or EditorText Paint.\n     */\n    public static TransparencyFragment newInstance(Paint paint) {\n        TransparencyFragment fragment = new TransparencyFragment();\n        Bundle args = new Bundle();\n        args.putParcelable(ARG_PARAM, new ParcelablePaint(paint));\n\n        fragment.setArguments(args);\n\n        return fragment;\n    }\n\n    public TransparencyFragment() {\n    }\n\n    @Override\n    public void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setHasOptionsMenu(true);\n        mImageEditorView =\n                (ImageEditorView) getActivity().findViewById(R.id.image_editor_view);\n    }\n\n    @Override\n    public void onPrepareOptionsMenu(Menu menu) {\n        menu.removeItem(R.id.action_share);\n        super.onPrepareOptionsMenu(menu);\n    }\n\n    @Override\n    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {\n        inflater.inflate(R.menu.menu_tool, menu);\n        super.onCreateOptionsMenu(menu, inflater);\n    }\n\n    @Override\n    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {\n        View view = inflater.inflate(R.layout.fragment_transparency, container, false);\n\n        mUnbinder = ButterKnife.bind(this, view);\n\n        mSeekBar.setOnProgressChangeListener(new DiscreteSeekBar.OnProgressChangeListener() {\n            @Override\n            public void onProgressChanged(DiscreteSeekBar seekBar, int value, boolean fromUser) {\n                mPresenter.progressChanged(value);\n            }\n\n            @Override\n            public void onStartTrackingTouch(DiscreteSeekBar seekBar) {\n\n            }\n\n            @Override\n            public void onStopTrackingTouch(DiscreteSeekBar seekBar) {\n\n            }\n        });\n\n        return view;\n    }\n\n    @Override\n    public void onActivityCreated(Bundle savedInstanceState) {\n        super.onActivityCreated(savedInstanceState);\n    }\n\n    @Override\n    public void onResume() {\n        super.onResume();\n    }\n\n    @Override\n    public void onDestroyView() {\n        super.onDestroyView();\n        mUnbinder.unbind();\n    }\n\n    @Override\n    public void onTransparencyChanged(String value) {\n        mCurrentValueTextView.setText(value);\n        mImageEditorView.invalidate();\n    }\n\n    @OnClick(R.id.transparencyApplyButton)\n    void onClickApply() {\n        mPresenter.applyChanges();\n    }\n\n    @OnClick(R.id.transparencyCancelButton)\n    void onClickCancel() {\n        mPresenter.cancelChanges();\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/BitmapUtil.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphics.Canvas;\nimport android.graphics.drawable.BitmapDrawable;\nimport android.graphics.drawable.Drawable;\nimport android.graphics.drawable.VectorDrawable;\nimport android.net.Uri;\nimport android.os.Build;\nimport android.support.annotation.RequiresApi;\nimport android.support.v4.content.res.ResourcesCompat;\n\nimport com.isseiaoki.simplecropview.util.Logger;\nimport com.isseiaoki.simplecropview.util.Utils;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.io.OutputStream;\n\npublic class BitmapUtil {\n    public static Uri getUriOfBitmap(Context context, Bitmap bitmap) {\n        Uri uri = Uri.fromFile(new File(context.getCacheDir(), \"altered\"));\n\n        OutputStream outputStream = null;\n        try {\n            outputStream = context.getContentResolver()\n                    .openOutputStream(uri);\n            if (outputStream != null) {\n                bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);\n\n                return uri;\n            }\n        } catch (IOException e) {\n            Logger.e(\"An error occurred while saving the image: \" + uri, e);\n        } finally {\n            Utils.closeQuietly(outputStream);\n        }\n\n        return null;\n    }\n\n    public static Bitmap drawable2Bitmap(Context context, int drawableId) {\n        Drawable drawable = ResourcesCompat.getDrawable(context.getResources(), drawableId, null);\n        if (drawable instanceof BitmapDrawable) {\n            return ((BitmapDrawable) drawable).getBitmap();\n        } else if (drawable instanceof VectorDrawable) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                return vectorDrawable2Bitmap((VectorDrawable) drawable);\n            }\n        } else {\n            throw new IllegalArgumentException(\"unsupported drawable type\");\n        }\n\n        return null;\n    }\n\n    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)\n    private static Bitmap vectorDrawable2Bitmap(VectorDrawable vectorDrawable) {\n        Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),\n                vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);\n        Canvas canvas = new Canvas(bitmap);\n        vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());\n        vectorDrawable.draw(canvas);\n        return bitmap;\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/LogHelper.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport android.graphics.Bitmap;\nimport android.graphics.Matrix;\nimport android.graphics.Rect;\nimport android.graphics.RectF;\nimport android.support.annotation.IntRange;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\n\npublic class LogHelper {\n    private static final String TAG = LogHelper.class.getSimpleName();\n\n    public static void logBitmap(@NonNull String prefix, @NonNull Bitmap bitmap) {\n        Log.i(TAG, \"Bitmap - \" + prefix + \" -->\" + \"\\n\" +\n                \"Height = \" + bitmap.getHeight() + \"\\n\" +\n                \"Width = \" + bitmap.getWidth() + \"\\n\" +\n                \"Density = \" + bitmap.getDensity()\n        );\n    }\n\n    public static void logMatrix(@NonNull String prefix, @NonNull Matrix matrix) {\n        float x = getMatrixValue(matrix, Matrix.MTRANS_X);\n        float y = getMatrixValue(matrix, Matrix.MTRANS_Y);\n        float rScale = getMatrixScale(matrix);\n        float rAngle = getMatrixAngle(matrix);\n        Log.i(TAG, \"Matrix - \" + prefix + \" -->\" + \"\\n\" +\n                \"X = \" + x + \"\\n\" +\n                \"Y = \" + y + \"\\n\" +\n                \"Scale = \" + rScale + \"\\n\" +\n                \"Angle = \" + rAngle\n        );\n    }\n\n    public static void logRect(@NonNull String prefix, @NonNull Rect rect) {\n        Log.i(TAG, \"RectF - \" + prefix + \" --> \" + \"\\n\" +\n                \"left (X) = \" + String.valueOf(rect.left) + \"\\n\" +\n                \"top (Y) = \" + String.valueOf(rect.top) + \"\\n\" +\n                \"right (X1) = \" + String.valueOf(rect.right) + \"\\n\" +\n                \"bottom (Y1) = \" + String.valueOf(rect.bottom)\n        );\n    }\n\n    public static void logRect(@NonNull String prefix, @NonNull RectF rectF) {\n        Log.i(TAG, \"RectF - \" + prefix + \" --> \" + \"\\n\" +\n                \"left (X) = \" + String.valueOf(rectF.left) + \"\\n\" +\n                \"top (Y) = \" + String.valueOf(rectF.top) + \"\\n\" +\n                \"right (X1) = \" + String.valueOf(rectF.right) + \"\\n\" +\n                \"bottom (Y1) = \" + String.valueOf(rectF.bottom)\n        );\n    }\n\n    private static float getMatrixValue(@NonNull Matrix matrix, @IntRange(from = 0, to = 9) int valueIndex) {\n        float[] matrixValues = new float[9];\n        matrix.getValues(matrixValues);\n\n        return matrixValues[valueIndex];\n    }\n\n    private static float getMatrixScale(@NonNull Matrix matrix) {\n        return (float) Math.sqrt(Math.pow(getMatrixValue(matrix, Matrix.MSCALE_X), 2)\n                + Math.pow(getMatrixValue(matrix, Matrix.MSKEW_Y), 2));\n    }\n\n    private static float getMatrixAngle(@NonNull Matrix matrix) {\n        return (float) -(Math.atan2(getMatrixValue(matrix, Matrix.MSKEW_X),\n                getMatrixValue(matrix, Matrix.MSCALE_X)) * (180 / Math.PI));\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/MatrixUtil.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport android.graphics.Matrix;\nimport android.support.annotation.IntRange;\nimport android.support.annotation.NonNull;\nimport android.util.Log;\n\npublic class MatrixUtil {\n    private static String TAG = MatrixUtil.class.getSimpleName();\n\n    public static void matrixInfo(@NonNull String logPrefix, @NonNull Matrix matrix) {\n        float x = getMatrixValue(matrix, Matrix.MTRANS_X);\n        float y = getMatrixValue(matrix, Matrix.MTRANS_Y);\n        float rScale = getScale(matrix);\n        float rAngle = getAngle(matrix);\n        Log.d(TAG, logPrefix + \": matrix + : { x: \" + x + \", y: \" + y + \", scale: \" + rScale + \", angle: \" + rAngle + \" }\");\n    }\n\n    private static float getMatrixValue(@NonNull Matrix matrix, @IntRange(from = 0, to = 9) int valueIndex) {\n        float[] matrixValues = new float[9];\n        matrix.getValues(matrixValues);\n\n        return matrixValues[valueIndex];\n    }\n\n    public static float getMatrixX(@NonNull Matrix matrix) {\n        return getMatrixValue(matrix, Matrix.MTRANS_X);\n    }\n\n    public static float getMatrixY(@NonNull Matrix matrix) {\n        return getMatrixValue(matrix, Matrix.MTRANS_Y);\n    }\n\n    public static float getScale(@NonNull Matrix matrix) {\n        return (float) Math.sqrt(Math.pow(getMatrixValue(matrix, Matrix.MSCALE_X), 2)\n                + Math.pow(getMatrixValue(matrix, Matrix.MSKEW_Y), 2));\n    }\n\n    public static float getAngle(@NonNull Matrix matrix) {\n        return (float) -(Math.atan2(getMatrixValue(matrix, Matrix.MSKEW_X),\n                getMatrixValue(matrix, Matrix.MSCALE_X)) * (180 / Math.PI));\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/MotionEventUtil.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport android.view.MotionEvent;\n\npublic class MotionEventUtil {\n    public static float getDisplayDistance(int width, int height) {\n        return (float) Math.sqrt(width * width + height * height);\n    }\n\n    public static float getDelta(MotionEvent event) {\n        float x;\n        float y;\n\n        // FIXME:\n        if (event.getX(0) < event.getX(1)) {\n            x = event.getX(0) - event.getX(1);\n            y = event.getY(0) - event.getY(1);\n        } else {\n            x = event.getX(1) - event.getX(0);\n            y = event.getY(1) - event.getY(0);\n        }\n\n        return (float) Math.sqrt(x * x + y * y);\n    }\n\n    public static float getAngle(MotionEvent event) {\n        double delta_x = (event.getX(0) - event.getX(1));\n        double delta_y = (event.getY(0) - event.getY(1));\n        double radians = Math.atan2(delta_y, delta_x);\n        return (float) Math.toDegrees(radians);\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/RectUtil.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport android.graphics.RectF;\n\npublic class RectUtil {\n    public static void scaleRect(RectF rectF, float scale) {\n        float w = rectF.width();\n        float h = rectF.height();\n\n        float newW = scale * w;\n        float newH = scale * h;\n\n        float dx = (newW - w) / 2;\n        float dy = (newH - h) / 2;\n\n        rectF.left -= dx;\n        rectF.top -= dy;\n        rectF.right += dx;\n        rectF.bottom += dy;\n    }\n\n    public static void scaleRect2(RectF rectF, float scale) {\n        rectF.left /= scale;\n        rectF.top /= scale;\n        rectF.right /= scale;\n        rectF.bottom /= scale;\n    }\n\n    public static void rotateRect(RectF rectF, float centerX, float centerY,\n                                  float rotateAngle) {\n        float x = rectF.centerX();\n        float y = rectF.centerY();\n\n        float sinA = (float) Math.sin(Math.toRadians(rotateAngle));\n        float cosA = (float) Math.cos(Math.toRadians(rotateAngle));\n\n        float newX = centerX + (x - centerX) * cosA - (y - centerY) * sinA;\n        float newY = centerY + (y - centerY) * cosA + (x - centerX) * sinA;\n\n        float dx = newX - x;\n        float dy = newY - y;\n\n        rectF.offset(dx, dy);\n    }\n}\n"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/SizeUtil.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport net.iquesoft.iquephoto.App;\n\npublic class SizeUtil {\n    //private static final float GESTURE_THRESHOLD_DP = 16.0f;\n\n    public static float dp2px(float dp) {\n        return dp * getDensity();\n    }\n\n    public static float px2dp(float px) {\n        return px / getDensity();\n    }\n\n    private static float getDensity() {\n        return App.getAppComponent()\n                .getContext()\n                .getResources()\n                .getDisplayMetrics()\n                .density;\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/java/net/iquesoft/iquephoto/utils/ToolbarUtil.java",
    "content": "package net.iquesoft.iquephoto.utils;\n\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.annotation.StringRes;\nimport android.support.v4.app.FragmentActivity;\n\nimport net.iquesoft.iquephoto.ui.activities.EditorActivity;\n\npublic class ToolbarUtil {\n    public static void showTitle(boolean showTitle, @NonNull FragmentActivity fragmentActivity) {\n        EditorActivity editorActivity = (EditorActivity) fragmentActivity;\n        if (editorActivity.getSupportActionBar() != null) {\n            editorActivity.getSupportActionBar().setDisplayShowTitleEnabled(showTitle);\n        }\n    }\n\n    public static void updateTitle(@StringRes int title,\n                                   @NonNull FragmentActivity fragmentActivity) {\n        EditorActivity editorActivity = (EditorActivity) fragmentActivity;\n        if (editorActivity.getSupportActionBar() != null) {\n            editorActivity.getSupportActionBar().setTitle(title);\n        }\n    }\n\n    public static void updateSubtitle(@StringRes int subtitle,\n                                      @NonNull FragmentActivity fragmentActivity) {\n        EditorActivity editorActivity = (EditorActivity) fragmentActivity;\n        if (editorActivity.getSupportActionBar() != null) {\n            editorActivity.getSupportActionBar().setSubtitle(subtitle);\n        }\n    }\n\n    public static void updateSubtitle(@Nullable String subtitle,\n                                      @NonNull FragmentActivity fragmentActivity) {\n        EditorActivity editorActivity = (EditorActivity) fragmentActivity;\n        if (editorActivity.getSupportActionBar() != null) {\n            editorActivity.getSupportActionBar().setSubtitle(subtitle);\n        }\n    }\n}"
  },
  {
    "path": "iQuePhoto/app/src/main/res/anim/slide_down.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:ordering=\"together\">\n\n    <objectAnimator\n        android:duration=\"300\"\n        android:interpolator=\"@android:anim/accelerate_interpolator\"\n        android:propertyName=\"alpha\"\n        android:valueTo=\"0\"\n        android:valueType=\"floatType\" />\n\n    <objectAnimator xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:duration=\"1500\"\n        android:interpolator=\"@android:anim/accelerate_decelerate_interpolator\"\n        android:propertyName=\"x\"\n        android:valueFrom=\"0\"\n        android:valueTo=\"1280\"\n        android:valueType=\"floatType\" />\n\n</set>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/anim/slide_up.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <objectAnimator xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:duration=\"1500\"\n        android:interpolator=\"@android:anim/accelerate_decelerate_interpolator\"\n        android:propertyName=\"y\"\n        android:valueFrom=\"-1280\"\n        android:valueTo=\"0\"\n        android:valueType=\"floatType\" />\n</set>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_add.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_add_40.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_add_circle.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM17,13h-4v4h-2v-4L7,13v-2h4L11,7h2v4h4v2z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_add_circle_white_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM17,13h-4v4h-2v-4L7,13v-2h4L11,7h2v4h4v2z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_adjust_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"490\"\n    android:viewportWidth=\"490\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M17.2,262.1h219c7.7,31.7,36.3,55.3,70.4,55.3s62.6-23.6,70.4-55.3h95.8c9.5,0,17.2-7.7,17.2-17.2s-7.7-17.1-17.2-17.1\nH377c-7.7-31.7-36.3-55.3-70.4-55.3s-62.6,23.6-70.4,55.3h-219c-9.5,0-17.2,7.7-17.2,17.1C0.1,254.5,7.8,262.1,17.2,262.1z\nM306.6,206.9c21,0,38.1,17.1,38.1,38.1s-17.1,38.1-38.1,38.1S268.4,266,268.4,245S285.5,206.9,306.6,206.9z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M17.2,428.4h105.1c7.7,31.7,36.3,55.3,70.4,55.3s62.6-23.6,70.4-55.3h209.7c9.5,0,17.2-7.7,17.2-17.1\nc0-9.5-7.7-17.2-17.2-17.2H263.1c-7.7-31.7-36.3-55.3-70.4-55.3s-62.6,23.6-70.4,55.3H17.2c-9.5,0-17.2,7.7-17.2,17.2\nC0.1,420.7,7.8,428.4,17.2,428.4z\nM192.7,373.1c21,0,38.1,17.1,38.1,38.1s-17.1,38.1-38.1,38.1c-20.7,0-37.6-16.6-38.1-37.3\nc0-0.3,0-0.6,0-0.9s0-0.6,0-0.9C155.1,389.7,172,373.1,192.7,373.1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M17.2,95.9h105.1c7.7,31.7,36.3,55.3,70.4,55.3s62.6-23.6,70.4-55.3h209.7c9.5,0,17.2-7.7,17.2-17.2s-7.7-17.1-17.2-17.1\nH263.1c-7.7-31.7-36.3-55.3-70.4-55.3s-62.6,23.6-70.4,55.3H17.2C7.7,61.6,0,69.3,0,78.7C0.1,88.2,7.8,95.9,17.2,95.9z\nM192.7,40.6c21,0,38.1,17.1,38.1,38.1s-17.1,38.1-38.1,38.1c-20.7,0-37.6-16.6-38.1-37.3c0-0.3,0-0.6,0-0.9s0-0.6,0-0.9\nC155.1,57.3,172,40.6,192.7,40.6z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_apply_40.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_arrow_back_white_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_blur_linear.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"70dp\"\n    android:height=\"70dp\"\n    android:viewportHeight=\"48\"\n    android:viewportWidth=\"48\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M10 35c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3zm8-9c1.1 0 2-.9\n2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2\n2zM6 42h36v-4H6v4zm4-23c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3zm0\n8c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3zm8 7c1.1 0 2-.9\n2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm16-1c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1\n1 1zM6 6v4h36V6H6zm28 11c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 8c.55\n0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-8-7c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2\n2 .9 2 2 2zm0 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 8c1.1 0 2-.9\n2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_blur_off.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"70dp\"\n    android:height=\"70dp\"\n    android:viewportHeight=\"48\"\n    android:viewportWidth=\"48\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M28 14c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-.4 8.96c.13 .02 .26 .04 .4\n.04 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .14 .02 .27 .04 .41 .18 1.32 1.23\n2.37 2.56 2.55zM28 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-8 0c.55 0\n1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm22 14c.55 0 1-.45 1-1s-.45-1-1-1-1\n.45-1 1 .45 1 1 1zm-22-7c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm16 16c1.1 0\n2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2\n2 2zm0-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-8 27c-.55 0-1 .45-1 1s.45\n1 1 1 1-.45 1-1-.45-1-1-1zM5 10.55l7.57 7.57c-.19-.06-.37-.12-.57-.12-1.1 0-2\n.9-2 2s.9 2 2 2 2-.9 2-2c0-.2-.06-.38-.11-.57l5.62 5.62C18.08 25.29 17 26.51 17\n28c0 1.66 1.34 3 3 3 1.49 0 2.71-1.08 2.95-2.5l5.62\n5.62c-.18-.06-.37-.12-.57-.12-1.1 0-2 .9-2 2s.9 2 2 2 2-.9\n2-2c0-.2-.06-.38-.11-.57L37.45 43 40 40.45 7.55 8 5 10.55zM20 34c-1.1 0-2 .9-2\n2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm22-7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45\n1-1-.45-1-1-1zm-30-1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6-7c-.55 0-1\n.45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm14 22c-.55 0-1 .45-1 1s.45 1 1 1 1-.45\n1-1-.45-1-1-1zm-8-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6-7c-.55 0-1\n.45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_blur_radial.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"70dp\"\n    android:height=\"70dp\"\n    android:viewportHeight=\"48\"\n    android:viewportWidth=\"48\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M20 18c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2\n2-.9 2-2-.9-2-2-2zm-6-7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6\n14c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-6-6c-.55 0-1 .45-1 1s.45 1 1\n1 1-.45 1-1-.45-1-1-1zm6-12c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm8\n3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c.55 0 1-.45 1-1s-.45-1-1-1-1\n.45-1 1 .45 1 1 1zm6 12c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55\n0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM24 4C12.95 4 4 12.95 4 24s8.95 20 20\n20 20-8.95 20-20S35.05 4 24 4zm0 36c-8.84 0-16-7.16-16-16S15.16 8 24 8s16 7.16\n16 16-7.16 16-16 16zm4-7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45\n1-1-.45-1-1-1zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_brightness.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"576.301\"\n    android:viewportWidth=\"576.301\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M492.15,372.301l84.15-84.151L492.15,204V84.15h-119.85L288.15,0L204,84.15H84.15V204L0,288.15l84.15,84.151v119.85H204\nl84.15,84.15l84.151-84.15h119.85V372.301z\nM288.15,441.15c-84.15,0-153-68.85-153-153c0-84.15,68.85-153,153-153\nc84.151,0,153,68.85,153,153C441.15,372.301,372.301,441.15,288.15,441.15z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_brush_color.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"431.985\"\n    android:viewportWidth=\"431.985\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M423.257,51.829c-0.808-2.045-2.67-3.484-4.853-3.751c-2.177-0.266-4.335,0.682-5.612,2.472\nc-7.581,10.629-17.529,14.172-29.053,18.275c-9.292,3.31-18.901,6.73-29.286,14.186c-14.687,10.544-21.405,24.917-18.055,38.54\nl-0.358,0.459c-6.133-8.897-12.806-17.126-19.848-24.474c-32.947-34.378-78.984-55.046-126.311-56.703\nc-2.085-0.073-4.204-0.11-6.298-0.11c-52.846,0-103.428,23.624-138.775,64.813C9.646,146.512-5.939,199.853,2.051,251.882\nc0.668,4.349,1.504,8.743,2.487,13.063c12.996,57.202,46.189,100.717,91.069,119.383c11.063,4.602,22.222,6.934,33.163,6.934\nc27.183,0,50.926-14.539,65.143-39.889c5.404-9.646,8.891-19.621,10.36-29.651c0.866-5.92,0.274-11.835-0.3-17.567\nc-0.591-5.9-1.149-11.476-0.256-17.09c2.047-12.869,11.036-20.553,24.047-20.553c3.701,0,7.483,0.609,11.26,1.812\nc-4.422,8.11-8.438,15.854-11.947,23.032c-7.437,15.212-12.567,27.81-15.252,37.44c-1.655,5.939-6.052,21.722,4.67,29.164\nc3.405,2.363,7.722,3.197,12.215,2.361c4.049-0.752,16.369-3.041,51.378-42.896c9.396-10.695,19.521-23.072,30.104-36.794\nc27.168-9.15,48.31-31.921,53.903-58.087c1.4-6.541,1.984-13.541,1.735-20.812c10.172-15.72,19.094-30.388,28.072-46.156\nc0.172-0.304,0.342-0.628,0.51-0.96c13.031-3.569,24.254-13.71,30.842-27.891C434.872,106.028,434.163,79.428,423.257,51.829z\nM276.385,149.834c-4.713,7.485-12.814,11.954-21.673,11.954c-4.81,0-9.515-1.361-13.605-3.937\nc-5.782-3.642-9.803-9.317-11.316-15.98s-0.345-13.518,3.298-19.301c4.714-7.485,12.816-11.954,21.675-11.954\nc4.811,0,9.515,1.361,13.604,3.938c5.782,3.64,9.802,9.315,11.316,15.979C281.197,137.197,280.026,144.051,276.385,149.834z\nM309.592,196.187c12.934-19.057,26.612-38,39.604-54.85c2.106,1.902,4.461,3.76,7.012,5.53c4.227,2.933,8.648,5.201,13.164,6.754\nc-10.969,18.758-22.763,37.342-37.043,58.375c-23.463,34.571-47.859,66.684-68.695,90.424\nc-11.638,13.26-21.823,23.498-29.671,29.839c3.029-9.69,8.818-22.989,16.875-38.746\nC265.245,265.336,286.111,230.772,309.592,196.187z\nM82.506,196.023c-4.811,0-9.516-1.361-13.607-3.938\nc-5.782-3.641-9.801-9.314-11.315-15.979c-1.514-6.664-0.342-13.519,3.301-19.302c4.711-7.484,12.813-11.953,21.671-11.953\nc4.812,0,9.517,1.361,13.607,3.938c11.936,7.518,15.532,23.345,8.019,35.279C99.466,191.554,91.363,196.023,82.506,196.023z\nM55.688,252.358c4.713-7.486,12.814-11.955,21.673-11.955c4.81,0,9.514,1.362,13.606,3.938c5.782,3.641,9.801,9.315,11.315,15.979\nc1.515,6.662,0.343,13.516-3.301,19.301c-4.711,7.483-12.813,11.953-21.671,11.953c-4.811,0-9.517-1.361-13.609-3.938\nc-5.782-3.642-9.8-9.315-11.313-15.979C50.876,264.995,52.049,258.14,55.688,252.358z\nM137.62,100.414\nc4.713-7.485,12.815-11.954,21.673-11.954c4.809,0,9.514,1.361,13.604,3.937c11.937,7.516,15.533,23.344,8.019,35.28\nc-4.715,7.486-12.817,11.955-21.675,11.955c-4.81,0-9.515-1.361-13.605-3.938c-5.781-3.64-9.799-9.314-11.313-15.979\nC132.807,113.052,133.979,106.198,137.62,100.414z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_camera.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"100dp\"\n    android:height=\"100dp\"\n    android:viewportHeight=\"307.308\"\n    android:viewportWidth=\"307.308\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M284.909,66.146h-81.345l-16.426-27.595c-1.607-2.698-4.514-4.351-7.654-4.351h-51.662c-3.14,0-6.048,1.653-7.654,4.351\nl-16.426,27.595H77.049v-6.082c0-4.919-3.988-8.907-8.907-8.907H35.185c-4.92,0-8.907,3.988-8.907,8.907v6.082h-3.88\nC10.027,66.146,0,76.174,0,88.543v162.166c0,12.37,10.027,22.398,22.397,22.398h262.512c12.37,0,22.398-10.028,22.398-22.398\nV88.543C307.308,76.174,297.279,66.146,284.909,66.146z\nM153.653,233.379c-35.21,0-63.753-28.543-63.753-63.754\nc0-35.209,28.543-63.753,63.753-63.753c35.21,0,63.753,28.544,63.753,63.753C217.406,204.836,188.863,233.379,153.653,233.379z\nM270.935,112.322h-27.91c-4.919,0-8.907-3.988-8.907-8.908c0-4.92,3.988-8.908,8.907-8.908h27.91c4.921,0,8.908,3.988,8.908,8.908\nC279.843,108.334,275.855,112.322,270.935,112.322z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 153.653 125.087 C 178.250658188 125.087 198.191 145.027341812 198.191 169.625 C 198.191 194.222658188 178.250658188 214.163 153.653 214.163 C 129.055341812 214.163 109.115 194.222658188 109.115 169.625 C 109.115 145.027341812 129.055341812 125.087 153.653 125.087 Z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_cancel_40.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_check.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"60dp\"\n    android:height=\"60dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_check_40.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_clear.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_close_white_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_color.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_contrast.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"490\"\n    android:viewportWidth=\"490\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M490,245C490,109.9,380.1,0,245,0S0,109.9,0,245s109.9,245,245,245S490,380.1,490,245z\nM245,79c91.5,0,166,74.5,166,166 s-74.5,166-166,166V79z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_crop.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M17,15h2V7c0,-1.1 -0.9,-2 -2,-2H9v2h8v8zM7,17V1H5v4H1v2h4v10c0,1.1 0.9,2 2,2h10v4h2v-4h4v-2H7z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_delete_on.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportHeight=\"475.628\"\n    android:viewportWidth=\"475.628\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 115.592 475.628 L 315.592 475.628 L 335.592 170.628 L 95.592 170.628 Z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M301.681,74.436l12.997-35.708L208.275,0l-12.996,35.708L116.923,7.189L96.402,63.57l263.114,95.766l20.521-56.381\nL301.681,74.436z\nM226.205,38.451l50.021,18.207l-2.736,7.517l-50.022-18.206L226.205,38.451z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_disappointed_white_150dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"150dp\"\n    android:height=\"150dp\"\n    android:viewportHeight=\"512.001\"\n    android:viewportWidth=\"512.001\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M256.001,0C114.841,0,0,114.841,0,256.001s114.841,256.001,256.001,256.001S512.001,397.16,512.001,256.001\nC512,114.841,397.16,0,256.001,0z\nM256.001,493.701c-131.069,0-237.702-106.631-237.702-237.7S124.932,18.299,256.001,18.299\ns237.702,106.632,237.702,237.7C493.701,387.07,387.068,493.701,256.001,493.701z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M357.007,341.76c-26.675-26.674-62.141-41.365-99.864-41.365s-73.189,14.69-99.863,41.365\nc-3.573,3.573-3.573,9.365,0,12.939c3.574,3.573,9.367,3.573,12.94,0c23.217-23.218,54.087-36.005,86.923-36.005\nc32.836,0,63.706,12.787,86.923,36.005c1.787,1.787,4.128,2.68,6.471,2.68c2.341,0,4.683-0.893,6.471-2.68\nC360.58,351.125,360.58,345.333,357.007,341.76z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M291.334,346.725c-10.817-5.664-23.037-8.658-35.337-8.658c-12.297,0-24.513,2.994-35.331,8.658\nc-4.476,2.344-6.205,7.873-3.861,12.349c2.346,4.477,7.877,6.206,12.351,3.861c8.208-4.298,17.489-6.569,26.841-6.569\nc9.356,0,18.639,2.271,26.85,6.571c1.354,0.71,2.806,1.045,4.237,1.045c3.295,0,6.479-1.786,8.113-4.907\nC297.538,354.599,295.81,349.07,291.334,346.725z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M152.702,127.42c-5.054,0-9.15,4.097-9.15,9.15c0,26.857-21.849,48.707-48.707,48.707c-5.054,0-9.15,4.097-9.15,9.15\nc0,5.053,4.095,9.15,9.15,9.15c36.947-0.001,67.006-30.059,67.006-67.006C161.852,131.517,157.756,127.42,152.702,127.42z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M417.155,185.276c-26.858,0-48.707-21.849-48.707-48.707c0-5.053-4.095-9.15-9.15-9.15c-5.054,0-9.15,4.097-9.15,9.15\nc0,36.947,30.059,67.006,67.006,67.006c5.054,0,9.15-4.097,9.15-9.15S422.209,185.276,417.155,185.276z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M146.725,196.131c-18.666,0-33.852,15.186-33.852,33.852c0,18.666,15.186,33.852,33.852,33.852\nc18.666,0,33.852-15.186,33.852-33.852S165.391,196.131,146.725,196.131z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M365.275,196.131c-18.666,0-33.852,15.186-33.852,33.852c0,18.666,15.186,33.852,33.852,33.852\ns33.852-15.186,33.852-33.852C399.128,211.317,383.942,196.131,365.275,196.131z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 150.479 216.222 C 155.532405461 216.222 159.629 220.318594539 159.629 225.372 C 159.629 230.425405461 155.532405461 234.522 150.479 234.522 C 145.425594539 234.522 141.329 230.425405461 141.329 225.372 C 141.329 220.318594539 145.425594539 216.222 150.479 216.222 Z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 368.849 216.222 C 373.902405461 216.222 377.999 220.318594539 377.999 225.372 C 377.999 230.425405461 373.902405461 234.522 368.849 234.522 C 363.795594539 234.522 359.699 230.425405461 359.699 225.372 C 359.699 220.318594539 363.795594539 216.222 368.849 216.222 Z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_drawing_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"430.51\"\n    android:viewportWidth=\"430.51\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M296.003,284.517l-52.542-30.805c-2.865,0.345-5.734,0.913-8.59,1.73c-13.717,3.937-33.557,15.227-50.186,46.668\nc-13.202,24.961-8.33,46.331-4.031,65.187c4.108,18.023,7.354,32.259-4.718,46.5c-1.187,1.399-1.511,3.336-0.845,5.047\nc0.419,1.076,1.188,1.952,2.15,2.512c0.571,0.33,1.21,0.551,1.885,0.637c30.535,3.836,76.235-14.17,104.421-62.771\nc12.802-22.074,18.3-43.299,15.902-61.38C298.825,293.125,297.653,288.672,296.003,284.517z\nM244.507,287.847\nc-0.941,2.5-2.8,4.482-5.234,5.584c-17.741,8.03-20.915,22.067-21.042,22.662c-0.702,3.69-3.553,6.751-7.244,7.732\nc-0.327,0.087-0.659,0.157-0.995,0.212c-1.14,0.182-2.299,0.163-3.441-0.055c-5.418-1.033-8.985-6.277-7.954-11.694\nc0.19-1.001,4.985-24.655,32.431-37.078c0.506-0.229,1.027-0.414,1.557-0.556c4.743-1.261,9.654,1.07,11.678,5.542\nC245.361,282.63,245.449,285.347,244.507,287.847z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M418.939,11.153c-10.538-6.111-24.009-3.033-30.847,7.05c-4.299,6.338-105.41,155.47-118.428,177.916\nc-6.509,11.224-13.845,29.443-19.947,46.1l52.542,30.805c11.443-13.576,23.674-29.061,30.275-40.443\nc13.17-22.708,92.25-184.284,95.609-191.151C433.5,30.485,429.48,17.264,418.939,11.153z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M166.592,341.074c-4.498-1.502-8.881-2.384-13.327-2.657c-0.747-0.046-1.549-0.069-2.383-0.069\nc-6.69,0-15.097,1.466-23.227,2.884c-7.245,1.265-14.089,2.457-18.864,2.457c-3.359,0-4.52-0.616-4.895-0.936\nc-4.059-5.095,1.807-18.923,4.318-24.849c0.642-1.512,1.148-2.706,1.44-3.559c4.072-11.981,7.063-24.737,1.425-36.843\nc-4.687-10.065-15.643-18.076-27.824-20.391c-3.548-0.838-7.62-1.228-12.816-1.228c-4.277,0-8.854,0.271-13.281,0.534\nc-4.54,0.27-9.235,0.548-13.731,0.548c-15.464,0-24.366-3.528-29.749-11.769c-9.992-15.865,2.009-44.283,14.332-56.117\nc0.758-0.728,0.823-1.918,0.149-2.725c-0.675-0.807-1.857-0.955-2.708-0.337C9.67,197.45-0.778,218.222,0.045,236.531\nc0.439,9.764,4.197,23.327,19.612,32.506c8.298,4.94,21.718,5.98,34.696,6.986c12.768,0.989,25.971,2.013,30.04,6.977\nc1.066,1.301,1.472,2.876,1.233,4.859c-0.888,9.078-5.293,18.018-9.554,26.661c-8.047,16.327-16.368,33.209-1.986,51.944\nc12.631,16.451,29.399,16.451,46.625,16.331c1.41-0.01,2.823-0.02,4.235-0.02c7.515,0,16.196,0.23,24.068,2.972\nc5.602,2.171,8.419,6.662,9.737,15.571c1.009,5.462,3.436,9.762,6.657,13c0.471-2.511,1.577-4.904,3.29-6.927\nc8.458-9.986,6.803-19.319,2.577-37.812C169.313,360.984,167.138,351.457,166.592,341.074z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_eraser.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"16\"\n    android:viewportWidth=\"16\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M8.1 14l6.4-7.2c0.6-0.7\n0.6-1.8-0.1-2.5l-2.7-2.7c-0.3-0.4-0.8-0.6-1.3-0.6h-1.8c-0.5 0-1 0.2-1.4 0.6l-6.7\n7.6c-0.6 0.7-0.6 1.9 0.1 2.5l2.7 2.7c0.3 0.4 0.8 0.6 1.3 0.6h11.4v-1h-7.9zM6.8\n13.9c0 0 0-0.1 0 0l-2.7-2.7c-0.4-0.4-0.4-0.9 0-1.3l3.4-3.9h-1l-3 3.3c-0.6\n0.7-0.6 1.7 0.1 2.4l2.3 2.3h-1.3c-0.2\n0-0.4-0.1-0.6-0.2l-2.8-2.8c-0.3-0.3-0.3-0.8 0-1.1l3.5-3.9h1.8l3.5-4h1l-3.5 4 3.1\n3.7-3.5 4c-0.1 0.1-0.2 0.1-0.3 0.2z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_expand.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"30dp\"\n        android:height=\"30dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_expand_less.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M12,8l-6,6 1.41,1.41L12,10.83l4.59,4.58L18,14z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_exposure.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M84.286,10H15.714H10v5.714v68.571V90h5.714h68.571H90v-5.714V15.714V10H84.286z\nM78.571,67.143H50v-5.714h28.571V67.143z\nM15.714,84.286V15.714h68.571L15.714,84.286z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 32.857 50 L 38.571 50 L 38.571 38.571 L 50 38.571 L 50 32.857 L 38.571 32.857 L 38.571 21.429 L 32.857 21.429 L 32.857 32.857 L 21.429 32.857 L 21.429 38.571 L 32.857 38.571 Z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_fade.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M50,0C22.4,0,0,22.4,0,50h100C100,22.4,77.6,0,50,0z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M13.4,84h73.3c0.6-0.7,1.2-1.3,1.8-2H11.6C12.2,82.7,12.7,83.3,13.4,84z\nM17.5,88h65c0.8-0.6,1.5-1.3,2.2-2H15.3 C16,86.7,16.8,87.4,17.5,88z\nM7.3,76h85.4c0.4-0.7,0.8-1.3,1.2-2H6.1C6.5,74.7,6.9,75.3,7.3,76z\nM10,80h80c0.5-0.7,1-1.3,1.4-2H8.6 C9,78.7,9.5,79.3,10,80z\nM22.9,92h54.2c1-0.6,2-1.3,2.9-2H20C20.9,90.7,21.9,91.4,22.9,92z\nM50,100c4.9,0,9.6-0.7,14-2H36 C40.4,99.3,45.1,100,50,100z\nM30.4,96h39.2c1.4-0.6,2.8-1.3,4.1-2H26.2C27.6,94.7,29,95.4,30.4,96z M0.4,56h99.3\nc0.1-0.7,0.1-1.3,0.2-2H0.2C0.2,54.7,0.3,55.3,0.4,56z\nM5.1,72h89.8c0.3-0.7,0.6-1.3,0.9-2H4.2C4.5,70.7,4.8,71.3,5.1,72z M0,50\nc0,0.7,0,1.3,0.1,2h99.9c0-0.7,0.1-1.3,0.1-2H0z\nM1,60h98c0.1-0.7,0.2-1.3,0.4-2H0.6C0.8,58.7,0.9,59.3,1,60z M3.4,68h93.3\nc0.3-0.7,0.5-1.3,0.7-2H2.6C2.9,66.7,3.1,67.3,3.4,68z\nM2,64h96c0.2-0.7,0.4-1.3,0.5-2H1.5C1.6,62.7,1.8,63.3,2,64z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_filter_40.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"358.732\"\n    android:viewportWidth=\"358.732\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M287.51,133.329c0.296-3.26,0.456-6.559,0.456-9.895c0-59.883-48.718-108.601-108.601-108.601s-108.6,48.718-108.6,108.601\nc0,3.336,0.16,6.635,0.456,9.895C29.698,148.598,0,188.545,0,235.299c0,59.883,48.718,108.601,108.601,108.601\nc27.009,0,51.744-9.913,70.765-26.289c19.021,16.375,43.756,26.289,70.765,26.289c59.883,0,108.601-48.718,108.601-108.601\nC358.73,188.545,329.032,148.598,287.51,133.329z\nM85.765,123.434c0-51.611,41.989-93.601,93.601-93.601\ns93.601,41.989,93.601,93.601c0,1.897-0.063,3.78-0.175,5.65c-7.312-1.558-14.891-2.385-22.661-2.385\nc-27.009,0-51.744,9.913-70.765,26.289c-19.021-16.375-43.756-26.289-70.765-26.289c-7.77,0-15.349,0.827-22.661,2.385\nC85.828,127.214,85.765,125.331,85.765,123.434z\nM202.201,235.299c0,23.377-8.615,44.78-22.836,61.201\nc-14.221-16.421-22.836-37.824-22.836-61.201c0-1.897,0.063-3.78,0.175-5.65c7.312,1.558,14.891,2.385,22.661,2.385\ns15.349-0.827,22.661-2.385C202.138,231.519,202.201,233.4,202.201,235.299z\nM179.365,217.034c-7.061,0-13.941-0.791-20.559-2.28\nc3.439-15.297,10.63-29.192,20.559-40.656c9.928,11.465,17.119,25.359,20.559,40.656\nC193.306,216.243,186.427,217.034,179.365,217.034z\nM144.445,210.271c-28.19-11.377-49.614-36.097-56.403-66.294\nc6.618-1.489,13.498-2.28,20.559-2.28c22.842,0,43.795,8.229,60.062,21.872C157.076,176.714,148.613,192.67,144.445,210.271z\nM190.068,163.57c16.267-13.643,37.22-21.872,60.062-21.872c7.061,0,13.941,0.791,20.559,2.28\nc-6.789,30.197-28.213,54.916-56.403,66.294C210.118,192.67,201.655,176.714,190.068,163.57z\nM15,235.299\nc0-39.273,24.316-72.969,58.68-86.838c8.43,35.603,34.43,64.486,68.305,76.943c-0.296,3.26-0.456,6.559-0.456,9.895\nc0,27.469,10.256,52.583,27.133,71.729c-16.267,13.643-37.22,21.872-60.062,21.872C56.989,328.898,15,286.909,15,235.299z\nM250.13,328.898c-22.842,0-43.795-8.229-60.062-21.872c16.877-19.146,27.133-44.26,27.133-71.729c0-3.336-0.16-6.635-0.456-9.895\nc33.875-12.457,59.875-41.34,68.305-76.943c34.365,13.869,58.68,47.565,58.68,86.838\nC343.73,286.909,301.741,328.898,250.13,328.898z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_filter_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"358.732\"\n    android:viewportWidth=\"358.732\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M287.51,133.329c0.296-3.26,0.456-6.559,0.456-9.895c0-59.883-48.718-108.601-108.601-108.601s-108.6,48.718-108.6,108.601\nc0,3.336,0.16,6.635,0.456,9.895C29.698,148.598,0,188.545,0,235.299c0,59.883,48.718,108.601,108.601,108.601\nc27.009,0,51.744-9.913,70.765-26.289c19.021,16.375,43.756,26.289,70.765,26.289c59.883,0,108.601-48.718,108.601-108.601\nC358.73,188.545,329.032,148.598,287.51,133.329z\nM85.765,123.434c0-51.611,41.989-93.601,93.601-93.601\ns93.601,41.989,93.601,93.601c0,1.897-0.063,3.78-0.175,5.65c-7.312-1.558-14.891-2.385-22.661-2.385\nc-27.009,0-51.744,9.913-70.765,26.289c-19.021-16.375-43.756-26.289-70.765-26.289c-7.77,0-15.349,0.827-22.661,2.385\nC85.828,127.214,85.765,125.331,85.765,123.434z\nM202.201,235.299c0,23.377-8.615,44.78-22.836,61.201\nc-14.221-16.421-22.836-37.824-22.836-61.201c0-1.897,0.063-3.78,0.175-5.65c7.312,1.558,14.891,2.385,22.661,2.385\ns15.349-0.827,22.661-2.385C202.138,231.519,202.201,233.4,202.201,235.299z\nM179.365,217.034c-7.061,0-13.941-0.791-20.559-2.28\nc3.439-15.297,10.63-29.192,20.559-40.656c9.928,11.465,17.119,25.359,20.559,40.656\nC193.306,216.243,186.427,217.034,179.365,217.034z\nM144.445,210.271c-28.19-11.377-49.614-36.097-56.403-66.294\nc6.618-1.489,13.498-2.28,20.559-2.28c22.842,0,43.795,8.229,60.062,21.872C157.076,176.714,148.613,192.67,144.445,210.271z\nM190.068,163.57c16.267-13.643,37.22-21.872,60.062-21.872c7.061,0,13.941,0.791,20.559,2.28\nc-6.789,30.197-28.213,54.916-56.403,66.294C210.118,192.67,201.655,176.714,190.068,163.57z\nM15,235.299\nc0-39.273,24.316-72.969,58.68-86.838c8.43,35.603,34.43,64.486,68.305,76.943c-0.296,3.26-0.456,6.559-0.456,9.895\nc0,27.469,10.256,52.583,27.133,71.729c-16.267,13.643-37.22,21.872-60.062,21.872C56.989,328.898,15,286.909,15,235.299z\nM250.13,328.898c-22.842,0-43.795-8.229-60.062-21.872c16.877-19.146,27.133-44.26,27.133-71.729c0-3.336-0.16-6.635-0.456-9.895\nc33.875-12.457,59.875-41.34,68.305-76.943c34.365,13.869,58.68,47.565,58.68,86.838\nC343.73,286.909,301.741,328.898,250.13,328.898z\"\n        android:strokeColor=\"#ffffff\"\n        android:strokeWidth=\"5\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_flags.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"60dp\"\n    android:height=\"60dp\"\n    android:viewportHeight=\"512\"\n    android:viewportWidth=\"512\">\n\n    <path\n        android:fillColor=\"#FF4F19\"\n        android:pathData=\"M 244 0 L 476 0 L 412 144 L 476 288 L 276 288 \" />\n    <path\n        android:fillColor=\"#7E5C62\"\n        android:pathData=\"M52,512L52,512c-8.837,0-16-7.163-16-16V24c0-8.837,7.163-16,16-16h0c8.837,0,16,7.163,16,16v472\nC68,504.836,60.837,512,52,512z\" />\n    <path\n        android:fillColor=\"#E9001E\"\n        android:pathData=\"M276,32H68v288h192c8.837,0,16-7.163,16-16V32z\" />\n    <path\n        android:fillColor=\"#7E5C62\"\n        android:pathData=\"M 244 32 L 276 32 L 244 0 Z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_flash_auto.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"50dp\"\n        android:height=\"50dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M3,2v12h3v9l7,-12L9,11l4,-9L3,2zM19,2h-2l-3.2,9h1.9l0.7,-2h3.2l0.7,2h1.9L19,2zM16.85,7.65L18,4l1.15,3.65h-2.3z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_flash_off.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"50dp\"\n        android:height=\"50dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M3.27,3L2,4.27l5,5V13h3v9l3.58,-6.14L17.73,20 19,18.73 3.27,3zM17,10h-4l4,-8H7v2.18l8.46,8.46L17,10z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_flash_on.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M7,2v11h3v9l7,-12h-4l4,-8z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_flip_camera.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M51.038,31.111c-6.315,0-11.452,5.137-11.452,11.452s5.137,11.452,11.452,11.452\ns11.453-5.137,11.453-11.452S57.353,31.111,51.038,31.111z\nM80.805,51.072v-25.95c0-2.218-1.815-4.032-4.032-4.032H64.564\nl-2.795-6.164c-0.458-1.01-1.74-1.836-2.849-1.836H43.158c-1.109,0-2.391,0.826-2.849,1.836l-2.795,6.164H25.305\nc-2.218,0-4.032,1.815-4.032,4.032v26.066c-8.43,2.278-15.324,6.066-15.324,12.393c0,10.331,18.35,13.913,31.805,15.157\nl-0.178,3.389l9.579-4.878l-9.015-5.856l-0.142,2.699c-15.914-1.508-27.362-5.638-27.362-10.512c0-2.891,4.039-5.52,10.637-7.498\nv3.961c0,2.218,1.815,4.032,4.032,4.032h51.467c2.218,0,4.032-1.815,4.032-4.032V55.97c6.84,1.99,11.07,4.661,11.07,7.611\nc0,4.945-14.119,9.131-30.398,10.582v4.665c13.521-1.164,35.085-4.677,35.085-15.246C96.562,57.147,89.43,53.337,80.805,51.072z\nM51.038,57.039c-7.982,0-14.476-6.494-14.476-14.476s6.494-14.476,14.476-14.476s14.477,6.494,14.477,14.476\nS59.021,57.039,51.038,57.039z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_font.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportHeight=\"533.333\"\n    android:viewportWidth=\"533.333\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M416.457,8.442C369.308,8.442,339.051,0,290.495,0C133.576,0,60.395,89.367,60.395,180.142\nc0,53.478,25.333,71.072,75.293,71.072c-3.52-7.742-9.851-16.188-9.851-54.184c0-106.255,40.107-137.218,91.477-139.328\nc0,0-42.145,413.216-164.468,462.782v12.85h87.874h77.019l56.264-266.666h103.044L400,200H288.069l27.055-128.224\nc30.962,6.331,61.219,12.664,87.257,12.664c32.368,0,61.924-9.851,78.106-84.44C460.787,6.333,439.675,8.442,416.457,8.442z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_font_bold.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"20dp\"\n    android:height=\"20dp\"\n    android:viewportHeight=\"181.395\"\n    android:viewportWidth=\"181.395\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M20.618,181.395v-181.395h62.293c22.506,0 40.074,4.174 52.699,12.521 12.623,8.346\n18.936,20.785 18.936,37.313\n0,8.639-2.033,16.318-6.104,23.049-4.07,6.729-10.34,11.795-18.813,15.199\n10.631,2.408 18.479,7.246 23.547,14.514 5.064,7.268 7.6,15.637 7.6,25.104\n0,17.691-5.939,31.064-17.814,40.115-11.879,9.055-28.904,13.58-51.082,13.58h-71.262zm42.235-105.772h20.93c9.551-0.166\n16.695-2.014 21.43-5.545 4.734-3.529 7.102-8.699 7.102-15.51\n0-7.725-2.41-13.35-7.225-16.881-4.82-3.529-12.211-5.295-22.178-5.295h-20.059v43.231zm0,27.908v45.473h29.027c8.971,0\n15.699-1.766 20.184-5.297 4.484-3.529 6.729-8.947 6.729-16.256\n0-7.891-1.932-13.85-5.795-17.879-3.861-4.027-10.111-6.041-18.748-6.041h-31.397z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_font_italic.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"20dp\"\n    android:height=\"20dp\"\n    android:viewportHeight=\"438.543\"\n    android:viewportWidth=\"438.543\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M355.172,0.715c-6.659,0.478-13.134,0.909-19.417,1.287c-28.171,1.709-48.54,2.568-61.099,2.568\nc-6.472,0-13.422-0.193-20.842-0.571L163.312,0l-5.426,29.408c1.902,0.378,5.52,0.762,10.85,1.143\nc19.602,1.138,33.308,3.806,41.112,7.993v10.85l-2.284,14.272l-6.28,38.544l-4.57,17.988l-8.28,44.824c0,0.193-0.334,1.288-1,3.287\nc-0.666,1.997-1.524,4.899-2.568,8.705c-1.049,3.809-2.236,8.235-3.571,13.278c-1.335,5.042-2.856,11.421-4.57,19.13\nc-1.713,7.707-3.332,15.751-4.853,24.124l-3.428,18.274l-15.986,76.517l-7.71,39.677c-2.285,12.189-6.184,21.802-11.704,28.838\nc-7.614,3.81-18.654,7.519-33.12,11.14c-13.894,3.613-21.221,5.517-21.982,5.708l-4.853,24.273\nc4.565-0.38,13.891-1.235,27.978-2.573c25.315-2.283,41.874-3.33,49.676-3.139l56.532,0.568\nc23.979,2.478,37.777,4.093,41.391,4.859c3.617,0.568,6.283,0.855,7.994,0.855c3.429,0,7.423-0.191,11.991-0.571\nc0.951-0.188,3.142-0.284,6.567-0.284c0.38-1.902,1.235-5.808,2.569-11.711c1.137-5.52,1.804-11.039,1.999-16.562\nc-5.715-0.948-11.991-1.903-18.85-2.848c-10.461-1.143-21.792-3.145-33.975-5.996c-0.564-3.805-0.661-6.375-0.281-7.71l3.43-12.847\nl12.278-67.091l10.849-45.111l17.418-88.793c4.183-20.367,10.466-49.484,18.847-87.366c0.763-7.232,1.995-15.037,3.713-23.413\nc2.282-10.848,4.571-19.221,6.851-25.125c7.043-2.853,16.659-5.802,28.836-8.848c10.286-2.281,20.655-5.232,31.121-8.848\nc1.146-4.188,2.389-9.041,3.716-14.561c0.767-3.619,1.335-7.233,1.711-10.848C365.261,0.003,361.832,0.24,355.172,0.715z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_format_bold.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M15.6,10.79c0.97,-0.67 1.65,-1.77 1.65,-2.79 0,-2.26 -1.75,-4 -4,-4L7,4v14h7.04c2.09,0 3.71,-1.7 3.71,-3.79 0,-1.52 -0.86,-2.82 -2.15,-3.42zM10,6.5h3c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5h-3v-3zM13.5,15.5L10,15.5v-3h3.5c0.83,0 1.5,0.67 1.5,1.5s-0.67,1.5 -1.5,1.5z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_format_color_text_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillAlpha=\".36\"\n        android:fillColor=\"#000000\"\n        android:pathData=\"M0,20h24v4H0z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M11,3L5.5,17h2.25l1.12,-3h6.25l1.12,3h2.25L13,3h-2zM9.62,12L12,5.67 14.38,12L9.62,12z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_format_italic.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M10,4v3h2.21l-3.42,8H6v3h8v-3h-2.21l3.42,-8H18V4z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_format_underlined.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#000000\"\n        android:pathData=\"M12,17c3.31,0 6,-2.69 6,-6L18,3h-2.5v8c0,1.93 -1.57,3.5 -3.5,3.5S8.5,12.93 8.5,11L8.5,3L6,3v8c0,3.31 2.69,6 6,6zM5,19v2h14v-2L5,19z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_frame_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"199\"\n    android:viewportWidth=\"199\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M0,179.648V199h19.352c3.805-7.244,11.396-12.188,20.148-12.188c8.635,0,16.146,4.811,20,11.898\nc3.854-7.088,11.365-11.898,20-11.898s16.146,4.811,20,11.898c3.854-7.088,11.365-11.898,20-11.898s16.146,4.811,20,11.898\nc3.854-7.088,11.365-11.898,20-11.898c8.75,0,16.342,4.943,20.148,12.188H199v-19.352c-7.244-3.805-12.188-11.396-12.188-20.148\nc0-8.635,4.811-16.146,11.898-20c-7.088-3.854-11.898-11.365-11.898-20s4.811-16.146,11.898-20\nc-7.088-3.854-11.898-11.365-11.898-20s4.811-16.146,11.898-20c-7.088-3.854-11.898-11.365-11.898-20\nc0-8.75,4.943-16.342,12.188-20.148V0h-19.352c-3.807,7.244-11.398,12.188-20.148,12.188c-8.635,0-16.146-4.811-20-11.898\nc-3.854,7.088-11.365,11.898-20,11.898s-16.146-4.811-20-11.898c-3.854,7.088-11.365,11.898-20,11.898s-16.146-4.811-20-11.898\nc-3.853,7.088-11.365,11.898-20,11.898c-8.752,0-16.344-4.943-20.148-12.188H0v19.352C7.244,23.158,12.188,30.75,12.188,39.5\nc0,8.635-4.811,16.146-11.898,20c7.088,3.854,11.898,11.365,11.898,20s-4.811,16.146-11.898,20c7.088,3.854,11.898,11.365,11.898,20\ns-4.811,16.146-11.898,20c7.088,3.854,11.898,11.365,11.898,20C12.188,168.252,7.244,175.844,0,179.648z\nM30,30h139v134.852 l-35.629-54.677l-22.732,34.887L74.268,89.244L30,157.18V30z\nM102.5,61.75c0-9.25,7.498-16.75,16.75-16.75\nC128.5,45,136,52.5,136,61.75c0,9.252-7.5,16.75-16.75,16.75C109.998,78.5,102.5,71.002,102.5,61.75z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_gallery_white_100dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"100dp\"\n    android:height=\"100dp\"\n    android:viewportHeight=\"589.619\"\n    android:viewportWidth=\"589.619\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M568.247,72.536L523.25,503.071c-1.537,14.732-13.554,25.741-27.868,26.606l-5.508-120.146l13.001,1.358l35.69-341.459\nL159.983,29.868l-5,47.878l-30.16,1.381l5.471-52.371c1.717-16.404,16.39-28.302,32.794-26.593l378.574,39.564\nC558.067,41.451,569.964,56.132,568.247,72.536z\nM461.117,108.524l19.838,432.424c0.754,16.479-11.979,30.436-28.45,31.189\nL72.273,589.587c-16.479,0.754-30.436-11.979-31.189-28.45L21.239,128.714c-0.754-16.479,11.979-30.437,28.45-31.19L429.92,80.074\nC446.407,79.32,460.363,92.053,461.117,108.524z\nM66.795,470.299l380.231-17.449l-15.732-342.959L51.062,127.34L66.795,470.299z\nM427.397,350.623c-0.485-10.575-4.702-20.636-11.904-28.398l-26.733-28.823c-9.3-8.911-24.062-8.232-32.504,1.492l-48.385,56.014\nL202.786,221.469c-9.031-11.165-26.137-11.054-34.951,0.261L85.7,329.949c-6.336,8.352-9.546,18.659-9.061,29.123l4.388,95.628\nl350.415-16.076L427.397,350.623z\nM365.937,232.433c22.666-1.037,40.16-20.226,39.123-42.885\nc-1.037-22.667-20.226-40.161-42.885-39.123c-22.666,1.037-40.16,20.226-39.123,42.885\nC324.097,215.976,343.277,233.478,365.937,232.433z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_h_flip_white_35dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"35dp\"\n    android:height=\"35dp\"\n    android:viewportHeight=\"16\"\n    android:viewportWidth=\"16\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M0 15l6-5-6-4.9z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M9 10.1l6 4.9v-10l-6 5.1zM14 12.9l-3.4-2.8 3.4-3v5.8z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 5h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 3h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 9h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 11h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 13h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7 15h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M7.5 1v0c1.3 0 2.6 0.7 3.6 1.9l-1.1 1.1h3v-3l-1.2 1.2c-1.2-1.4-2.7-2.2-4.3-2.2 0\n0 0 0 0 0-1.9 0-3.6 1-4.9 2.9l0.8 0.6c1.1-1.6 2.5-2.5 4.1-2.5z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_instagram.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"169.063\"\n    android:viewportWidth=\"169.063\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M122.406,0H46.654C20.929,0,0,20.93,0,46.655v75.752c0,25.726,20.929,46.655,46.654,46.655h75.752\nc25.727,0,46.656-20.93,46.656-46.655V46.655C169.063,20.93,148.133,0,122.406,0z\nM154.063,122.407\nc0,17.455-14.201,31.655-31.656,31.655H46.654C29.2,154.063,15,139.862,15,122.407V46.655C15,29.201,29.2,15,46.654,15h75.752\nc17.455,0,31.656,14.201,31.656,31.655V122.407z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M84.531,40.97c-24.021,0-43.563,19.542-43.563,43.563c0,24.02,19.542,43.561,43.563,43.561s43.563-19.541,43.563-43.561\nC128.094,60.512,108.552,40.97,84.531,40.97z\nM84.531,113.093c-15.749,0-28.563-12.812-28.563-28.561\nc0-15.75,12.813-28.563,28.563-28.563s28.563,12.813,28.563,28.563C113.094,100.281,100.28,113.093,84.531,113.093z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M129.921,28.251c-2.89,0-5.729,1.17-7.77,3.22c-2.051,2.04-3.23,4.88-3.23,7.78c0,2.891,1.18,5.73,3.23,7.78\nc2.04,2.04,4.88,3.22,7.77,3.22c2.9,0,5.73-1.18,7.78-3.22c2.05-2.05,3.22-4.89,3.22-7.78c0-2.9-1.17-5.74-3.22-7.78\nC135.661,29.421,132.821,28.251,129.921,28.251z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_intensity.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"60dp\"\n    android:height=\"60dp\"\n    android:viewportHeight=\"129\"\n    android:viewportWidth=\"129\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M118.5,60.2h-20.8c-1.8-6-7.5-10.5-14.1-10.5-6.6,0-12.3,4.4-14.1,10.5h-59c-2.3,0-4.1,1.8-4.1,4.1\n0,2.3 1.8,4.1 4.1,4.1h58.9c1.7,6.2 7.4,10.8 14.2,10.8 6.8,0 12.5-4.6\n14.2-10.8h20.7c2.3,0 4.1-1.8\n4.1-4.1-0.1-2.2-1.9-4.1-4.1-4.1zm-34.9,10.8c-3.6,0-6.6-2.9-6.6-6.5 0-3.6 2.9-6.5\n6.5-6.5 3.6,0 6.5,2.9 6.5,6.5 0.1,3.6-2.8,6.5-6.4,6.5z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_left.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_letters_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"573.852\"\n    android:viewportWidth=\"573.852\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M217.667,83.129c-1.632-4.488-4.692-6.732-9.18-6.732H129.54c-4.488,0-7.548,2.244-9.18,6.732\nL0.408,477.257c-0.816,3.672-0.408,6.321,1.224,7.953c1.632,2.448,4.284,3.675,7.956,3.675H80.58c4.896,0,7.956-2.244,9.18-6.732\nl20.196-70.992h118.117l20.196,70.992c1.224,4.488,4.08,6.732,8.568,6.732h71.604h0.609c2.448,0,4.593-0.817,6.429-2.448\ns2.754-3.876,2.754-6.732c0-0.814-0.409-2.446-1.227-4.896L217.667,83.129z\nM128.316,334.661l40.392-144.432l41.004,144.432 H128.316z\nM545.087,220.829c-19.176-17.544-46.103-26.316-80.781-26.316c-21.624,0-41.616,3.57-59.977,10.709\nc-18.361,7.14-34.476,17.646-48.348,31.518c-3.267,3.264-3.876,6.936-1.836,11.016l22.644,39.167\nc1.225,2.447,3.467,4.08,6.732,4.896c2.854,0.817,5.508,0,7.956-2.448c18.768-19.176,39.575-28.764,62.424-28.764\nc29.375,0,44.062,14.077,44.062,42.228v17.748c-17.135-13.464-38.351-20.193-63.646-20.193c-11.424,0-22.746,1.937-33.966,5.812\nc-11.222,3.876-21.219,9.792-29.988,17.748c-8.773,7.956-15.912,18.157-21.42,30.603c-5.508,12.442-8.262,27.027-8.262,43.758\nc0,16.317,2.649,30.6,7.953,42.84c5.307,12.24,12.444,22.542,21.423,30.906c8.975,8.362,18.971,14.688,29.985,18.972\nc11.018,4.284,22.44,6.426,34.272,6.426s23.255-1.836,34.271-5.508c11.019-3.672,20.811-8.975,29.376-15.912v5.508\nc0,2.448,0.918,4.593,2.754,6.429c1.839,1.836,3.979,2.754,6.429,2.754h57.525c2.448,0,4.592-0.918,6.429-2.754\nc1.836-1.836,2.754-3.979,2.754-6.429v-186.05C573.853,263.261,564.265,238.373,545.087,220.829z\nM497.964,419.116\nc-8.976,13.872-23.256,20.811-42.84,20.811c-11.832,0-21.215-3.774-28.149-11.322c-6.938-7.548-10.404-17.443-10.404-29.685\nc0-12.237,3.467-22.233,10.404-29.985c6.935-7.752,16.317-11.628,28.149-11.628c5.712,0,12.854,1.325,21.42,3.978\nc8.568,2.653,15.708,8.67,21.42,18.054V419.116z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_loop.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"50dp\"\n        android:height=\"50dp\"\n        android:viewportWidth=\"24.0\"\n        android:viewportHeight=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z\"/>\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_magic_stick.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"30dp\"\n    android:height=\"30dp\"\n    android:viewportHeight=\"535.5\"\n    android:viewportWidth=\"535.5\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 165.75 91.8 L 229.5 127.5 L 193.799 63.75 L 229.5 0 L 165.75 35.7 L 102 0 L 137.7 63.75 L 102 127.5 Z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 471.75 341.7 L 408 306 L 443.7 369.75 L 408 433.5 L 471.75 397.8 L 535.5 433.5 L 499.8 369.75 L 535.5 306 Z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M 535.5 0 L 471.75 35.7 L 408 0 L 443.7 63.75 L 408 127.5 L 471.75 91.8 L 535.5 127.5 L 499.8 63.75 Z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M341.7,135.15c-10.2-10.2-25.5-10.2-35.7,0L7.649,433.5c-10.2,10.2-10.2,25.5,0,35.7l58.65,58.649\nc10.2,10.2,25.5,10.2,35.7,0L400.35,229.5c10.2-10.2,10.2-25.5,0-35.7L341.7,135.15z\nM313.65,275.4L260.1,221.85l61.2-61.2 l53.55,53.55L313.65,275.4z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_overlay_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"511.998\"\n    android:viewportWidth=\"511.998\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M499.839,288.601l-53.456-32.602l53.456-32.602c7.552-4.605,12.159-12.813,12.159-21.659\nc0-8.846-4.609-17.054-12.159-21.659L269.21,39.423c-8.113-4.947-18.307-4.947-26.42,0L12.159,180.079\nC4.609,184.685,0,192.893,0,201.738c0,8.846,4.609,17.054,12.159,21.659l53.456,32.602l-53.456,32.602\nC4.609,293.206,0,301.414,0,310.26c0,8.846,4.609,17.054,12.159,21.659l230.629,140.657c4.056,2.473,8.633,3.711,13.211,3.711\ns9.153-1.236,13.211-3.711l230.629-140.657c7.552-4.605,12.159-12.813,12.159-21.659\nC511.998,301.414,507.391,293.206,499.839,288.601z\nM255.999,90.798l181.906,110.94L255.999,312.68L74.095,201.738L255.999,90.798 z\nM255.999,421.2L74.095,310.26l40.245-24.544l128.45,78.34c4.056,2.473,8.633,3.711,13.211,3.711s9.153-1.236,13.211-3.711\nl128.45-78.34l40.245,24.544L255.999,421.2z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_perspective_horizontal.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"75dp\"\n    android:height=\"75dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M72,73.5H71.79l-45-6.43a1.5,1.5,0,0,1-1.29-1.49V33.43a1.5,1.5,0,0,1,1.29-1.49l45-6.43A1.5,1.5,0,0,1,73.5,27V72A1.5,1.5,0,0,1,72,73.5ZM28.5,64.27l42,6V28.73l-42,6V64.27Z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_perspective_vertical.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"75dp\"\n    android:height=\"75dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n    <group\n        android:pivotX=\"50\"\n        android:pivotY=\"50\"\n        android:rotation=\"90\">\n        <path\n            android:fillColor=\"#ffffff\"\n            android:pathData=\"M72,73.5H71.79l-45-6.43a1.5,1.5,0,0,1-1.29-1.49V33.43a1.5,1.5,0,0,1,1.29-1.49l45-6.43A1.5,1.5,0,0,1,73.5,27V72A1.5,1.5,0,0,1,72,73.5ZM28.5,64.27l42,6V28.73l-42,6V64.27Z\" />\n    </group>\n\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_radial.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"40dp\"\n    android:height=\"40dp\"\n    android:viewportHeight=\"48\"\n    android:viewportWidth=\"48\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M20 18c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2\n2-.9 2-2-.9-2-2-2zm-6-7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6\n14c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-6-6c-.55 0-1 .45-1 1s.45 1 1\n1 1-.45 1-1-.45-1-1-1zm6-12c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm8\n3c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c.55 0 1-.45 1-1s-.45-1-1-1-1\n.45-1 1 .45 1 1 1zm6 12c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55\n0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM24 4C12.95 4 4 12.95 4 24s8.95 20 20\n20 20-8.95 20-20S35.05 4 24 4zm0 36c-8.84 0-16-7.16-16-16S15.16 8 24 8s16 7.16\n16 16-7.16 16-16 16zm4-7c-.55 0-1 .45-1 1s.45 1 1 1 1-.45\n1-1-.45-1-1-1zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_rotate_left_white_35dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"35dp\"\n    android:height=\"35dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M7.11,8.53L5.7,7.11C4.8,8.27 4.24,9.61 4.07,11h2.02c0.14,-0.87 0.49,-1.72 1.02,-2.47zM6.09,13L4.07,13c0.17,1.39 0.72,2.73 1.62,3.89l1.41,-1.42c-0.52,-0.75 -0.87,-1.59 -1.01,-2.47zM7.1,18.32c1.16,0.9 2.51,1.44 3.9,1.61L11,17.9c-0.87,-0.15 -1.71,-0.49 -2.46,-1.03L7.1,18.32zM13,4.07L13,1L8.45,5.55 13,10L13,6.09c2.84,0.48 5,2.94 5,5.91s-2.16,5.43 -5,5.91v2.02c3.95,-0.49 7,-3.85 7,-7.93s-3.05,-7.44 -7,-7.93z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_rotate_right_white_35dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"35dp\"\n    android:height=\"35dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M15.55,5.55L11,1v3.07C7.06,4.56 4,7.92 4,12s3.05,7.44 7,7.93v-2.02c-2.84,-0.48 -5,-2.94 -5,-5.91s2.16,-5.43 5,-5.91L11,10l4.55,-4.45zM19.93,11c-0.17,-1.39 -0.72,-2.73 -1.62,-3.89l-1.42,1.42c0.54,0.75 0.88,1.6 1.02,2.47h2.02zM13,17.9v2.02c1.39,-0.17 2.74,-0.71 3.9,-1.61l-1.44,-1.44c-0.75,0.54 -1.59,0.89 -2.46,1.03zM16.89,15.48l1.42,1.41c0.9,-1.16 1.45,-2.5 1.62,-3.89h-2.02c-0.14,0.87 -0.48,1.72 -1.02,2.48z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_rotation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"509.822\"\n    android:viewportWidth=\"509.823\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M509.823,254.911c0,140.559-114.354,254.911-254.911,254.911C114.353,509.822,0,395.47,0,254.911h44.97\nc0,115.758,94.182,209.949,209.942,209.949c115.757,0,209.938-94.191,209.938-209.949c0-115.76-94.182-209.941-209.938-209.941\nc-50.893,0-99.505,18.291-137.719,51.558l45.908,45.903L20.507,165.208L43.283,22.633l42.057,42.05\nC132.097,22.972,192.071,0,254.912,0C395.469,0,509.823,114.353,509.823,254.911z\nM409.653,251.164L255.002,96.513L100.347,251.164\nl154.655,154.652L409.653,251.164z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_saturation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M21.753,86.773l-5.25-5.251l-5.223,5.224c-1.356,1.344-2.197,3.202-2.191,5.259\nc-0.004,4.1,3.319,7.416,7.414,7.413c4.095-0.005,7.408-3.324,7.412-7.421c-0.004-2.039-0.833-3.886-2.166-5.22L21.753,86.773z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M86.484,3.978c-4.521-4.52-11.854-4.52-16.375,0.002L54.592,19.499l-2.783-2.783\nc-1.505-1.505-3.939-1.505-5.441-0.004c-1.507,1.507-1.507,3.942-0.001,5.447l2.743,2.743L22.368,51.641L11.528,73.55l5.37,5.371\nl21.839-10.917l26.738-26.736l2.724,2.723c1.505,1.504,3.938,1.505,5.443-0.001c1.504-1.501,1.504-3.938-0.003-5.442l-2.673-2.673\nl15.518-15.519C91.008,15.833,91.01,8.503,86.484,3.978z\nM54.523,41.31l-2.728-2.727l-2.692,2.69l2.728,2.729l-5.498,5.5\nl-2.728-2.729l-2.692,2.69l2.729,2.728l-4.838,4.84l-2.943-2.943L22.736,67.213l5.104-10.099L54.604,30.35l5.438,5.439L54.523,41.31\nz\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_settings.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_shadows.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M50.978,5C26.739,5,7.012,24.727,7.012,48.965c0,14.132,6.703,26.731,17.1,34.78c-9.838,0.983-16.583,2.989-16.583,5.307\nC7.528,92.341,21.081,95,37.788,95c15.961,0,30.714-2.938,30.393-5.587C83.895,82.721,94.942,67.1,94.942,48.965\nC94.942,24.727,75.215,5,50.978,5z\nM64.332,85.39l2.09-2.09c-1.541,0.197-3.114,0.301-4.707,0.32l-3.445,3.445\nc-1.188,0.237-2.398,0.403-3.63,0.518l3.081-3.084l0.974-0.971c-1.335-0.073-2.647-0.229-3.941-0.445l-0.911,0.91l-3.754,3.756\nc-0.983-0.021-1.966-0.084-2.939-0.176l4.987-4.987c-1.158-0.278-2.307-0.59-3.424-0.961l-5.379,5.379\nc-0.92-0.188-1.82-0.404-2.721-0.652l4.831-4.831l0.787-0.786c-1.035-0.415-2.038-0.868-3.031-1.354l-0.765,0.764l-5.132,5.132\nc-0.713-0.269-1.417-0.559-2.1-0.879l5.297-5.296l0.755-0.756c-0.931-0.528-1.831-1.087-2.71-1.675l-0.745,0.744l-5.534,5.523\nc-0.693-0.383-1.366-0.775-2.028-1.211l6.414-6.413c-0.828-0.631-1.635-1.293-2.411-1.976l-0.724,0.724l-5.876,5.877\nc-0.641-0.486-1.251-0.982-1.861-1.51l6-6.001l0.725-0.725c-0.735-0.735-1.438-1.489-2.122-2.265l-0.724,0.725l-6.155,6.155\nc-0.559-0.559-1.106-1.14-1.634-1.739l6.279-6.278l0.734-0.734c-0.641-0.829-1.251-1.688-1.82-2.566l-7.159,7.158\nc-0.485-0.642-0.952-1.303-1.386-1.985l6.507-6.507l0.765-0.767c-0.538-0.941-1.044-1.902-1.5-2.886l-0.776,0.775l-6.642,6.642\nc-0.403-0.734-0.776-1.479-1.127-2.245l6.735-6.734l0.796-0.795c-0.424-1.067-0.796-2.152-1.128-3.26l-7.676,7.676\nc-0.31-0.837-0.579-1.687-0.827-2.545l7.811-7.81c-0.279-1.221-0.497-2.462-0.663-3.725l-0.91,0.911l-7.065,7.065\nc-0.176-0.973-0.321-1.955-0.424-2.948l8.12-8.121c-0.031-0.714-0.051-1.427-0.051-2.141c0-0.755,0.021-1.511,0.062-2.255\nl-8.338,8.338c0-1.2,0.063-2.379,0.176-3.548l8.545-8.545c0.279-1.924,0.703-3.807,1.252-5.638l-1.48,1.479l-7.458,7.458\nc0.393-1.666,0.89-3.3,1.5-4.873l7.521-7.521l1.955-1.955c1.604-3.486,3.683-6.704,6.176-9.579\nc5.969-3.776,13.045-5.949,20.607-5.949c21.393,0,38.793,17.4,38.793,38.793C89.771,65.661,79.166,79.938,64.332,85.39z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_share.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_stiker_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"408.547\"\n    android:viewportWidth=\"408.547\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M356.714,277.81c-60.367,0-117.12-23.508-159.807-66.194c-42.686-42.686-66.193-99.439-66.193-159.806\nc0-17.519,2.014-34.899,5.978-51.806C56.825,30.063,0,107.164,0,197.542c0,116.532,94.468,211,211,211\nc90.387,0,167.495-56.836,197.547-136.716C391.632,275.795,374.243,277.81,356.714,277.81z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M356.714,247.81c15.252,0,30.375-1.756,45.074-5.212L165.924,6.752c-3.455,14.695-5.209,29.812-5.209,45.059\nC160.714,159.885,248.639,247.81,356.714,247.81z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_straighten.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"75dp\"\n    android:height=\"75dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 26.846 42 L 29.338 23.073 L 76.927 29.338 L 75.26 42 L 79.295 42 L 81.416 25.895 L 25.895 18.584 L 22.812 42 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 73.154 58 L 70.662 76.927 L 23.073 70.662 L 24.74 58 L 20.705 58 L 18.584 74.105 L 74.105 81.416 L 77.188 58 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 90 48 C 91.1045694997 48 92 48.8954305003 92 50 C 92 51.1045694997 91.1045694997 52 90 52 C 88.8954305003 52 88 51.1045694997 88 50 C 88 48.8954305003 88.8954305003 48 90 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 82 48 C 83.1045694997 48 84 48.8954305003 84 50 C 84 51.1045694997 83.1045694997 52 82 52 C 80.8954305003 52 80 51.1045694997 80 50 C 80 48.8954305003 80.8954305003 48 82 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 74 48 C 75.1045694997 48 76 48.8954305003 76 50 C 76 51.1045694997 75.1045694997 52 74 52 C 72.8954305003 52 72 51.1045694997 72 50 C 72 48.8954305003 72.8954305003 48 74 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 66 48 C 67.1045694997 48 68 48.8954305003 68 50 C 68 51.1045694997 67.1045694997 52 66 52 C 64.8954305003 52 64 51.1045694997 64 50 C 64 48.8954305003 64.8954305003 48 66 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 58 48 C 59.1045694997 48 60 48.8954305003 60 50 C 60 51.1045694997 59.1045694997 52 58 52 C 56.8954305003 52 56 51.1045694997 56 50 C 56 48.8954305003 56.8954305003 48 58 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 50 48 C 51.1045694997 48 52 48.8954305003 52 50 C 52 51.1045694997 51.1045694997 52 50 52 C 48.8954305003 52 48 51.1045694997 48 50 C 48 48.8954305003 48.8954305003 48 50 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 42 48 C 43.1045694997 48 44 48.8954305003 44 50 C 44 51.1045694997 43.1045694997 52 42 52 C 40.8954305003 52 40 51.1045694997 40 50 C 40 48.8954305003 40.8954305003 48 42 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 34 48 C 35.1045694997 48 36 48.8954305003 36 50 C 36 51.1045694997 35.1045694997 52 34 52 C 32.8954305003 52 32 51.1045694997 32 50 C 32 48.8954305003 32.8954305003 48 34 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 26 48 C 27.1045694997 48 28 48.8954305003 28 50 C 28 51.1045694997 27.1045694997 52 26 52 C 24.8954305003 52 24 51.1045694997 24 50 C 24 48.8954305003 24.8954305003 48 26 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 18 48 C 19.1045694997 48 20 48.8954305003 20 50 C 20 51.1045694997 19.1045694997 52 18 52 C 16.8954305003 52 16 51.1045694997 16 50 C 16 48.8954305003 16.8954305003 48 18 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 10 48 C 11.1045694997 48 12 48.8954305003 12 50 C 12 51.1045694997 11.1045694997 52 10 52 C 8.89543050034 52 8 51.1045694997 8 50 C 8 48.8954305003 8.89543050034 48 10 48 Z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_tilt_shift_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"48\"\n    android:viewportWidth=\"48\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M22 8.14V4.1c-4.02 .4 -7.68 2-10.65 4.42l2.85 2.85c2.22-1.71 4.88-2.87\n7.8-3.23zm14.65 .38 C33.69 6.1 30.02 4.5 26 4.1v4.04c2.92 .37 5.58 1.52 7.8\n3.24l2.85-2.86zM39.86 22h4.04c-.4-4.02-2-7.68-4.42-10.65l-2.85 2.85c1.71 2.22\n2.87 4.88 3.23 7.8zm-28.48-7.8l-2.85-2.85C6.1 14.32 4.5 17.98 4.1\n22h4.04c.37-2.92 1.52-5.58 3.24-7.8zM8.14 26H4.1c.4 4.02 2 7.68 4.42\n10.65l2.85-2.85c-1.71-2.22-2.86-4.89-3.23-7.8zM30 24c0-3.31-2.69-6-6-6s-6 2.69-6\n6 2.69 6 6 6 6-2.69 6-6zm6.62 9.79l2.85 2.85C41.9 33.68 43.5 30.02 43.9\n26h-4.04c-.36 2.91-1.52 5.58-3.24 7.79zM26 39.86v4.04c4.02-.4 7.68-2\n10.65-4.42l-2.85-2.85c-2.22 1.71-4.88 2.86-7.8 3.23zm-14.65-.38C14.32 41.9 17.98\n43.5 22 43.9v-4.04c-2.92-.37-5.58-1.52-7.8-3.24l-2.85 2.86z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_tint.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M7.11,8.53L5.7,7.11C4.8,8.27 4.24,9.61 4.07,11h2.02c0.14,-0.87 0.49,-1.72 1.02,-2.47zM6.09,13L4.07,13c0.17,1.39 0.72,2.73 1.62,3.89l1.41,-1.42c-0.52,-0.75 -0.87,-1.59 -1.01,-2.47zM7.1,18.32c1.16,0.9 2.51,1.44 3.9,1.61L11,17.9c-0.87,-0.15 -1.71,-0.49 -2.46,-1.03L7.1,18.32zM13,4.07L13,1L8.45,5.55 13,10L13,6.09c2.84,0.48 5,2.94 5,5.91s-2.16,5.43 -5,5.91v2.02c3.95,-0.49 7,-3.85 7,-7.93s-3.05,-7.44 -7,-7.93z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_transform_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 26.846 42 L 29.338 23.073 L 76.927 29.338 L 75.26 42 L 79.295 42 L 81.416 25.895 L 25.895 18.584 L 22.812 42 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 73.154 58 L 70.662 76.927 L 23.073 70.662 L 24.74 58 L 20.705 58 L 18.584 74.105 L 74.105 81.416 L 77.188 58 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 90 48 C 91.1045694997 48 92 48.8954305003 92 50 C 92 51.1045694997 91.1045694997 52 90 52 C 88.8954305003 52 88 51.1045694997 88 50 C 88 48.8954305003 88.8954305003 48 90 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 82 48 C 83.1045694997 48 84 48.8954305003 84 50 C 84 51.1045694997 83.1045694997 52 82 52 C 80.8954305003 52 80 51.1045694997 80 50 C 80 48.8954305003 80.8954305003 48 82 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 74 48 C 75.1045694997 48 76 48.8954305003 76 50 C 76 51.1045694997 75.1045694997 52 74 52 C 72.8954305003 52 72 51.1045694997 72 50 C 72 48.8954305003 72.8954305003 48 74 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 66 48 C 67.1045694997 48 68 48.8954305003 68 50 C 68 51.1045694997 67.1045694997 52 66 52 C 64.8954305003 52 64 51.1045694997 64 50 C 64 48.8954305003 64.8954305003 48 66 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 58 48 C 59.1045694997 48 60 48.8954305003 60 50 C 60 51.1045694997 59.1045694997 52 58 52 C 56.8954305003 52 56 51.1045694997 56 50 C 56 48.8954305003 56.8954305003 48 58 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 50 48 C 51.1045694997 48 52 48.8954305003 52 50 C 52 51.1045694997 51.1045694997 52 50 52 C 48.8954305003 52 48 51.1045694997 48 50 C 48 48.8954305003 48.8954305003 48 50 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 42 48 C 43.1045694997 48 44 48.8954305003 44 50 C 44 51.1045694997 43.1045694997 52 42 52 C 40.8954305003 52 40 51.1045694997 40 50 C 40 48.8954305003 40.8954305003 48 42 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 34 48 C 35.1045694997 48 36 48.8954305003 36 50 C 36 51.1045694997 35.1045694997 52 34 52 C 32.8954305003 52 32 51.1045694997 32 50 C 32 48.8954305003 32.8954305003 48 34 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 26 48 C 27.1045694997 48 28 48.8954305003 28 50 C 28 51.1045694997 27.1045694997 52 26 52 C 24.8954305003 52 24 51.1045694997 24 50 C 24 48.8954305003 24.8954305003 48 26 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 18 48 C 19.1045694997 48 20 48.8954305003 20 50 C 20 51.1045694997 19.1045694997 52 18 52 C 16.8954305003 52 16 51.1045694997 16 50 C 16 48.8954305003 16.8954305003 48 18 48 Z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M 10 48 C 11.1045694997 48 12 48.8954305003 12 50 C 12 51.1045694997 11.1045694997 52 10 52 C 8.89543050034 52 8 51.1045694997 8 50 C 8 48.8954305003 8.89543050034 48 10 48 Z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_undo.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportHeight=\"24.0\"\n    android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M7.11,8.53L5.7,7.11C4.8,8.27 4.24,9.61 4.07,11h2.02c0.14,-0.87 0.49,-1.72 1.02,-2.47zM6.09,13L4.07,13c0.17,1.39 0.72,2.73 1.62,3.89l1.41,-1.42c-0.52,-0.75 -0.87,-1.59 -1.01,-2.47zM7.1,18.32c1.16,0.9 2.51,1.44 3.9,1.61L11,17.9c-0.87,-0.15 -1.71,-0.49 -2.46,-1.03L7.1,18.32zM13,4.07L13,1L8.45,5.55 13,10L13,6.09c2.84,0.48 5,2.94 5,5.91s-2.16,5.43 -5,5.91v2.02c3.95,-0.49 7,-3.85 7,-7.93s-3.05,-7.44 -7,-7.93z\" />\n</vector>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_v_flip_white_35dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"35dp\"\n    android:height=\"35dp\"\n    android:viewportHeight=\"16\"\n    android:viewportWidth=\"16\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M1 0l5 6 4.9-6z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M5.9 9l-4.9 6h10l-5.1-6zM3.1 14l2.8-3.4 3 3.4h-5.8z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M10 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M12 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M8 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M6 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M4 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M2 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M0 7h1v1h-1v-1z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M15 7.5v0c0 1.3-0.7 2.6-1.9 3.6l-1.1-1.1v3h3l-1.2-1.2c1.4-1.2 2.2-2.7 2.2-4.3 0\n0 0 0 0 0 0-1.9-1-3.6-2.9-4.9l-0.6 0.8c1.6 1.1 2.5 2.5 2.5 4.1z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_vignette_white_50dp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"100\"\n    android:viewportWidth=\"100\">\n\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M88,88H12V12h76V88z M16,84h68V16H16V84z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M59.27,76c0-1.101,0.9-2,2-2l0,0c1.11,0,2,0.899,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC60.17,78,59.27,77.1,59.27,76z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M52.27,76c0-1.101,0.9-2,2-2l0,0c1.11,0,2,0.899,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC53.17,78,52.27,77.1,52.27,76z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M45.27,76c0-1.101,0.9-2,2-2l0,0c1.11,0,2,0.899,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC46.17,78,45.27,77.1,45.27,76z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M38.27,76c0-1.101,0.9-2,2-2l0,0c1.11,0,2,0.899,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC39.17,78,38.27,77.1,38.27,76z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M32.97,77.84L32.97,77.84L32.97,77.84c-1.09-0.17-1.84-1.2-1.66-2.29l0,0c0.17-1.09,1.19-1.83,2.29-1.66\nl0,0c1.09,0.17,1.83,1.2,1.66,2.29l0,0c-0.16,0.98-1.01,1.69-1.98,1.69l0,0C33.18,77.87,33.07,77.859,32.97,77.84z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M66.31,76.1c-0.319-1.05,0.271-2.17,1.32-2.5l0,0c1.06-0.319,2.18,0.271,2.5,1.32l0,0\nc0.33,1.06-0.26,2.18-1.32,2.51l0,0c-0.189,0.061-0.39,0.09-0.59,0.09l0,0C67.37,77.52,66.58,76.96,66.31,76.1z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M25.74,74.109L25.74,74.109L25.74,74.109c-0.77-0.79-0.76-2.06,0.03-2.829l0,0\nc0.78-0.771,2.05-0.771,2.82,0.02h0.01c0.77,0.79,0.76,2.06-0.03,2.83l0,0c-0.39,0.38-0.89,0.58-1.4,0.58l0,0\nC26.65,74.71,26.13,74.51,25.74,74.109z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M72.64,73.14c-0.88-0.66-1.07-1.91-0.41-2.8l0,0c0.66-0.89,1.91-1.07,2.801-0.41l0,0\nc0.88,0.65,1.069,1.91,0.409,2.79l0,0l0,0l0,0c-0.39,0.53-0.989,0.811-1.609,0.811l0,0C73.42,73.53,73,73.399,72.64,73.14z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M22.13,66.819L22.13,66.819L22.13,66.819c-0.16-1.09,0.61-2.1,1.7-2.26l0,0c1.09-0.149,2.1,0.61,2.26,1.7\nl0,0c0.15,1.09-0.61,2.11-1.7,2.26l0,0c-0.1,0.011-0.19,0.021-0.28,0.021l0,0C23.13,68.54,22.27,67.819,22.13,66.819z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M74,65L74,65c0,0,0,0,0-0.01l0,0c0-0.03,0-0.061,0-0.091l0,0c0-1.1,0.899-2,2-2l0,0c1.1,0,2,0.9,2,2l0,0\nc0,0.021,0,0.04,0,0.051l0,0c0,0.02,0,0.029,0,0.05l0,0c0,1.1-0.9,2-2,2l0,0C74.899,67,74,66.1,74,65z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M22,59.55c0-1.11,0.89-2,2-2l0,0c1.11,0,2,0.89,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC22.89,61.55,22,60.649,22,59.55z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M74,57.899c0-1.1,0.899-2,2-2l0,0c1.1,0,2,0.9,2,2l0,0c0,1.11-0.9,2-2,2l0,0\nC74.899,59.899,74,59.01,74,57.899z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M22,52.55c0-1.11,0.89-2,2-2l0,0c1.11,0,2,0.89,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC22.89,54.55,22,53.649,22,52.55z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M74,50.9c0-1.1,0.899-2,2-2l0,0c1.1,0,2,0.9,2,2l0,0c0,1.11-0.9,2-2,2l0,0C74.899,52.899,74,52.01,74,50.9z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M22,45.55c0-1.11,0.89-2,2-2l0,0c1.11,0,2,0.89,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC22.89,47.55,22,46.65,22,45.55z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M74,43.9c0-1.1,0.899-2,2-2l0,0c1.1,0,2,0.9,2,2l0,0c0,1.11-0.9,2-2,2l0,0C74.899,45.9,74,45.01,74,43.9z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M22,38.55c0-1.11,0.89-2,2-2l0,0c1.11,0,2,0.89,2,2l0,0c0,1.1-0.89,2-2,2l0,0\nC22.89,40.55,22,39.65,22,38.55z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M74,36.9c0-1.1,0.899-2,2-2l0,0c1.1,0,2,0.9,2,2l0,0c0,1.11-0.9,2-2,2l0,0C74.899,38.9,74,38.01,74,36.9z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M23.92,33.51c-1.05-0.35-1.63-1.48-1.28-2.53l0,0l0,0l0,0c0.34-1.05,1.47-1.62,2.52-1.27l0,0\nc1.05,0.34,1.62,1.47,1.28,2.52l0,0c-0.28,0.84-1.06,1.38-1.9,1.38l0,0C24.33,33.61,24.12,33.57,23.92,33.51z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M73.05,30.99c-0.5-0.99-0.1-2.19,0.88-2.69l0,0c0.99-0.5,2.19-0.1,2.69,0.89l0,0\nc0.5,0.98,0.1,2.19-0.891,2.68l0,0c-0.29,0.15-0.59,0.22-0.89,0.22l0,0C74.1,32.09,73.399,31.68,73.05,30.99z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M26.99,27.22c-0.65-0.89-0.44-2.14,0.46-2.79l0,0c0.89-0.64,2.14-0.44,2.79,0.46l0,0\nc0.64,0.9,0.44,2.15-0.46,2.79l0,0c-0.36,0.26-0.76,0.38-1.17,0.38l0,0C27.99,28.06,27.38,27.77,26.99,27.22z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M69.069,26.98c-0.979-0.5-1.369-1.71-0.869-2.69l0,0c0.51-0.98,1.71-1.37,2.699-0.87l0,0\nc0.98,0.51,1.37,1.71,0.86,2.69l0,0c-0.35,0.7-1.05,1.09-1.78,1.09l0,0C69.67,27.2,69.359,27.13,69.069,26.98z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M61.18,24c0-1.11,0.89-2,2-2l0,0c1.101,0,2,0.89,2,2l0,0c0,1.11-0.899,2-2,2l0,0\nC62.069,26,61.18,25.11,61.18,24z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M54.18,24c0-1.11,0.89-2,2-2l0,0c1.101,0,2,0.89,2,2l0,0c0,1.11-0.899,2-2,2l0,0\nC55.069,26,54.18,25.11,54.18,24z\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M47.18,24c0-1.11,0.89-2,2-2l0,0c1.1,0,2,0.89,2,2l0,0c0,1.11-0.9,2-2,2l0,0C48.07,26,47.18,25.11,47.18,24\nz\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M40.18,24c0-1.11,0.89-2,2-2l0,0c1.1,0,2,0.89,2,2l0,0c0,1.11-0.9,2-2,2l0,0C41.07,26,40.18,25.11,40.18,24\nz\" />\n    <path\n        android:fillColor=\"#ffffff\"\n        android:pathData=\"M33.18,24c0-1.11,0.89-2,2-2l0,0c1.1,0,2,0.89,2,2l0,0c0,1.11-0.9,2-2,2l0,0C34.07,26,33.18,25.11,33.18,24\nz\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/drawable/ic_warmth.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"50dp\"\n    android:height=\"50dp\"\n    android:viewportHeight=\"250.189\"\n    android:viewportWidth=\"250.189\">\n\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M159.845,147.251V34.744C159.845,15.586,144.255,0,125.093,0c-19.159,0-34.746,15.586-34.746,34.744v112.506\nc-14.234,10.843-22.617,27.59-22.617,45.575c0,31.631,25.732,57.364,57.363,57.364c31.633,0,57.367-25.733,57.367-57.364\nC182.46,174.842,174.077,158.095,159.845,147.251z\nM125.093,235.189c-23.359,0-42.363-19.004-42.363-42.364\nc0-14.294,7.188-27.537,19.228-35.425c2.115-1.386,3.39-3.745,3.39-6.273V34.744c0-10.887,8.858-19.744,19.746-19.744\nc10.892,0,19.752,8.857,19.752,19.744v116.383c0,2.529,1.274,4.887,3.39,6.273c12.038,7.889,19.226,21.132,19.226,35.425\nC167.46,216.185,148.454,235.189,125.093,235.189z\" />\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:pathData=\"M132.595,169.042V69.924c0-4.142-3.357-7.5-7.5-7.5s-7.5,3.358-7.5,7.5v99.118c-10.104,3.183-17.43,12.622-17.43,23.783\nc0,13.767,11.16,24.931,24.93,24.931c13.773,0,24.932-11.164,24.932-24.931C150.026,181.663,142.7,172.223,132.595,169.042z\" />\n</vector>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/activity_editor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/colorBackground\"\n    android:orientation=\"vertical\"\n    tools:context=\".ui.activities.EditorActivity\">\n\n    <android.support.design.widget.AppBarLayout\n        android:id=\"@+id/appbar_editor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:theme=\"@style/AppTheme.NoActionBar.AppBarOverlay\">\n\n        <android.support.v7.widget.Toolbar\n            android:id=\"@+id/toolbar_editor\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\"\n            android:background=\"?attr/colorPrimary\">\n\n            <Button\n                android:id=\"@+id/button_undo\"\n                android:layout_width=\"45dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:background=\"?attr/selectableItemBackgroundBorderless\"\n                android:drawableLeft=\"@drawable/ic_undo\"\n                android:text=\"0\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"18sp\"\n                android:visibility=\"gone\" />\n        </android.support.v7.widget.Toolbar>\n    </android.support.design.widget.AppBarLayout>\n\n    <net.iquesoft.iquephoto.core.ImageEditorView\n        android:id=\"@+id/image_editor_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\" />\n\n    <FrameLayout\n        android:id=\"@+id/frame_layout_fragment_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/tool_height\"\n        android:background=\"@color/colorPrimaryDark\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/activity_gallery.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/colorBackground\"\n    android:fitsSystemWindows=\"true\"\n    android:orientation=\"vertical\"\n    tools:context=\"net.iquesoft.iquephoto.ui.activities.GalleryActivity\">\n\n    <android.support.design.widget.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:theme=\"@style/AppTheme.NoActionBar.AppBarOverlay\">\n\n        <android.support.v7.widget.Toolbar\n            android:id=\"@+id/toolbar_gallery\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\"\n            android:background=\"?attr/colorPrimary\"\n            app:popupTheme=\"@style/AppTheme.NoActionBar.PopupOverlay\"\n            app:title=\"@string/gallery\" />\n    </android.support.design.widget.AppBarLayout>\n\n    <FrameLayout\n        android:id=\"@+id/galleryFragmentFrameLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/activity_home.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/colorBackground\"\n    tools:context=\".ui.activities.HomeActivity\">\n\n    <TextView\n        android:id=\"@+id/applicationName\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_centerVertical=\"true\"\n        android:layout_gravity=\"center\"\n        android:text=\"@string/app_name\"\n        android:textAppearance=\"?android:attr/textAppearanceLarge\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"60sp\"\n        android:textStyle=\"bold\" />\n\n    <Button\n        android:id=\"@+id/gallery_button\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignEnd=\"@+id/applicationName\"\n        android:layout_alignRight=\"@+id/applicationName\"\n        android:layout_below=\"@+id/applicationName\"\n        android:layout_marginTop=\"59dp\"\n        android:background=\"?attr/selectableItemBackgroundBorderless\"\n        android:drawableTop=\"@drawable/ic_gallery_white_100dp\"\n        android:text=\"@string/gallery\"\n        android:textAllCaps=\"false\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"16sp\"\n        android:textStyle=\"bold\" />\n\n    <Button\n        android:id=\"@+id/button_camera\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignBaseline=\"@+id/gallery_button\"\n        android:layout_alignBottom=\"@+id/gallery_button\"\n        android:layout_alignLeft=\"@+id/applicationName\"\n        android:layout_alignStart=\"@+id/applicationName\"\n        android:background=\"?attr/selectableItemBackgroundBorderless\"\n        android:drawableTop=\"@drawable/ic_camera\"\n        android:text=\"@string/camera\"\n        android:textAllCaps=\"false\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"16sp\"\n        android:textStyle=\"bold\" />\n\n    <ImageView\n        android:id=\"@+id/applicationIcon\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"150dp\"\n        android:layout_above=\"@+id/applicationName\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_gravity=\"center\"\n        android:layout_marginBottom=\"40dp\"\n        android:src=\"@drawable/application_icon\" />\n\n</RelativeLayout>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/activity_preview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:custom=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/colorPrimary\"\n    android:orientation=\"vertical\">\n\n    <android.support.design.widget.AppBarLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"4dp\"\n        android:theme=\"@style/AppTheme.NoActionBar.AppBarOverlay\">\n\n        <android.support.v7.widget.Toolbar\n            android:id=\"@+id/toolbar_preview\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"?attr/actionBarSize\"\n            android:background=\"?attr/colorPrimary\"\n            custom:popupTheme=\"@style/AppTheme.NoActionBar.PopupOverlay\"\n            custom:title=\"@string/preview\" />\n    </android.support.design.widget.AppBarLayout>\n\n    <com.isseiaoki.simplecropview.CropImageView\n        android:id=\"@+id/crop_image_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\"\n        android:paddingBottom=\"16dp\"\n        android:paddingLeft=\"16dp\"\n        android:paddingRight=\"16dp\"\n        android:paddingTop=\"16dp\"\n        custom:scv_background_color=\"@color/colorBackground\"\n        custom:scv_crop_mode=\"free\"\n        custom:scv_frame_color=\"@color/white\"\n        custom:scv_frame_stroke_weight=\"1dp\"\n        custom:scv_guide_color=\"@color/white\"\n        custom:scv_guide_show_mode=\"show_always\"\n        custom:scv_guide_stroke_weight=\"1dp\"\n        custom:scv_handle_color=\"@color/white\"\n        custom:scv_handle_show_mode=\"show_always\"\n        custom:scv_handle_size=\"14dp\"\n        custom:scv_min_frame_size=\"50dp\"\n        custom:scv_overlay_color=\"#aa1c1c1c\"\n        custom:scv_touch_padding=\"8dp\" />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/tool_height\"\n        android:background=\"@color/colorPrimary\"\n        android:elevation=\"8dp\"\n        android:gravity=\"bottom\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_gravity=\"center\"\n            android:layout_weight=\"1\"\n            android:gravity=\"center\"\n            android:orientation=\"horizontal\">\n\n            <ImageButton\n                android:id=\"@+id/button_flip_vertical\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\"\n                android:background=\"?attr/selectableItemBackgroundBorderless\"\n                android:paddingBottom=\"10dp\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:paddingTop=\"10dp\"\n                android:src=\"@drawable/ic_v_flip_white_35dp\" />\n\n            <ImageButton\n                android:id=\"@+id/button_rotate_left\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\"\n                android:background=\"?attr/selectableItemBackgroundBorderless\"\n                android:paddingBottom=\"10dp\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:paddingTop=\"10dp\"\n                android:src=\"@drawable/ic_rotate_left_white_35dp\" />\n\n            <ImageButton\n                android:id=\"@+id/button_rotate_right\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\"\n                android:background=\"?attr/selectableItemBackgroundBorderless\"\n                android:paddingBottom=\"10dp\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:paddingTop=\"10dp\"\n                android:src=\"@drawable/ic_rotate_right_white_35dp\" />\n\n            <ImageButton\n                android:id=\"@+id/button_flip_horizontal\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"match_parent\"\n                android:background=\"?attr/selectableItemBackgroundBorderless\"\n                android:paddingBottom=\"10dp\"\n                android:paddingLeft=\"16dp\"\n                android:paddingRight=\"16dp\"\n                android:paddingTop=\"10dp\"\n                android:src=\"@drawable/ic_h_flip_white_35dp\" />\n        </LinearLayout>\n\n        <android.support.design.widget.TabLayout\n            android:id=\"@+id/tab_layout_crop\"\n            style=\"@style/TabLayout\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            custom:tabIndicatorColor=\"@color/white\"\n            custom:tabMode=\"scrollable\"\n            custom:tabSelectedTextColor=\"@color/white\"\n            custom:tabTextColor=\"@color/white\" />\n    </LinearLayout>\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/dialog_argb_color_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"350dp\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"5dp\">\n\n    <FrameLayout\n        android:id=\"@+id/argbColorFrameLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"325dp\"\n        android:background=\"@color/red\" />\n\n    <GridLayout\n        android:id=\"@+id/argbGridLayout\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@+id/argbColorFrameLayout\"\n        android:columnCount=\"4\"\n        android:padding=\"10dp\"\n        android:rowCount=\"5\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"0\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"0\"\n            android:text=\"A\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/argbASeekBar\"\n            android:layout_width=\"285dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"1\"\n            android:layout_columnWeight=\"1\"\n            android:layout_row=\"0\"\n            app:dsb_indicatorColor=\"@color/blue\"\n            app:dsb_indicatorTextAppearance=\"@color/white\"\n            app:dsb_max=\"255\"\n            app:dsb_min=\"0\"\n            app:dsb_progressColor=\"@color/blue\"\n            app:dsb_rippleColor=\"@color/blue\"\n            app:dsb_trackColor=\"@color/blue\"\n            app:dsb_value=\"0\" />\n\n        <TextView\n            android:id=\"@+id/argbAValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"2\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"0\"\n            android:text=\"0\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"0\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"1\"\n            android:text=\"R\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/argbRSeekBar\"\n            android:layout_width=\"285dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"1\"\n            android:layout_columnWeight=\"1\"\n            android:layout_row=\"1\"\n            app:dsb_indicatorColor=\"@color/red\"\n            app:dsb_indicatorTextAppearance=\"@color/white\"\n            app:dsb_max=\"255\"\n            app:dsb_min=\"0\"\n            app:dsb_progressColor=\"@color/red\"\n            app:dsb_rippleColor=\"@color/red\"\n            app:dsb_trackColor=\"@color/red\"\n            app:dsb_value=\"255\" />\n\n        <TextView\n            android:id=\"@+id/argbRValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"2\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"1\"\n            android:text=\"255\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"0\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"2\"\n            android:text=\"G\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/argbGSeekBar\"\n            android:layout_width=\"285dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"1\"\n            android:layout_columnWeight=\"1\"\n            android:layout_row=\"2\"\n            app:dsb_indicatorColor=\"@color/green\"\n            app:dsb_indicatorTextAppearance=\"@color/white\"\n            app:dsb_max=\"255\"\n            app:dsb_min=\"0\"\n            app:dsb_progressColor=\"@color/green\"\n            app:dsb_rippleColor=\"@color/green\"\n            app:dsb_trackColor=\"@color/green\"\n            app:dsb_value=\"0\" />\n\n        <TextView\n            android:id=\"@+id/argbGValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"2\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"2\"\n            android:text=\"0\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"0\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"3\"\n            android:text=\"B\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/argbBSeekBar\"\n            android:layout_width=\"285dp\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"1\"\n            android:layout_columnWeight=\"1\"\n            android:layout_row=\"3\"\n            app:dsb_indicatorColor=\"@color/blue\"\n            app:dsb_indicatorTextAppearance=\"@color/white\"\n            app:dsb_max=\"255\"\n            app:dsb_min=\"0\"\n            app:dsb_progressColor=\"@color/blue\"\n            app:dsb_rippleColor=\"@color/blue\"\n            app:dsb_trackColor=\"@color/blue\"\n            app:dsb_value=\"0\" />\n\n        <TextView\n            android:id=\"@+id/argbBValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_column=\"2\"\n            android:layout_columnWeight=\"1\"\n            android:layout_gravity=\"center\"\n            android:layout_row=\"3\"\n            android:text=\"0\"\n            android:textColor=\"@android:color/black\"\n            android:textStyle=\"bold\" />\n    </GridLayout>\n\n    <Button\n        android:id=\"@+id/argbApplyButton\"\n        style=\"@style/Widget.AppCompat.Button.Borderless\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentBottom=\"false\"\n        android:layout_alignParentEnd=\"true\"\n        android:layout_alignParentRight=\"true\"\n        android:layout_below=\"@+id/argbGridLayout\"\n        android:layout_marginRight=\"10dp\"\n        android:text=\"@string/apply\"\n        android:theme=\"@style/FlatButtonControlWhite\" />\n\n    <Button\n        android:id=\"@+id/argbCancelButton\"\n        style=\"@style/Widget.AppCompat.Button.Borderless\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignTop=\"@+id/argbApplyButton\"\n        android:layout_marginEnd=\"20dp\"\n        android:layout_marginRight=\"20dp\"\n        android:layout_toLeftOf=\"@+id/argbApplyButton\"\n        android:layout_toStartOf=\"@+id/argbApplyButton\"\n        android:text=\"@string/cancel\"\n        android:theme=\"@style/FlatButtonControlWhite\" />\n\n</RelativeLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/dialog_color_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"320dp\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"20dp\"\n    android:paddingTop=\"10dp\">\n\n    <TextView\n        android:id=\"@+id/textView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerVertical=\"true\"\n        android:text=\"@string/select_color\"\n        android:textColor=\"@android:color/black\"\n        android:textSize=\"18sp\"\n        android:textStyle=\"bold\" />\n\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"center\"\n        android:orientation=\"horizontal\">\n\n        <Button\n            android:id=\"@+id/rgbButton\"\n            style=\"@style/Widget.AppCompat.Button.Borderless\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerInParent=\"true\"\n            android:text=\"@string/rgb\"\n            android:theme=\"@style/FlatButtonControlWhite\" />\n\n        <Button\n            android:id=\"@+id/argbButton\"\n            style=\"@style/Widget.AppCompat.Button.Borderless\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerInParent=\"true\"\n            android:text=\"@string/argb\"\n            android:theme=\"@style/FlatButtonControlWhite\" />\n    </LinearLayout>\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/colorRecyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"250dp\"\n        android:layout_marginTop=\"10dp\" />\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:gravity=\"end\"\n        android:orientation=\"horizontal\"\n        android:paddingTop=\"10dp\">\n\n        <Button\n            android:id=\"@+id/cancelColor\"\n            style=\"@style/Widget.AppCompat.Button.Borderless\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignTop=\"@+id/rgbApplyButton\"\n            android:layout_toLeftOf=\"@+id/rgbApplyButton\"\n            android:layout_toStartOf=\"@+id/rgbApplyButton\"\n            android:text=\"@string/cancel\"\n            android:theme=\"@style/FlatButtonControlWhite\" />\n\n        <Button\n            android:id=\"@+id/applyColor\"\n            style=\"@style/Widget.AppCompat.Button.Borderless\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"@string/apply\"\n            android:theme=\"@style/FlatButtonControlWhite\" />\n    </LinearLayout>\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/dialog_font_picker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"match_parent\"\n    android:layout_gravity=\"right\"\n    android:orientation=\"horizontal\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/fontsRecyclerView\"\n        android:layout_width=\"250dp\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/dialog_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ProgressBar\n        style=\"?android:attr/progressBarStyleLarge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_adjust.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_adjust\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>\n\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_camera_filters.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/cameraFiltersRecyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_drawing.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:orientation=\"vertical\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_sizes\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\" />\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_colors\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_filters.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_filters\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_fonts.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/fontsRecyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        tools:listitem=\"@layout/item_font\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_frames.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_frames\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_gallery_albums.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/colorBackground\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_albums\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n    <LinearLayout\n        android:id=\"@+id/linear_layout_no_images\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:src=\"@drawable/ic_disappointed_white_150dp\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:paddingTop=\"10dp\"\n            android:text=\"@string/no_photos\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"28sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:paddingBottom=\"10dp\"\n            android:text=\"@string/no_photos_tip\"\n            android:textAlignment=\"center\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <Button\n            android:id=\"@+id/button_take_photo\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"TAKE PHOTO\"\n            android:textColor=\"@android:color/black\"\n            android:theme=\"@style/RaisedButton\" />\n    </LinearLayout>\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_gallery_images.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.v7.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/recycler_view_images\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@color/colorBackground\" />"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_overlay.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_overlays\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_show_stickers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\">\n\n    <!--<ImageView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:scaleType=\"centerCrop\"\n        android:src=\"@drawable/emoji_background\" />-->\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/stickersRecyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_slider_control.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:gravity=\"center\"\n    android:paddingBottom=\"20dp\"\n    android:paddingLeft=\"10dp\"\n    android:paddingRight=\"10dp\"\n    android:paddingTop=\"20dp\">\n\n    <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n        android:id=\"@+id/seek_bar_adjust\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        app:dsb_indicatorColor=\"@android:color/white\"\n        app:dsb_indicatorTextAppearance=\"@android:color/black\"\n        app:dsb_max=\"100\"\n        app:dsb_min=\"-100\"\n        app:dsb_progressColor=\"@android:color/white\"\n        app:dsb_rippleColor=\"@android:color/white\"\n        app:dsb_trackColor=\"@android:color/white\"\n        app:dsb_value=\"0\" />\n\n    <TextView\n        android:id=\"@+id/minValueTextView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@id/seek_bar_adjust\"\n        android:text=\"-100\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"18sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/currentValueTextView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_below=\"@id/seek_bar_adjust\"\n        android:layout_centerInParent=\"true\"\n        android:text=\"0\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"18sp\"\n        android:textStyle=\"bold\" />\n\n    <TextView\n        android:id=\"@+id/maxValueTextView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_alignParentRight=\"true\"\n        android:layout_below=\"@id/seek_bar_adjust\"\n        android:text=\"100\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"18sp\"\n        android:textStyle=\"bold\" />\n</RelativeLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_stickers.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/stickersSetRecyclerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        tools:listitem=\"@layout/item_sticker_set\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_text.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"vertical\">\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"horizontal\"\n            android:paddingLeft=\"10dp\"\n            android:paddingRight=\"10dp\">\n\n            <LinearLayout\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_weight=\"1\"\n                android:orientation=\"vertical\">\n\n                <LinearLayout\n                    android:layout_width=\"match_parent\"\n                    android:layout_height=\"wrap_content\"\n                    android:orientation=\"horizontal\">\n\n                    <ImageView\n                        android:id=\"@+id/selectTextColorButton\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_gravity=\"center\"\n                        android:layout_weight=\"1\"\n                        android:src=\"@drawable/ic_color\" />\n\n                    <ImageView\n                        android:id=\"@+id/selectFontButton\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_gravity=\"center\"\n                        android:layout_weight=\"1\"\n                        android:src=\"@drawable/ic_font\" />\n                </LinearLayout>\n            </LinearLayout>\n        </LinearLayout>\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:orientation=\"horizontal\">\n\n            <EditText\n                android:id=\"@+id/edit_text\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"10dp\"\n                android:layout_weight=\"1\"\n                android:hint=\"@string/start_typing\"\n                android:imeOptions=\"actionDone\"\n                android:textColor=\"@android:color/white\"\n                android:textColorHint=\"@android:color/white\"\n                android:theme=\"@style/MyEditText\" />\n\n            <ImageButton\n                android:id=\"@+id/addTextButton\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:layout_margin=\"10dp\"\n                android:background=\"?attr/selectableItemBackgroundBorderless\"\n                android:src=\"@drawable/ic_add_circle_white_24dp\" />\n        </LinearLayout>\n    </LinearLayout>\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_tilt_shift.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\"\n        android:padding=\"10dp\">\n\n        <Button\n            android:id=\"@+id/button_radial_tilt_shift\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableTop=\"@drawable/ic_blur_radial\"\n            android:text=\"@string/tilt_shift_radial\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\" />\n\n        <Button\n            android:id=\"@+id/button_linear_tilt_shift\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_centerVertical=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableTop=\"@drawable/ic_blur_linear\"\n            android:text=\"@string/tilt_shift_linear\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\" />\n    </RelativeLayout>\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_tools.xml",
    "content": "<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/recycler_view_tools\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_transform.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:elevation=\"8dp\"\n    android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\"\n        android:padding=\"10dp\">\n\n        <Button\n            android:id=\"@+id/transformVerticalButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerVertical=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableTop=\"@drawable/ic_perspective_vertical\"\n            android:text=\"@string/vertical\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\" />\n\n        <Button\n            android:id=\"@+id/transformStraightenButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableTop=\"@drawable/ic_straighten\"\n            android:text=\"@string/transform_straighten\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\" />\n\n        <Button\n            android:id=\"@+id/transformHorizontalButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_centerVertical=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableTop=\"@drawable/ic_perspective_horizontal\"\n            android:text=\"@string/horizontal\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"16sp\"\n            android:textStyle=\"bold\" />\n    </RelativeLayout>\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_transform_horizontal.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@android:color/black\"\n    android:orientation=\"vertical\">\n\n    <View\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/colorLine\" />\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingRight=\"5dp\">\n\n        <Button\n            android:id=\"@+id/transformHorizontalBackButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentLeft=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableLeft=\"@drawable/ic_left\"\n            android:text=\"@string/transform_horizontal\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <ImageButton\n            android:id=\"@+id/transformHorizontalApplyButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:src=\"@drawable/ic_apply_40\" />\n    </RelativeLayout>\n\n    <View\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/colorLine\" />\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"20dp\"\n        android:paddingLeft=\"10dp\"\n        android:paddingRight=\"10dp\"\n        android:paddingTop=\"20dp\">\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/transformHorizontalSeekBar\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            app:dsb_indicatorColor=\"@android:color/white\"\n            app:dsb_indicatorTextAppearance=\"@android:color/black\"\n            app:dsb_max=\"30\"\n            app:dsb_min=\"-30\"\n            app:dsb_progressColor=\"@android:color/white\"\n            app:dsb_rippleColor=\"@android:color/white\"\n            app:dsb_trackColor=\"@android:color/white\"\n            app:dsb_value=\"0\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/transformHorizontalSeekBar\"\n            android:text=\"-30\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:id=\"@+id/transformHorizontalValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/transformHorizontalSeekBar\"\n            android:layout_centerInParent=\"true\"\n            android:text=\"0\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_below=\"@id/transformHorizontalSeekBar\"\n            android:text=\"30\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n    </RelativeLayout>\n</LinearLayout>\n\n\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_transform_straighten.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@android:color/black\"\n    android:orientation=\"vertical\">\n\n    <View\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/colorLine\" />\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingRight=\"5dp\">\n\n        <Button\n            android:id=\"@+id/transformStraightenBackButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentLeft=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableLeft=\"@drawable/ic_left\"\n            android:text=\"@string/transform_vertical\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <ImageButton\n            android:id=\"@+id/transformStraightenApplyButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:src=\"@drawable/ic_apply_40\" />\n    </RelativeLayout>\n\n    <View\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/colorLine\" />\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"20dp\"\n        android:paddingLeft=\"10dp\"\n        android:paddingRight=\"10dp\"\n        android:paddingTop=\"20dp\">\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/transformStraightenSeekBar\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            app:dsb_indicatorColor=\"@android:color/white\"\n            app:dsb_indicatorTextAppearance=\"@android:color/black\"\n            app:dsb_max=\"30\"\n            app:dsb_min=\"-30\"\n            app:dsb_progressColor=\"@android:color/white\"\n            app:dsb_rippleColor=\"@android:color/white\"\n            app:dsb_trackColor=\"@android:color/white\"\n            app:dsb_value=\"0\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/transformStraightenSeekBar\"\n            android:text=\"-30\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:id=\"@+id/transformStraightenValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/transformStraightenSeekBar\"\n            android:layout_centerInParent=\"true\"\n            android:text=\"0\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_below=\"@id/transformStraightenSeekBar\"\n            android:text=\"30\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n    </RelativeLayout>\n</LinearLayout>\n\n\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_transform_vertical.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@android:color/black\"\n    android:orientation=\"vertical\">\n\n    <View\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/colorLine\" />\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingRight=\"5dp\">\n\n        <Button\n            android:id=\"@+id/transformVerticalBackButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentLeft=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:drawableLeft=\"@drawable/ic_left\"\n            android:text=\"@string/transform_vertical\"\n            android:textAllCaps=\"false\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <ImageButton\n            android:id=\"@+id/transformVerticalApplyButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_centerInParent=\"true\"\n            android:background=\"?attr/selectableItemBackgroundBorderless\"\n            android:src=\"@drawable/ic_apply_40\" />\n    </RelativeLayout>\n\n    <View\n        android:layout_width=\"fill_parent\"\n        android:layout_height=\"1dp\"\n        android:background=\"@color/colorLine\" />\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:paddingBottom=\"20dp\"\n        android:paddingLeft=\"10dp\"\n        android:paddingRight=\"10dp\"\n        android:paddingTop=\"20dp\">\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/transformVerticalSeekBar\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            app:dsb_indicatorColor=\"@android:color/white\"\n            app:dsb_indicatorTextAppearance=\"@android:color/black\"\n            app:dsb_max=\"30\"\n            app:dsb_min=\"-30\"\n            app:dsb_progressColor=\"@android:color/white\"\n            app:dsb_rippleColor=\"@android:color/white\"\n            app:dsb_trackColor=\"@android:color/white\"\n            app:dsb_value=\"0\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/transformVerticalSeekBar\"\n            android:text=\"-30\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:id=\"@+id/transformVerticalValueTextView\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_below=\"@id/transformVerticalSeekBar\"\n            android:layout_centerInParent=\"true\"\n            android:text=\"0\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_alignParentRight=\"true\"\n            android:layout_below=\"@id/transformVerticalSeekBar\"\n            android:text=\"30\"\n            android:textColor=\"@color/white\"\n            android:textSize=\"18sp\"\n            android:textStyle=\"bold\" />\n    </RelativeLayout>\n</LinearLayout>\n\n\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/fragment_transparency.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/tool_height\"\n    android:layout_gravity=\"bottom\"\n    android:background=\"@color/colorPrimary\"\n    android:orientation=\"vertical\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"6dp\"\n        android:orientation=\"horizontal\"\n        android:paddingLeft=\"10dp\"\n        android:paddingRight=\"10dp\"\n        android:paddingTop=\"10dp\">\n\n        <ImageButton\n            android:id=\"@+id/transparencyCancelButton\"\n            style=\"@style/AppTheme.Button.Borderless\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_weight=\"1\"\n            android:src=\"@drawable/ic_cancel_40\" />\n\n        <LinearLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_weight=\"1\"\n            android:orientation=\"vertical\">\n\n            <TextView\n                android:id=\"@+id/transparencyCurrentValueTextView\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:text=\"100%\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"18sp\"\n                android:textStyle=\"bold\" />\n\n            <TextView\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"top\"\n                android:layout_weight=\"2\"\n                android:gravity=\"center\"\n                android:text=\"@string/transparency\"\n                android:textColor=\"@color/white\"\n                android:textSize=\"16sp\"\n                android:textStyle=\"bold\" />\n        </LinearLayout>\n\n        <ImageButton\n            android:id=\"@+id/transparencyApplyButton\"\n            style=\"@style/AppTheme.Button.Borderless\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"top\"\n            android:layout_weight=\"1\"\n            android:src=\"@drawable/ic_apply_40\" />\n    </LinearLayout>\n\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\"\n        android:gravity=\"center\"\n        android:paddingLeft=\"10dp\"\n        android:paddingRight=\"10dp\">\n\n        <org.adw.library.widgets.discreteseekbar.DiscreteSeekBar\n            android:id=\"@+id/transparencySeekBar\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            app:dsb_indicatorColor=\"@android:color/white\"\n            app:dsb_indicatorTextAppearance=\"@android:color/black\"\n            app:dsb_max=\"100\"\n            app:dsb_min=\"20\"\n            app:dsb_progressColor=\"@android:color/white\"\n            app:dsb_rippleColor=\"@android:color/white\"\n            app:dsb_trackColor=\"@android:color/white\"\n            app:dsb_value=\"100\" />\n    </FrameLayout>\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_adjust.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/adjustItem\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\"\n    android:padding=\"10dp\">\n    \n    <Button\n        android:id=\"@+id/button_adjust\"\n        android:layout_width=\"70dp\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"?attr/selectableItemBackgroundBorderless\"\n        android:drawableTop=\"@drawable/ic_saturation\"\n        android:text=\"@string/warmth\"\n        android:textAllCaps=\"false\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"14sp\"\n        android:textStyle=\"bold\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_brush_size.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:padding=\"5dp\">\n\n    <ImageView\n        android:id=\"@+id/sizeImageView\"\n        android:layout_width=\"40dp\"\n        android:layout_height=\"40dp\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_color.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:padding=\"5dp\">\n\n    <ImageView\n        android:id=\"@+id/image_view_color\"\n        android:layout_width=\"40dp\"\n        android:layout_height=\"40dp\" />\n</FrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_filter.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"5dp\"\n    android:paddingRight=\"5dp\"\n    android:paddingTop=\"5dp\">\n\n    <FrameLayout\n        android:layout_width=\"75dp\"\n        android:layout_height=\"75dp\"\n        android:layout_gravity=\"center\">\n\n        <ImageView\n            android:id=\"@+id/image_view_filter\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\" />\n\n        <ImageView\n            android:id=\"@+id/image_view_filter_checked\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:src=\"@drawable/ic_intensity\"\n            android:visibility=\"gone\" />\n    </FrameLayout>\n\n    <TextView\n        android:id=\"@+id/text_view_filter_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\"\n        android:gravity=\"center\"\n        android:paddingBottom=\"2.5dp\"\n        android:textColor=\"@android:color/white\"\n        android:textSize=\"14sp\"\n        android:textStyle=\"bold\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_font.xml",
    "content": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:padding=\"1dp\">\n\n    <TextView\n        android:id=\"@+id/fontPreviewTextView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"@string/preview_text\"\n        android:textAlignment=\"center\"\n        android:textColor=\"@android:color/white\"\n        android:textSize=\"18sp\" />\n\n    <TextView\n        android:id=\"@+id/fontFamilyTextView\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Font title\"\n        android:textAlignment=\"center\"\n        android:textSize=\"12sp\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_frame.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"5dp\"\n    android:paddingRight=\"5dp\"\n    android:paddingTop=\"5dp\">\n\n    <FrameLayout\n        android:layout_width=\"75dp\"\n        android:layout_height=\"75dp\"\n        android:layout_gravity=\"center\"\n        android:padding=\"2.5dp\">\n\n        <ImageView\n            android:id=\"@+id/frameImage\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:background=\"@color/white\" />\n\n        <ImageView\n            android:id=\"@+id/frameChecked\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:src=\"@drawable/ic_check\"\n            android:visibility=\"gone\" />\n    </FrameLayout>\n\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <TextView\n            android:id=\"@+id/frameTitle\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:layout_marginBottom=\"2.5dp\"\n            android:gravity=\"center\"\n            android:text=\"Title\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"14sp\"\n            android:textStyle=\"bold\" />\n    </FrameLayout>\n\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_image.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<net.iquesoft.iquephoto.graphics.SquareFrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"\n    android:padding=\"1dp\">\n\n    <ImageView\n        android:id=\"@+id/image_view_gallery_image\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:scaleType=\"centerCrop\" />\n\n    <ProgressBar\n        android:id=\"@+id/progress_bar_gallery_image\"\n        style=\"?android:attr/progressBarStyleLarge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</net.iquesoft.iquephoto.graphics.SquareFrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_image_album.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<net.iquesoft.iquephoto.graphics.SquareFrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:foregroundGravity=\"center\"\n    android:padding=\"1dp\">\n\n    <ImageView\n        android:id=\"@+id/image_view_album_image\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:scaleType=\"centerCrop\" />\n\n    <TextView\n        android:id=\"@+id/text_view_album_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom\"\n        android:background=\"@color/transparency\"\n        android:padding=\"5dp\"\n        android:text=\"Gallery (102)\"\n        android:textAlignment=\"center\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"14sp\"\n        android:textStyle=\"bold\" />\n\n    <ProgressBar\n        android:id=\"@+id/progress_bar_gallery_album\"\n        style=\"?android:attr/progressBarStyleLarge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center\" />\n</net.iquesoft.iquephoto.graphics.SquareFrameLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_overlay.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:paddingLeft=\"5dp\"\n    android:paddingRight=\"5dp\"\n    android:paddingTop=\"5dp\">\n\n    <FrameLayout\n        android:layout_width=\"75dp\"\n        android:layout_height=\"75dp\"\n        android:layout_gravity=\"center\"\n        android:padding=\"2.5dp\">\n\n        <ImageView\n            android:id=\"@+id/image_view_overlay\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:scaleType=\"centerCrop\" />\n\n        <ImageView\n            android:id=\"@+id/image_view_overlay_checked\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:src=\"@drawable/ic_check\"\n            android:visibility=\"gone\" />\n    </FrameLayout>\n\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <TextView\n            android:id=\"@+id/text_view_overlay_title\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:layout_marginBottom=\"2.5dp\"\n            android:gravity=\"center\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"14sp\"\n            android:textStyle=\"bold\" />\n    </FrameLayout>\n\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_sticker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ImageView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/image_view_sticker\"\n    android:layout_width=\"75dp\"\n    android:layout_height=\"75dp\"\n    android:padding=\"5dp\" />"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_sticker_set.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"85dp\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"\n    android:padding=\"5dp\">\n\n    <ImageView\n        android:id=\"@+id/image_view_stickers_sets_image\"\n        android:layout_width=\"75dp\"\n        android:layout_height=\"75dp\"\n        android:layout_gravity=\"center_horizontal\" />\n\n    <TextView\n        android:id=\"@+id/text_view_stickers_sets_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textAlignment=\"center\"\n        android:textColor=\"@color/white\"\n        android:textSize=\"14sp\"\n        android:textStyle=\"bold\" />\n</LinearLayout>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/layout/item_tool.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Button xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/button_tool\"\n    style=\"@style/Base.Widget.AppCompat.Button.Borderless\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"100dp\"\n    android:drawableTop=\"@drawable/ic_brightness\"\n    android:gravity=\"center\"\n    android:text=\"@string/tool_brightness\"\n    android:textAllCaps=\"false\"\n    android:textColor=\"@color/white\"\n    android:textSize=\"14sp\"\n    android:textStyle=\"bold\" />\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/menu/menu_crop.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <item\n        android:id=\"@+id/action_crop\"\n        android:icon=\"@drawable/ic_check\"\n        android:title=\"@string/crop\"\n        app:showAsAction=\"ifRoom\" />\n</menu>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/menu/menu_editor.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <item\n        android:id=\"@+id/action_share\"\n        android:icon=\"@drawable/ic_share\"\n        android:title=\"@string/send_and_share\"\n        android:actionViewClass=\"android.widget.ImageView\"\n        app:showAsAction=\"ifRoom\" />\n</menu>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/menu/menu_share.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:id=\"@+id/action_save\"\n        android:icon=\"@drawable/ic_save\"\n        android:title=\"@string/save\" />\n    <item\n        android:id=\"@+id/action_instagram\"\n        android:icon=\"@drawable/instagram_logo\"\n        android:title=\"@string/instagram\" />\n    <item\n        android:id=\"@+id/action_facebook\"\n        android:icon=\"@drawable/facebook_logo\"\n        android:title=\"@string/facebook\" />\n    <item\n        android:id=\"@+id/action_more\"\n        android:icon=\"@drawable/ic_more\"\n        android:title=\"@string/more\" />\n</menu>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/menu/menu_tool.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n    <item\n        android:id=\"@+id/action_apply\"\n        android:icon=\"@drawable/ic_check\"\n        android:title=\"@string/apply\"\n        app:showAsAction=\"ifRoom\" />\n</menu>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <declare-styleable name=\"ZoomHeaderViewPager\">\n        <attr name=\"textSize\" format=\"dimension\" type=\"integer\" />\n        <attr name=\"textColor\" format=\"color\" type=\"integer\" />\n        <attr name=\"hvTextColorActiveTab\" format=\"color\" type=\"integer\" />\n        <attr name=\"hvTextAlpha\" format=\"float\" type=\"integer\" />\n        <attr name=\"hvTextAlphaActiveTab\" format=\"float\" type=\"integer\" />\n        <attr name=\"hvTextScale\" format=\"float\" type=\"integer\" />\n        <attr name=\"hvTextScaleActiveTab\" format=\"float\" type=\"integer\" />\n        <attr name=\"hvPadding\" format=\"dimension\" type=\"integer\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"GiantSquareView\">\n        <!-- Number of columns active items -->\n        <attr name=\"numColumns\" format=\"integer\" />\n        <!-- Number of rows active items -->\n        <attr name=\"numRows\" format=\"integer\" />\n        <!-- Padding between columns -->\n        <attr name=\"columnStreakSize\" format=\"dimension\" />\n        <!-- Padding between columns -->\n        <attr name=\"rowStreakSize\" format=\"dimension\" />\n        <!--Padding between columns and row -->\n        <attr name=\"streakSize\" format=\"dimension\" />\n        <!--Padding between columns and row -->\n        <attr name=\"fitType\" format=\"enum\">\n            <enum name=\"fit\" value=\"0\" />\n            <enum name=\"center\" value=\"1\" />\n        </attr>\n        <attr name=\"textBackgroundColor\" format=\"color\" />\n        <attr name=\"textPadding\" format=\"dimension\" />\n        <attr name=\"textAlign\" format=\"enum\">\n            <enum name=\"rightBottom\" value=\"0\" />\n            <enum name=\"rightTop\" value=\"1\" />\n            <enum name=\"leftTop\" value=\"2\" />\n            <enum name=\"leftBottom\" value=\"3\" />\n            <enum name=\"center\" value=\"4\" />\n        </attr>\n        <attr name=\"isShowImageNumbers\" format=\"boolean\" />\n        <attr name=\"selectUncheckedDrawable\" format=\"reference\" />\n        <attr name=\"selectCheckedDrawable\" format=\"reference\" />\n        <attr name=\"editUncheckedDrawable\" format=\"reference\" />\n        <attr name=\"editCheckedDrawable\" format=\"reference\" />\n        <attr name=\"deleteUncheckedDrawable\" format=\"reference\" />\n        <attr name=\"deleteCheckedDrawable\" format=\"reference\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"GiantSquareEditorView\">\n        <attr name=\"defaultTextColor\" format=\"color\" />\n        <attr name=\"emptyColor\" format=\"color\" />\n        <attr name=\"emptyBackground\" format=\"reference\" />\n        <attr name=\"emptyText\" format=\"string\" />\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <color name=\"colorPrimary\">#3F3E3B</color>\n    <color name=\"colorPrimaryDark\">#3A3936</color>\n    <color name=\"colorBackground\">#504F4C</color>\n    <color name=\"colorAccent\">#FF4081</color>\n\n    <color name=\"colorLine\">#4f4f4f</color>\n\n    <color name=\"green_yellow\">#ADFF2F</color>\n    <color name=\"spring_green\">#00FF7F</color>\n    <color name=\"green\">#00FF00</color>\n    <color name=\"olive_drab\">#6B8E23</color>\n    <color name=\"sky_blue\">#87CEFF</color>\n    <color name=\"aqua\">#00FFFF</color>\n    <color name=\"cyan\">#008B8B</color>\n    <color name=\"blue\">#004DFF</color>\n    <color name=\"white\">#ffffff</color>\n    <color name=\"red\">#FF0000</color>\n    <color name=\"brown\">#FF4040</color>\n    <color name=\"crimson\">#DC143C</color>\n    <color name=\"indian_red\">#B0171F</color>\n    <color name=\"lime\">#00FF00</color>\n    <color name=\"khaki\">#FFF68F</color>\n    <color name=\"yellow\">#FFFF00</color>\n    <color name=\"gold\">#FFD700</color>\n    <color name=\"orange\">#FFA500</color>\n    <color name=\"magenta\">#FF00FF</color>\n    <color name=\"purple\">#9B30FF</color>\n    <color name=\"dark_violet\">#9400D3</color>\n    <color name=\"indigo\">#4B0082</color>\n\n    <color name=\"transparency\">#82000000</color>\n\n    <color name=\"black\">#000000</color>\n</resources>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"appbar_padding_top\">8dp</dimen>\n\n    <dimen name=\"text_size_m\">20sp</dimen>\n    <dimen name=\"text_size_s\">16sp</dimen>\n    <dimen name=\"button_height\">48dp</dimen>\n    <dimen name=\"tool_height\">115dp</dimen>\n</resources>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">iQuePhoto</string>\n\n    <!-- START - Start screen. -->\n    <string name=\"camera\">Camera</string>\n    <string name=\"gallery\">Gallery</string>\n    <string name=\"error\">Image wasn\\'t selected!</string>\n    <!-- Start screen - END. -->\n\n    <!-- START - Share screen. -->\n    <string name=\"send_and_share\">Send&amp;Share</string>\n    <string name=\"save\">Save</string>\n    <string name=\"instagram\">Instagram</string>\n    <string name=\"facebook\">Facebook</string>\n    <string name=\"more\">More</string>\n    <!-- Share screen - END. -->\n\n    <!-- START - Share screen -->\n    <string name=\"application_does_not_exist\">Application does not exist</string>\n    <string name=\"instagram_alert\">For share you need to have Instagram installed.</string>\n    <string name=\"facebook_alert\">For share you need to have Facebook installed.</string>\n    <string name=\"install\">Install</string>\n    <string name=\"dismiss\">Dismiss</string>\n    <string name=\"share_more\">Share image with:</string>\n\n\n    <string name=\"select_color\">Select a color</string>\n    <string name=\"color\">Color</string>\n\n    <string name=\"tool_brightness\">Brightness</string>\n\n    <string name=\"opacity\">Opacity</string>\n\n    <string name=\"save_image\">Save Image</string>\n    <string name=\"successfully_saved\">Image successfully saved!</string>\n\n    <string name=\"intensity\">Intensity</string>\n\n    <!-- START - Crop. -->\n    <string name=\"crop\">Crop</string>\n    <string name=\"crop_free\">Free</string>\n    <string name=\"crop_original\">Original</string>\n    <string name=\"crop_square\">Square</string>\n    <string name=\"crop_1_1\">1 : 1</string>\n    <string name=\"crop_3_4\">3:4</string>\n    <string name=\"crop_4_3\">4:3</string>\n    <string name=\"crop_6_3\">6 : 4</string>\n    <string name=\"crop_7_5\">7:5</string>\n    <string name=\"crop_9_16\">9:16</string>\n    <string name=\"crop_16_9\">16:9</string>\n    <!-- Crop - END. -->\n\n    <!-- START - Stickers. -->\n    <string name=\"stickers\">Stickers</string>\n    <string name=\"flags\">Flags</string>\n    <string name=\"emoji\">Emoji</string>\n    <string name=\"christmas\">Christmas</string>\n    <string name=\"valentines_day\">Valentines Day</string>\n    <!-- Stickers - END. -->\n\n    <!-- START - Orientation tool. -->\n    <string name=\"orientation\">Orientation</string>\n    <string name=\"rotate\">Rotate</string>\n    <string name=\"flip\">Flip</string>\n    <string name=\"angle\">Angle</string>\n    <!-- Orientation tool - END. -->\n\n    <!-- START - Text tool. -->\n    <string name=\"text\">Text</string>\n    <string name=\"text_style\">Style</string>\n    <string name=\"text_action\">Action</string>\n    <string name=\"text_preview\">Text preview</string>\n    <string name=\"text_added\">Text added!</string>\n    <string name=\"text_is_empty\">Text field is empty, please type text before add it!</string>\n    <string name=\"text_delete_enabled\">Removing text is enabled!</string>\n    <string name=\"text_delete_disabled\">Removing text is disabled!</string>\n    <string name=\"text_deleted\">Text \\\"%1$s\\\" deleted!</string>\n    <!-- Text tool - END. -->\n\n    <!-- START - For filters -->\n    <string name=\"filters\">Filters</string>\n    <!-- For filters - END -->\n\n    <!-- START - Draw tool. -->\n    <string name=\"drawing\">Drawing</string>\n\n    <string name=\"size\">Size</string>\n    <!-- Draw tool - END -->\n\n    <!-- For frame tool. -->\n    <string name=\"frames\">Frames</string>\n\n    <!-- For color picker. -->\n    <string name=\"rgb\">RGB</string>\n    <string name=\"argb\">ARGB</string>\n    <string name=\"cancel\">Cancel</string>\n    <string name=\"apply\">Apply</string>\n    <string name=\"RGB_R\">R</string>\n    <string name=\"RGB_G\">G</string>\n    <string name=\"RGB_B\">B</string>\n\n    <!-- START - For alerts. -->\n    <string name=\"permission_denied\">Permission denied</string>\n    <string name=\"go_to_app_settings\">Go to app settings</string>\n     <string name=\"camera_permission\">To get started you need to allow the application\n        use your camera to take photo. If you selected \\\"never ask again\\\" permission you can go to application settings and turn on \\\"Camera\\\" permission.</string>\n    <string name=\"read_storage_permission\">To get started you need to allow the application\n        use your images. If you selected \\\"never ask again\\\" permission you can go to application settings and turn on \\\"Storage\\\" permission.</string>\n    <string name=\"on_back_alert\">All your current edits will be lost and you will return to start screen!</string>\n    <string name=\"ok\">OK</string>\n    <string name=\"add_text\">ADD</string>\n    <string name=\"yes\">Yes</string>\n    <string name=\"no\">No</string>\n    <string name=\"text_delete_alert\">Do you want to delete it?</string>\n    <string name=\"no_photos\">You have no photos</string>\n    <string name=\"no_photos_tip\">Take one with your camera to get started.</string>\n    <!-- For alerts. - END -->\n\n    <!-- START - Font picker dialog. -->\n    <string name=\"font\">Font</string>\n    <string name=\"start_typing\">Start typing…</string>\n    <string name=\"select_font\">Select a font</string>\n    <string name=\"preview_text\">Abc</string>\n    <string-array name=\"formats_array\">\n        <item>Normal</item>\n        <item>Bold</item>\n        <item>Italic</item>\n        <item>Underlined</item>\n    </string-array>\n    <!-- Font picker dialog - END. -->\n\n    <!-- START - ADJUST. -->\n    <string name=\"brightness\">Brightness</string>\n    <string name=\"contrast\">Contrast</string>\n    <string name=\"vignette\">Vignette</string>\n    <string name=\"adjust\">Adjust</string>\n    <string name=\"warmth\">Warmth</string>\n    <string name=\"saturation\">Saturation</string>\n    <string name=\"exposure\">Exposure</string>\n    <string name=\"fade\">Fade</string>\n    <string name=\"tint\">Tint</string>\n    <string name=\"vibrance\">Vibrance</string>\n    <string name=\"shadows\">Shadows</string>\n    <string name=\"highlights\">Highlights</string>\n    <!-- ADJUST - END. -->\n\n    <string name=\"preview\">Preview</string>\n\n    <!-- START - Overlay -->\n    <string name=\"overlay\">Overlay</string>\n\n    <string name=\"tilt_shift\">Tilt Shift</string>\n    <string name=\"tilt_shift_radial\">Radial</string>\n    <string name=\"tilt_shift_linear\">Linear</string>\n\n    <string name=\"image_saved\">Image saved!</string>\n\n    <string name=\"tools\">Tools</string>\n\n    <!-- START - Transform -->\n    <string name=\"transform\">Transform</string>\n    <string name=\"transform_straighten\">Straighten</string>\n    <string name=\"vertical\">Vertical</string>\n    <string name=\"horizontal\">Horizontal</string>\n    <string name=\"transform_horizontal\">Transform Horizontal</string>\n    <string name=\"transform_vertical\">Transform Vertical</string>\n    <!-- Transform - END. -->\n\n    <!-- START - Progress dialog message -->\n    <string name=\"processing\">Processing…</string>\n    <string name=\"saving\">Saving…</string>\n    <string name=\"prepare_frame\">Prepare frame…</string>\n    <string name=\"prepare_overlay\">Prepare overlay…</string>\n    <string name=\"brush_size\">Brush Size</string>\n    <!-- Progress dialog message - END. -->\n\n    <string name=\"transparency\">Transparency</string>\n</resources>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n\n    <style name=\"AppTheme.NoActionBar\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n    </style>\n\n    <style name=\"FlatButton\" parent=\"Theme.AppCompat.Light\">\n        <item name=\"colorControlHighlight\">@color/red</item>\n    </style>\n\n    <style name=\"FlatButtonControlWhite\" parent=\"Theme.AppCompat.Light\">\n        <item name=\"colorControlHighlight\">@color/white</item>\n    </style>\n\n    <style name=\"RaisedButton\" parent=\"Theme.AppCompat.Light\">\n        <item name=\"colorControlHighlight\">@color/white</item>\n        <item name=\"colorButtonNormal\">@color/white</item>\n    </style>\n\n    <style name=\"AlertDialog\" parent=\"Theme.AppCompat.Light.Dialog.Alert\">\n        <!-- Used for the buttons -->\n        <item name=\"colorAccent\">#FFFFFF</item>\n        <!-- Used for the title and text -->\n        <item name=\"android:textColorPrimary\">#FFFFFF</item>\n        <!-- Used for the background -->\n        <item name=\"android:background\">@color/red</item>\n        <item name=\"android:textStyle\">bold</item>\n    </style>\n\n    <style name=\"MyCheckBox\" parent=\"Theme.AppCompat.Light\">\n        <item name=\"colorControlNormal\">@android:color/black</item>\n        <item name=\"colorControlActivated\">@android:color/black</item>\n    </style>\n\n    <style name=\"AppTheme.NoActionBar.AppBarOverlay\" parent=\"ThemeOverlay.AppCompat.Dark.ActionBar\" />\n\n    <style name=\"AppTheme.NoActionBar.PopupOverlay\" parent=\"ThemeOverlay.AppCompat.Light\" />\n\n    <style name=\"MyEditText\" parent=\"Theme.AppCompat.Light\">\n        <item name=\"colorControlNormal\">@color/white</item>\n        <item name=\"colorControlActivated\">@color/white</item>\n    </style>\n\n    <style name=\"AppTheme.Button.Borderless\" parent=\"Widget.AppCompat.Button.Borderless\">\n        <item name=\"android:background\">?attr/selectableItemBackgroundBorderless</item>\n        <item name=\"android:textColor\">@color/white</item>\n        <item name=\"android:minHeight\">@dimen/button_height</item>\n        <item name=\"android:textSize\">@dimen/text_size_s</item>\n        <item name=\"android:gravity\">center_vertical|center_horizontal</item>\n    </style>\n\n    <style name=\"TabLayout\" parent=\"Widget.Design.TabLayout\">\n        <item name=\"tabTextAppearance\">@style/TabLayoutTextAppearance</item>\n    </style>\n\n    <style name=\"TabLayoutTextAppearance\" parent=\"TextAppearance.Design.Tab\">\n        <item name=\"android:textAllCaps\">true</item>\n        <item name=\"android:textStyle\">bold</item>\n        <item name=\"android:textSize\">16sp</item>\n    </style>\n\n    <style name=\"CircularProgress\" parent=\"@android:style/Widget.Material.Light.ProgressBar.Large\">\n        <item name=\"colorAccent\">@color/white</item>\n    </style>\n</resources>"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values-v21/styles.xml",
    "content": "<resources>\n</resources>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "iQuePhoto/app/src/main/res/xml/provider_paths.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths>\n    <external-path\n        name=\"external_files\"\n        path=\".\" />\n    <cache-path\n        name=\"cache_files\"\n        path=\".\" />\n</paths>"
  },
  {
    "path": "iQuePhoto/app/src/test/java/net/iquesoft/iquephoto/ExampleUnitTest.java",
    "content": "package net.iquesoft.iquephoto;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * To work on unit tests, switch the Test Artifact in the Build Variants view.\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() throws Exception {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "iQuePhoto/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:2.2.3'\n        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'\n        classpath 'me.tatarka:gradle-retrolambda:3.2.5'\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "iQuePhoto/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Tue Aug 16 10:49:17 EEST 2016\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.14.1-all.zip\n"
  },
  {
    "path": "iQuePhoto/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true"
  },
  {
    "path": "iQuePhoto/gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "iQuePhoto/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "iQuePhoto/settings.gradle",
    "content": "include ':app'\n"
  }
]