├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── bowyer │ │ └── app │ │ └── storepreview │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── bowyer │ │ │ └── app │ │ │ └── storepreview │ │ │ ├── preference │ │ │ ├── DataPreference.java │ │ │ └── PreferenceHelper.java │ │ │ └── ui │ │ │ ├── InputActivity.java │ │ │ ├── LaunchActivity.java │ │ │ └── PreviewActivity.java │ └── res │ │ ├── drawable-hdpi │ │ ├── ic_close.png │ │ ├── ic_code.png │ │ └── ic_save.png │ │ ├── drawable-mdpi │ │ ├── ic_close.png │ │ ├── ic_code.png │ │ └── ic_save.png │ │ ├── drawable-v21 │ │ └── app_transparent_dark.xml │ │ ├── drawable-xhdpi │ │ ├── ic_close.png │ │ ├── ic_code.png │ │ └── ic_save.png │ │ ├── drawable-xxhdpi │ │ ├── ic_close.png │ │ ├── ic_code.png │ │ └── ic_save.png │ │ ├── drawable-xxxhdpi │ │ ├── ic_close.png │ │ ├── ic_code.png │ │ └── ic_save.png │ │ ├── drawable │ │ └── app_transparent_dark.xml │ │ ├── layout-land │ │ └── activity_preview.xml │ │ ├── layout-sw600dp │ │ └── activity_preview.xml │ │ ├── layout │ │ ├── activity_input.xml │ │ ├── activity_preview.xml │ │ └── include_tag.xml │ │ ├── menu │ │ ├── menu_input.xml │ │ └── menu_preview.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-ja │ │ └── strings.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── bowyer │ └── app │ └── storepreview │ └── ExampleUnitTest.java ├── art ├── en │ ├── demo.gif │ └── screenshot-en.png └── ja │ └── device-2016-08-13-005242.png ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | ### Android template 3 | # Built application files 4 | *.apk 5 | *.ap_ 6 | 7 | # Files for the Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | 17 | # Gradle files 18 | .gradle/ 19 | build/ 20 | /*/build/ 21 | 22 | # report 23 | reports/ 24 | 25 | # Local configuration file (sdk path, etc) 26 | local.properties 27 | 28 | # Proguard folder generated by Eclipse 29 | proguard/ 30 | 31 | # Log Files 32 | *.log 33 | 34 | 35 | ### JetBrains template 36 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion 37 | 38 | *.iml 39 | 40 | ## Directory-based project format: 41 | .idea/ 42 | # if you remove the above rule, at least ignore the following: 43 | 44 | # User-specific stuff: 45 | # .idea/workspace.xml 46 | # .idea/tasks.xml 47 | # .idea/dictionaries 48 | 49 | # Sensitive or high-churn files: 50 | # .idea/dataSources.ids 51 | # .idea/dataSources.xml 52 | # .idea/sqlDataSources.xml 53 | # .idea/dynamic.xml 54 | # .idea/uiDesigner.xml 55 | 56 | # Gradle: 57 | # .idea/gradle.xml 58 | # .idea/libraries 59 | 60 | # Mongo Explorer plugin: 61 | # .idea/mongoSettings.xml 62 | 63 | ## File-based project format: 64 | *.ipr 65 | *.iws 66 | 67 | ## Plugin-specific files: 68 | 69 | # IntelliJ 70 | /out/ 71 | 72 | # mpeltonen/sbt-idea plugin 73 | .idea_modules/ 74 | 75 | # JIRA plugin 76 | atlassian-ide-plugin.xml 77 | 78 | # Crashlytics plugin (for Android Studio and IntelliJ) 79 | com_crashlytics_export_strings.xml 80 | crashlytics.properties 81 | crashlytics-build.properties 82 | 83 | 84 | ### OSX template 85 | .DS_Store 86 | .AppleDouble 87 | .LSOverride 88 | 89 | # Icon must end with two \r 90 | Icon 91 | 92 | # Thumbnails 93 | ._* 94 | 95 | # Files that might appear in the root of a volume 96 | .DocumentRevisions-V100 97 | .fseventsd 98 | .Spotlight-V100 99 | .TemporaryItems 100 | .Trashes 101 | .VolumeIcon.icns 102 | 103 | # Directories potentially created on remote AFP share 104 | .AppleDB 105 | .AppleDesktop 106 | Network Trash Folder 107 | Temporary Items 108 | .apdisk 109 | 110 | 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # StorePreview 2 | 3 | This app helps your apps ASO(App Store Optimization) operation. 4 | 5 | Google play store description can use html tags. 6 | 7 | but the tag is different as usually html tags. 8 | 9 | support you input store html tags, and preview input your tags. 10 | 11 | StorePreview 12 | 13 | # Supported tags 14 | - `font` : change font color 15 | - `
` : new line 16 | - `b` : __bold__ 17 | - `i` : _italic_ 18 | - `u` : underline 19 | - `a` : [anchor](anchor) 20 | - `

h1

` : h1 21 | - `

h2

` : h2 22 | - `

h3

` : h3 23 | - `

h4

` : h4 24 | 25 | # Try out the application on the Play Store. 26 | 27 | Get it on Google Play 28 | 29 | 30 | # LICENSE 31 | ``` 32 | Copyright (C) 2016 bowyer-app. 33 | 34 | MIT License 35 | 36 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files 37 | (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, 38 | publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 39 | subject to the following conditions: 40 | 41 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 44 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 45 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 46 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 47 | ``` 48 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | maven { url 'https://maven.fabric.io/public' } 4 | } 5 | 6 | dependencies { 7 | classpath 'io.fabric.tools:gradle:1.+' 8 | } 9 | } 10 | apply plugin: 'com.android.application' 11 | apply plugin: 'io.fabric' 12 | 13 | repositories { 14 | maven { url 'https://maven.fabric.io/public' } 15 | maven { url 'https://jitpack.io' } 16 | } 17 | 18 | 19 | android { 20 | compileSdkVersion 23 21 | buildToolsVersion "24.0.0" 22 | 23 | defaultConfig { 24 | applicationId "com.bowyer.app.storepreview" 25 | minSdkVersion 16 26 | targetSdkVersion 23 27 | versionCode 1 28 | versionName "1.0" 29 | } 30 | 31 | lintOptions { 32 | checkReleaseBuilds false; 33 | } 34 | 35 | buildTypes { 36 | release { 37 | minifyEnabled false 38 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 39 | } 40 | } 41 | } 42 | 43 | dependencies { 44 | compile fileTree(dir: 'libs', include: ['*.jar']) 45 | testCompile 'junit:junit:4.12' 46 | compile 'com.android.support:appcompat-v7:23.4.0' 47 | compile 'com.android.support:design:23.4.0' 48 | //Injection 49 | compile 'com.jakewharton:butterknife:7.0.1' 50 | compile('com.crashlytics.sdk.android:crashlytics:2.6.2@aar') { 51 | transitive = true; 52 | } 53 | //UI 54 | compile 'com.bowyer.app:fabtransitionlayout:0.4.0@aar' 55 | compile 'com.github.ksoichiro:android-observablescrollview:1.5.0' 56 | compile 'com.github.ozodrukh:CircularReveal:2.0.1' 57 | // Color 58 | compile 'petrov.kristiyan.colorpicker:colorpicker-library:1.1.0' 59 | } 60 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/a13089/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/bowyer/app/storepreview/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/bowyer/app/storepreview/preference/DataPreference.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview.preference; 2 | 3 | import android.content.Context; 4 | 5 | public class DataPreference extends PreferenceHelper { 6 | private static final String DATA_PREFERENCES = "data_preferences"; 7 | private static final String KEY_SHORT_TEXT = "key_short_text"; 8 | private static final String KEY_DESCRIPTION_TEXT = "key_description_text"; 9 | 10 | public DataPreference(Context context) { 11 | super(context, DATA_PREFERENCES, Context.MODE_PRIVATE); 12 | } 13 | 14 | public String getShortText() { 15 | return getString(KEY_SHORT_TEXT, ""); 16 | } 17 | 18 | public void saveShortText(String shortText) { 19 | putString(KEY_SHORT_TEXT, shortText); 20 | } 21 | 22 | public String getDescriptionText() { 23 | return getString(KEY_DESCRIPTION_TEXT, ""); 24 | } 25 | 26 | public void saveSescriptionText(String descriptionText) { 27 | putString(KEY_DESCRIPTION_TEXT, descriptionText); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/bowyer/app/storepreview/preference/PreferenceHelper.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview.preference; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | 6 | public class PreferenceHelper { 7 | private final SharedPreferences mSharedPreferences; 8 | 9 | public PreferenceHelper(Context context, String name, int mode) { 10 | mSharedPreferences = context.getSharedPreferences(name, mode); 11 | } 12 | 13 | protected final boolean getBoolean(String key, boolean defVal) { 14 | return mSharedPreferences.getBoolean(key, defVal); 15 | } 16 | 17 | protected void putBoolean(String key, boolean val) { 18 | mSharedPreferences.edit().putBoolean(key, val).apply(); 19 | } 20 | 21 | protected String getString(String key, String defVal) { 22 | return mSharedPreferences.getString(key, defVal); 23 | } 24 | 25 | protected void putString(String key, String val) { 26 | mSharedPreferences.edit().putString(key, val).apply(); 27 | } 28 | 29 | protected int getInt(String key, int defVal) { 30 | return mSharedPreferences.getInt(key, defVal); 31 | } 32 | 33 | protected void putInt(String key, int val) { 34 | mSharedPreferences.edit().putInt(key, val).apply(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/bowyer/app/storepreview/ui/InputActivity.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview.ui; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.support.annotation.Nullable; 7 | import android.support.design.widget.FloatingActionButton; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.text.Editable; 10 | import android.text.TextUtils; 11 | import android.view.Menu; 12 | import android.view.MenuItem; 13 | import android.widget.EditText; 14 | import android.widget.Toast; 15 | import butterknife.Bind; 16 | import butterknife.ButterKnife; 17 | import butterknife.OnClick; 18 | import com.bowyer.app.fabtransitionlayout.FooterLayout; 19 | import com.bowyer.app.storepreview.R; 20 | import com.bowyer.app.storepreview.preference.DataPreference; 21 | import com.crashlytics.android.Crashlytics; 22 | import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; 23 | import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; 24 | import com.github.ksoichiro.android.observablescrollview.ScrollState; 25 | import io.fabric.sdk.android.Fabric; 26 | import petrov.kristiyan.colorpicker.ColorPicker; 27 | 28 | public class InputActivity extends AppCompatActivity implements ObservableScrollViewCallbacks { 29 | 30 | private static final String KEY_DESCRIPTION = "key_description"; 31 | 32 | @Bind(R.id.scrollView) ObservableScrollView scrollView; 33 | @Bind(R.id.short_description) EditText editShortDescription; 34 | @Bind(R.id.description) EditText editDescription; 35 | @Bind(R.id.fab) FloatingActionButton fab; 36 | @Bind(R.id.fabtoolbar) FooterLayout footerLayout; 37 | 38 | private DataPreference mPrefs; 39 | 40 | public static void startActivity(Context context, String description) { 41 | Intent intent = new Intent(context, InputActivity.class); 42 | intent.putExtra(KEY_DESCRIPTION, description); 43 | context.startActivity(intent); 44 | } 45 | 46 | @Override protected void onCreate(@Nullable Bundle savedInstanceState) { 47 | super.onCreate(savedInstanceState); 48 | Fabric.with(this, new Crashlytics()); 49 | setContentView(R.layout.activity_input); 50 | ButterKnife.bind(this); 51 | mPrefs = new DataPreference(this); 52 | initData(); 53 | scrollView.setScrollViewCallbacks(this); 54 | footerLayout.setFab(fab); 55 | } 56 | 57 | @Override public boolean onCreateOptionsMenu(Menu menu) { 58 | getMenuInflater().inflate(R.menu.menu_input, menu); 59 | return super.onCreateOptionsMenu(menu); 60 | } 61 | 62 | public boolean onOptionsItemSelected(MenuItem item) { 63 | switch (item.getItemId()) { 64 | case R.id.action_preview: 65 | showPreview(); 66 | return true; 67 | } 68 | return false; 69 | } 70 | 71 | private void initData() { 72 | if (getIntent().hasExtra(KEY_DESCRIPTION)) { 73 | setDataFromIntent(); 74 | return; 75 | } 76 | String shortText = mPrefs.getShortText(); 77 | if (!TextUtils.isEmpty(shortText)) { 78 | editShortDescription.setText(shortText); 79 | } 80 | String descriptionText = mPrefs.getDescriptionText(); 81 | if (!TextUtils.isEmpty(descriptionText)) { 82 | editDescription.setText(descriptionText); 83 | } 84 | } 85 | 86 | private void setDataFromIntent() { 87 | Intent intent = getIntent(); 88 | Bundle extras = intent.getExtras(); 89 | String description = extras.getString(KEY_DESCRIPTION); 90 | editDescription.setText(description); 91 | } 92 | 93 | private void showPreview() { 94 | String shortText = editShortDescription.getText().toString(); 95 | String description = editDescription.getText().toString(); 96 | if (TextUtils.isEmpty(shortText) || TextUtils.isEmpty(description)) { 97 | Toast.makeText(this, R.string.text_need, Toast.LENGTH_SHORT).show(); 98 | return; 99 | } 100 | PreviewActivity.startActivity(this, shortText, description); 101 | } 102 | 103 | @OnClick(R.id.fab) void onClickFab() { 104 | footerLayout.expandFab(); 105 | } 106 | 107 | @Override public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) { 108 | 109 | } 110 | 111 | @Override public void onDownMotionEvent() { 112 | 113 | } 114 | 115 | @Override public void onUpOrCancelMotionEvent(ScrollState scrollState) { 116 | if (scrollState == ScrollState.UP) { 117 | if (!footerLayout.isFabExpanded()) { 118 | fab.hide(); 119 | } 120 | } else if (scrollState == ScrollState.DOWN) { 121 | if (!footerLayout.isFabExpanded()) { 122 | fab.show(); 123 | } 124 | } 125 | } 126 | 127 | @Override public void onBackPressed() { 128 | if (footerLayout.isFabExpanded()) { 129 | footerLayout.contractFab(); 130 | return; 131 | } 132 | super.onBackPressed(); 133 | } 134 | 135 | private void setTag(String tag) { 136 | int start = editDescription.getSelectionStart(); 137 | int end = editDescription.getSelectionEnd(); 138 | Editable editable = editDescription.getText(); 139 | editable.replace(Math.min(start, end), Math.max(start, end), tag); 140 | } 141 | 142 | @OnClick(R.id.font) void addFontTag() { 143 | ColorPicker colorPicker = new ColorPicker(this); 144 | colorPicker.show(); 145 | colorPicker.setOnChooseColorListener(new ColorPicker.OnChooseColorListener() { 146 | @Override public void onChooseColor(int position, int color) { 147 | String hexColor = String.format("#%06X", (0xFFFFFF & color)); 148 | setTag(getString(R.string.font_hex, hexColor)); 149 | } 150 | }); 151 | } 152 | 153 | @OnClick(R.id.font_end) void addFontEndTag() { 154 | setTag(getString(R.string.font_end)); 155 | } 156 | 157 | @OnClick(R.id.br) void addBrTag() { 158 | setTag(getString(R.string.br)); 159 | } 160 | 161 | @OnClick(R.id.b) void addBTag() { 162 | setTag(getString(R.string.b)); 163 | } 164 | 165 | @OnClick(R.id.b_end) void addBEndTag() { 166 | setTag(getString(R.string.b_end)); 167 | } 168 | 169 | @OnClick(R.id.i) void addITag() { 170 | setTag(getString(R.string.i)); 171 | } 172 | 173 | @OnClick(R.id.i_end) void addIEndTag() { 174 | setTag(getString(R.string.i_end)); 175 | } 176 | 177 | @OnClick(R.id.u) void addUTag() { 178 | setTag(getString(R.string.u)); 179 | } 180 | 181 | @OnClick(R.id.u_end) void addUEndTag() { 182 | setTag(getString(R.string.u_end)); 183 | } 184 | 185 | @OnClick(R.id.a) void addATag() { 186 | setTag(getString(R.string.a)); 187 | } 188 | 189 | @OnClick(R.id.a_end) void addAEndTag() { 190 | setTag(getString(R.string.a_end)); 191 | } 192 | 193 | @OnClick(R.id.h1) void addH1Tag() { 194 | setTag(getString(R.string.h1)); 195 | } 196 | 197 | @OnClick(R.id.h1_end) void addH1EndTag() { 198 | setTag(getString(R.string.h1_end)); 199 | } 200 | 201 | @OnClick(R.id.h2) void addH2Tag() { 202 | setTag(getString(R.string.h2)); 203 | } 204 | 205 | @OnClick(R.id.h2_end) void addH2EndTag() { 206 | setTag(getString(R.string.h2_end)); 207 | } 208 | 209 | @OnClick(R.id.h3) void addH3Tag() { 210 | setTag(getString(R.string.h3)); 211 | } 212 | 213 | @OnClick(R.id.h3_end) void addH3EndTag() { 214 | setTag(getString(R.string.h3_end)); 215 | } 216 | 217 | @OnClick(R.id.h4) void addH4Tag() { 218 | setTag(getString(R.string.h4)); 219 | } 220 | 221 | @OnClick(R.id.h4_end) void addH4EndTag() { 222 | setTag(getString(R.string.h4_end)); 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /app/src/main/java/com/bowyer/app/storepreview/ui/LaunchActivity.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview.ui; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.text.TextUtils; 8 | 9 | public class LaunchActivity extends AppCompatActivity { 10 | 11 | @Override protected void onCreate(@Nullable Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | Intent intent = getIntent(); 14 | Bundle extras = intent.getExtras(); 15 | CharSequence cs = extras.getCharSequence(Intent.EXTRA_TEXT); 16 | if (TextUtils.isEmpty(cs)) { 17 | return; 18 | } 19 | String text = cs.toString(); 20 | InputActivity.startActivity(this, text); 21 | finish(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/bowyer/app/storepreview/ui/PreviewActivity.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview.ui; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.support.design.widget.FloatingActionButton; 7 | import android.support.v4.app.ShareCompat; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.support.v7.widget.Toolbar; 10 | import android.text.Html; 11 | import android.view.Menu; 12 | import android.view.MenuItem; 13 | import android.widget.TextView; 14 | import android.widget.Toast; 15 | import butterknife.Bind; 16 | import butterknife.ButterKnife; 17 | import butterknife.OnClick; 18 | 19 | import com.bowyer.app.storepreview.R; 20 | import com.bowyer.app.storepreview.preference.DataPreference; 21 | import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; 22 | import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks; 23 | import com.github.ksoichiro.android.observablescrollview.ScrollState; 24 | 25 | public class PreviewActivity extends AppCompatActivity implements ObservableScrollViewCallbacks { 26 | 27 | private static String KEY_SHORT_DESCRIPTION = "key_short_description"; 28 | private static String KEY_DESCRIPTION = "key_description"; 29 | 30 | @Bind(R.id.scrollView) ObservableScrollView scrollView; 31 | @Bind(R.id.short_description) TextView shortDescription; 32 | @Bind(R.id.description) TextView description; 33 | @Bind(R.id.toolbar) Toolbar toolbar; 34 | @Bind(R.id.fab) FloatingActionButton fab; 35 | 36 | private String textShort; 37 | private String textDescription; 38 | 39 | private DataPreference mPrefs; 40 | 41 | public static void startActivity(Context context, String textShort, String textDescription) { 42 | Intent intent = new Intent(context, PreviewActivity.class); 43 | intent.putExtra(KEY_SHORT_DESCRIPTION, textShort); 44 | intent.putExtra(KEY_DESCRIPTION, textDescription); 45 | context.startActivity(intent); 46 | } 47 | 48 | @Override protected void onCreate(Bundle savedInstanceState) { 49 | super.onCreate(savedInstanceState); 50 | setContentView(R.layout.activity_preview); 51 | ButterKnife.bind(this); 52 | mPrefs = new DataPreference(this); 53 | scrollView.setScrollViewCallbacks(this); 54 | initToolbar(); 55 | initData(); 56 | } 57 | 58 | private void initToolbar() { 59 | toolbar.setTitle(R.string.app_name); 60 | setSupportActionBar(toolbar); 61 | getSupportActionBar().setDisplayShowHomeEnabled(true); 62 | toolbar.setNavigationIcon(R.drawable.ic_close); 63 | } 64 | 65 | private void initData() { 66 | Intent intent = getIntent(); 67 | 68 | textShort = intent.getStringExtra(KEY_SHORT_DESCRIPTION); 69 | textDescription = intent.getStringExtra(KEY_DESCRIPTION); 70 | 71 | shortDescription.setText(textShort); 72 | String parceDescription = textDescription.replaceAll("\\n", "
"); 73 | description.setText(Html.fromHtml(parceDescription)); 74 | } 75 | 76 | @Override public boolean onCreateOptionsMenu(Menu menu) { 77 | getMenuInflater().inflate(R.menu.menu_preview, menu); 78 | return super.onCreateOptionsMenu(menu); 79 | } 80 | 81 | public boolean onOptionsItemSelected(MenuItem item) { 82 | switch (item.getItemId()) { 83 | case android.R.id.home: 84 | finish(); 85 | return true; 86 | case R.id.action_share: 87 | share(); 88 | return true; 89 | } 90 | return false; 91 | } 92 | 93 | @OnClick(R.id.fab) void save() { 94 | mPrefs.saveShortText(textShort); 95 | mPrefs.saveSescriptionText(textDescription); 96 | Toast.makeText(this, R.string.message_saved, Toast.LENGTH_SHORT).show(); 97 | finish(); 98 | } 99 | 100 | private void share() { 101 | String message = getString(R.string.share_text, textShort, textDescription); 102 | ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(this); 103 | builder.setChooserTitle(getString(R.string.title_data_share)); 104 | builder.setText(message); 105 | builder.setType("text/plain"); 106 | builder.startChooser(); 107 | } 108 | 109 | @Override public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) { 110 | 111 | } 112 | 113 | @Override public void onDownMotionEvent() { 114 | 115 | } 116 | 117 | @Override public void onUpOrCancelMotionEvent(ScrollState scrollState) { 118 | if (scrollState == ScrollState.UP) { 119 | fab.hide(); 120 | } else { 121 | fab.show(); 122 | } 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-hdpi/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-hdpi/ic_code.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-hdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-mdpi/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-mdpi/ic_code.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-mdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/app_transparent_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xhdpi/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xhdpi/ic_code.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xxhdpi/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xxhdpi/ic_code.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xxhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xxxhdpi/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xxxhdpi/ic_code.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/drawable-xxxhdpi/ic_save.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_transparent_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout-land/activity_preview.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 17 | 23 | 30 | 43 | 54 | 55 | 56 | 67 | 68 | -------------------------------------------------------------------------------- /app/src/main/res/layout-sw600dp/activity_preview.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 17 | 23 | 30 | 43 | 54 | 55 | 56 | 67 | 68 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_input.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 15 | 22 | 37 | 51 | 52 | 53 | 66 | 74 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_preview.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 17 | 23 | 30 | 43 | 54 | 55 | 56 | 67 | 68 | -------------------------------------------------------------------------------- /app/src/main/res/layout/include_tag.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 15 | 22 | 29 | 36 | 43 | 50 | 57 | 64 | 71 | 78 | 85 | 92 | 99 | 106 | 113 | 120 | 127 | 134 | 141 | 142 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_input.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_preview.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ストアのプレビューです 3 | プレビュー 4 | シェア 5 | プレビューデータのシェア 6 | 簡単な説明 7 | 詳細な説明 8 | すべて入力して下さい 9 | 保存しました 10 | 【簡単な説明】\n 11 | %1$s \n 12 | 【詳細な説明】\n 13 | %2$s 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #689f38 4 | #537f2d 5 | #FFC107 6 | #707070 7 | 8 | #fff 9 | #000 10 | #00FFFFFF 11 | #4d000000 12 | #60000000 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | StorePreview 3 | Preview 4 | Share 5 | Share data 6 | Short Description 7 | Description 8 | Need all text field 9 | Saved 10 | 【Short Description】\n 11 | %1$s \n 12 | 【Description】\n 13 | %2$s 14 | <font> 15 | <font color="%1s"> 16 | </font> 17 | </br> 18 | <b> 19 | </b> 20 | <i> 21 | </i> 22 | <u> 23 | </u> 24 | <a> 25 | </a> 26 | <h1> 27 | </h1> 28 | <h2> 29 | </h2> 30 | <h3> 31 | </h3> 32 | <h4> 33 | </h4> 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | 18 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/test/java/com/bowyer/app/storepreview/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.bowyer.app.storepreview; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * To work on unit tests, switch the Test Artifact in the Build Variants view. 9 | */ 10 | public class ExampleUnitTest { 11 | @Test public void addition_isCorrect() throws Exception { 12 | assertEquals(4, 2 + 2); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /art/en/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/art/en/demo.gif -------------------------------------------------------------------------------- /art/en/screenshot-en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/art/en/screenshot-en.png -------------------------------------------------------------------------------- /art/ja/device-2016-08-13-005242.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/art/ja/device-2016-08-13-005242.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:2.1.0' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | jcenter() 18 | } 19 | } 20 | 21 | task clean(type: Delete) { 22 | delete rootProject.buildDir 23 | } 24 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bowyer-app/StorePreview/e5935822c6c4cdb13987c48891decfce2394a245/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 28 10:00:20 PST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------