diff --git a/.gitignore b/.gitignore index 1e93b4d..46f7b61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,3 @@ -/caprice/.idea/ -/caprice/.gradle/ -/caprice/.DS_Store/ -/caprice/gradle/ -/caprice/build/ -/caprice/blur/build/ -/caprice/kit/build/ -/caprice/res/build/ -/caprice/ui/build/ -/caprice/sample/build/ -/caprice/local.properties -/caprice/gradlew -/caprice/gradlew.bat - /steady/.idea/ /steady/.gradle/ /steady/.DS_Store/ diff --git a/caprice/.gitignore b/caprice/.gitignore index 22a91ed..11d60c7 100644 --- a/caprice/.gitignore +++ b/caprice/.gitignore @@ -1,11 +1,9 @@ +*.iml +.idea .gradle /local.properties -/.idea/workspace.xml -/.idea/libraries .DS_Store /build -.idea/ -*.iml +/captures /gradle -gradlew -gradlew.bat \ No newline at end of file +.externalNativeBuild \ No newline at end of file diff --git a/caprice/README.md b/caprice/README.md deleted file mode 100644 index e99af37..0000000 --- a/caprice/README.md +++ /dev/null @@ -1,22 +0,0 @@ -## CAPRICE Branch - -This is `CAPRICE` Branch development sources files. - - -License --------- - - Copyright 2014-2016 Qiujuer. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/caprice/deprecated/.gitignore b/caprice/app/.gitignore similarity index 100% rename from caprice/deprecated/.gitignore rename to caprice/app/.gitignore diff --git a/caprice/app/build.gradle b/caprice/app/build.gradle new file mode 100644 index 0000000..8dc2ebc --- /dev/null +++ b/caprice/app/build.gradle @@ -0,0 +1,37 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion ANDROID_BUILD_SDK_VERSION as int + buildToolsVersion ANDROID_BUILD_TOOLS_VERSION + + defaultConfig { + applicationId "net.qiujuer.sample.genius" + minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION as int + targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + compile project(':graphics') + compile project(':res') + compile project(':ui') + compile project(':kit-cmd') + compile project(':kit-reflect') + compile project(':kit-handler') + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' + testCompile 'junit:junit:4.12' + androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.android.support.test:runner:0.5' + androidTestCompile 'com.android.support:support-annotations:23.4.0' +} diff --git a/caprice/deprecated/proguard-rules.pro b/caprice/app/proguard-rules.pro similarity index 100% rename from caprice/deprecated/proguard-rules.pro rename to caprice/app/proguard-rules.pro diff --git a/caprice/app/src/androidTest/java/net/qiujuer/sample/genius/ExampleInstrumentationTest.java b/caprice/app/src/androidTest/java/net/qiujuer/sample/genius/ExampleInstrumentationTest.java new file mode 100644 index 0000000..0774fa8 --- /dev/null +++ b/caprice/app/src/androidTest/java/net/qiujuer/sample/genius/ExampleInstrumentationTest.java @@ -0,0 +1,29 @@ +package net.qiujuer.sample.genius; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.MediumTest; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@MediumTest +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentationTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("net.qiujuer.sample.genius", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/caprice/sample/src/main/AndroidManifest.xml b/caprice/app/src/main/AndroidManifest.xml similarity index 57% rename from caprice/sample/src/main/AndroidManifest.xml rename to caprice/app/src/main/AndroidManifest.xml index 85501bd..fe9e1f1 100644 --- a/caprice/sample/src/main/AndroidManifest.xml +++ b/caprice/app/src/main/AndroidManifest.xml @@ -2,22 +2,14 @@ - - - - - - - - @@ -27,11 +19,19 @@ + android:label="@string/title_activity_blur" + android:theme="@style/AppTheme" /> - + android:label="@string/title_activity_kit" + android:theme="@style/AppTheme" /> + + \ No newline at end of file diff --git a/caprice/sample/src/main/assets/fonts/roboto_bold.ttf b/caprice/app/src/main/assets/fonts/roboto_bold.ttf similarity index 100% rename from caprice/sample/src/main/assets/fonts/roboto_bold.ttf rename to caprice/app/src/main/assets/fonts/roboto_bold.ttf diff --git a/caprice/sample/src/main/assets/fonts/roboto_extrabold.ttf b/caprice/app/src/main/assets/fonts/roboto_extrabold.ttf similarity index 100% rename from caprice/sample/src/main/assets/fonts/roboto_extrabold.ttf rename to caprice/app/src/main/assets/fonts/roboto_extrabold.ttf diff --git a/caprice/sample/src/main/assets/fonts/roboto_extralight.ttf b/caprice/app/src/main/assets/fonts/roboto_extralight.ttf similarity index 100% rename from caprice/sample/src/main/assets/fonts/roboto_extralight.ttf rename to caprice/app/src/main/assets/fonts/roboto_extralight.ttf diff --git a/caprice/sample/src/main/assets/fonts/roboto_light.ttf b/caprice/app/src/main/assets/fonts/roboto_light.ttf similarity index 100% rename from caprice/sample/src/main/assets/fonts/roboto_light.ttf rename to caprice/app/src/main/assets/fonts/roboto_light.ttf diff --git a/caprice/sample/src/main/assets/fonts/roboto_regular.ttf b/caprice/app/src/main/assets/fonts/roboto_regular.ttf similarity index 100% rename from caprice/sample/src/main/assets/fonts/roboto_regular.ttf rename to caprice/app/src/main/assets/fonts/roboto_regular.ttf diff --git a/caprice/sample/src/main/java/net/qiujuer/sample/genius/BlurActivity.java b/caprice/app/src/main/java/net/qiujuer/sample/genius/BlurActivity.java similarity index 64% rename from caprice/sample/src/main/java/net/qiujuer/sample/genius/BlurActivity.java rename to caprice/app/src/main/java/net/qiujuer/sample/genius/BlurActivity.java index e3aa784..4b83426 100644 --- a/caprice/sample/src/main/java/net/qiujuer/sample/genius/BlurActivity.java +++ b/caprice/app/src/main/java/net/qiujuer/sample/genius/BlurActivity.java @@ -11,7 +11,10 @@ import android.widget.ImageView; import android.widget.TextView; -import net.qiujuer.genius.blur.StackBlur; +import net.qiujuer.genius.graphics.Blur; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; public class BlurActivity extends AppCompatActivity { @@ -42,10 +45,40 @@ protected void onResume() { applyBlur(); } + private static Bitmap codec(Bitmap src, Bitmap.CompressFormat format, + int quality) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + src.compress(format, quality, os); + + byte[] array = os.toByteArray(); + return BitmapFactory.decodeByteArray(array, 0, array.length); + } + + private Bitmap compressImage(Bitmap image) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + image.compress(Bitmap.CompressFormat.PNG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 + int options = 100; + while (baos.toByteArray().length / 1024 > 100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩 + baos.reset();//重置baos即清空baos + image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中 + options -= 10;//每次都减少10 + } + ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 + BitmapFactory.Options options1 = new BitmapFactory.Options(); + options1.inPreferredConfig = Bitmap.Config.RGB_565; + Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, options1);//把ByteArrayInputStream数据生成图片 + return bitmap; + } + private void initBlur() { // Find Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_blur); + //Bitmap.Config config = mBitmap.getConfig(); + //mBitmap = mBitmap.copy(Bitmap.Config.RGB_565, true); + //mBitmap = compressImage(mBitmap); + + mImageJava = (ImageView) findViewById(R.id.image_blur_java); mImageJniPixels = (ImageView) findViewById(R.id.image_blur_jni_pixels); mImageJniBitmap = (ImageView) findViewById(R.id.image_blur_jni_bitmap); @@ -61,6 +94,8 @@ private void initBlur() { mCompressBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true); + mCompressBitmap = mCompressBitmap.copy(Bitmap.Config.RGB_565, true); + // Set On OnCheckedChangeListener CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_blur_isCompress); checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -117,21 +152,29 @@ else if (i == 3) // Is Compress float radius = 20; - Bitmap overlay = mBitmap; + Bitmap overlay = mBitmap.copy(mBitmap.getConfig(), true); if (mCompress) { radius = 3; - overlay = mCompressBitmap; + overlay = mCompressBitmap.copy(mCompressBitmap.getConfig(), true); } - // Java - if (i == 1) - overlay = StackBlur.blur(overlay, (int) radius, false); - // Bitmap JNI Native - else if (i == 2) - overlay = StackBlur.blurNatively(overlay, (int) radius, false); + + if (i == 1) { + // Java + overlay = Blur.onStackBlurJava(overlay, (int) radius); + } else if (i == 2) { // Pixels JNI Native - else if (i == 3) - overlay = StackBlur.blurNativelyPixels(overlay, (int) radius, false); + int w = overlay.getWidth(); + int h = overlay.getHeight(); + int[] pix = new int[w * h]; + overlay.getPixels(pix, 0, w, 0, 0, w, h); + // Jni Pixels Blur + pix = Blur.onStackBlurPixels(pix, w, h, (int) radius); + overlay.setPixels(pix, 0, w, 0, 0, w, h); + } else if (i == 3) { + // Bitmap JNI Native + overlay = Blur.onStackBlur(overlay, (int) radius); + } // Show showDrawable(view, overlay); diff --git a/caprice/app/src/main/java/net/qiujuer/sample/genius/BlurClipActivity.java b/caprice/app/src/main/java/net/qiujuer/sample/genius/BlurClipActivity.java new file mode 100644 index 0000000..83ac859 --- /dev/null +++ b/caprice/app/src/main/java/net/qiujuer/sample/genius/BlurClipActivity.java @@ -0,0 +1,81 @@ +package net.qiujuer.sample.genius; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.ImageView; + +import net.qiujuer.genius.graphics.Blur; + +public class BlurClipActivity extends AppCompatActivity { + private Bitmap mSrc1; + private Bitmap mSrc2; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_blur_clip); + + try { + // Find Bitmap + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.walkthrough); + mSrc1 = bitmap.copy(bitmap.getConfig(), true); + mSrc2 = bitmap.copy(bitmap.getConfig(), true); + bitmap.recycle(); + } catch (OutOfMemoryError error) { + error.printStackTrace(); + finish(); + } + + findViewById(R.id.btn_todo1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clipBlur(); + } + }); + findViewById(R.id.btn_todo2).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + blur(); + } + }); + findViewById(R.id.btn_clear).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + clear(); + } + }); + } + + private void clear() { + Drawable drawable = ((ImageView) findViewById(R.id.iv_show1)).getDrawable(); + if (drawable != null && drawable instanceof BitmapDrawable) { + ((ImageView) findViewById(R.id.iv_show1)).setImageDrawable(null); + ((BitmapDrawable) drawable).getBitmap().recycle(); + } + } + + private void clipBlur() { + ((ImageView) findViewById(R.id.iv_show1)).setImageBitmap(Blur.onStackBlurClip(mSrc1, 120)); + } + + private void blur() { + ((ImageView) findViewById(R.id.iv_show1)).setImageBitmap(Blur.onStackBlur(mSrc2, 120)); + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mSrc1 != null && !mSrc1.isRecycled()) + mSrc1.recycle(); + if (mSrc2 != null && !mSrc2.isRecycled()) + mSrc2.recycle(); + + System.gc(); + } +} diff --git a/caprice/sample/src/main/java/net/qiujuer/sample/genius/KitActivity.java b/caprice/app/src/main/java/net/qiujuer/sample/genius/KitActivity.java similarity index 98% rename from caprice/sample/src/main/java/net/qiujuer/sample/genius/KitActivity.java rename to caprice/app/src/main/java/net/qiujuer/sample/genius/KitActivity.java index 8ceb226..51698f2 100644 --- a/caprice/sample/src/main/java/net/qiujuer/sample/genius/KitActivity.java +++ b/caprice/app/src/main/java/net/qiujuer/sample/genius/KitActivity.java @@ -8,7 +8,6 @@ import android.view.View; import android.widget.TextView; -import net.qiujuer.genius.kit.Kit; import net.qiujuer.genius.kit.cmd.Cmd; import net.qiujuer.genius.kit.cmd.Command; import net.qiujuer.genius.kit.cmd.DnsResolve; @@ -57,9 +56,9 @@ protected void onCreate(Bundle savedInstanceState) { } private void init() { - Application kitApp = Kit.getApplication(); + //Application kitApp = Kit.getApplication(); Application application = getApplication(); - showLog(TAG, "Kit.getApplication() eq getApplication() is:" + (kitApp == application)); + //showLog(TAG, "Kit.getApplication() eq getApplication() is:" + (kitApp == application)); Cmd.init(application); } diff --git a/caprice/sample/src/main/java/net/qiujuer/sample/genius/MainActivity.java b/caprice/app/src/main/java/net/qiujuer/sample/genius/MainActivity.java similarity index 92% rename from caprice/sample/src/main/java/net/qiujuer/sample/genius/MainActivity.java rename to caprice/app/src/main/java/net/qiujuer/sample/genius/MainActivity.java index 5bec19c..b008b71 100644 --- a/caprice/sample/src/main/java/net/qiujuer/sample/genius/MainActivity.java +++ b/caprice/app/src/main/java/net/qiujuer/sample/genius/MainActivity.java @@ -5,7 +5,6 @@ import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.CompoundButton; @@ -36,18 +35,17 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Log.e(MainActivity.class.getName(), "OnClickListener"); + Toast.makeText(v.getContext(), "OnClickListener.", Toast.LENGTH_SHORT).show(); } }); findViewById(R.id.btn).setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - Log.e(MainActivity.class.getName(), "OnLongClickListener"); + Toast.makeText(v.getContext(), "OnLongClickListener.", Toast.LENGTH_SHORT).show(); return false; } }); - } @Override @@ -65,6 +63,9 @@ public boolean onMenuItemClick(MenuItem item) { if (id == R.id.action_blur) { Intent intent = new Intent(MainActivity.this, BlurActivity.class); startActivity(intent); + } else if (id == R.id.action_blur_clip) { + Intent intent = new Intent(MainActivity.this, BlurClipActivity.class); + startActivity(intent); } else if (id == R.id.action_kit) { Intent intent = new Intent(MainActivity.this, KitActivity.class); startActivity(intent); @@ -132,7 +133,7 @@ public void onClick(View v) { LoadingDrawable drawable = new LoadingCircleDrawable(); Resources resources = getResources(); - drawable.setBackgroundColor(resources.getColor(R.color.g_default_loading_bg)); + drawable.setBackgroundColor(resources.getColor(R.color.g_default_base_background)); drawable.setForegroundColor(resources.getIntArray(R.array.g_default_loading_fg)); drawable.setBackgroundLineSize(2); drawable.setForegroundLineSize(4); diff --git a/caprice/sample/src/main/java/net/qiujuer/sample/genius/SeekBarActivity.java b/caprice/app/src/main/java/net/qiujuer/sample/genius/SeekBarActivity.java similarity index 100% rename from caprice/sample/src/main/java/net/qiujuer/sample/genius/SeekBarActivity.java rename to caprice/app/src/main/java/net/qiujuer/sample/genius/SeekBarActivity.java diff --git a/caprice/sample/src/main/res/color/m_check_box.xml b/caprice/app/src/main/res/color/m_check_box.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_check_box.xml rename to caprice/app/src/main/res/color/m_check_box.xml diff --git a/caprice/sample/src/main/res/color/m_edit_view_hint.xml b/caprice/app/src/main/res/color/m_edit_view_hint.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_edit_view_hint.xml rename to caprice/app/src/main/res/color/m_edit_view_hint.xml diff --git a/caprice/sample/src/main/res/color/m_edit_view_line.xml b/caprice/app/src/main/res/color/m_edit_view_line.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_edit_view_line.xml rename to caprice/app/src/main/res/color/m_edit_view_line.xml diff --git a/caprice/sample/src/main/res/color/m_seek_bar_indicator_bg.xml b/caprice/app/src/main/res/color/m_seek_bar_indicator_bg.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_seek_bar_indicator_bg.xml rename to caprice/app/src/main/res/color/m_seek_bar_indicator_bg.xml diff --git a/caprice/sample/src/main/res/color/m_seek_bar_ripple.xml b/caprice/app/src/main/res/color/m_seek_bar_ripple.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_seek_bar_ripple.xml rename to caprice/app/src/main/res/color/m_seek_bar_ripple.xml diff --git a/caprice/sample/src/main/res/color/m_seek_bar_scrubber.xml b/caprice/app/src/main/res/color/m_seek_bar_scrubber.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_seek_bar_scrubber.xml rename to caprice/app/src/main/res/color/m_seek_bar_scrubber.xml diff --git a/caprice/sample/src/main/res/color/m_seek_bar_thumb.xml b/caprice/app/src/main/res/color/m_seek_bar_thumb.xml similarity index 100% rename from caprice/sample/src/main/res/color/m_seek_bar_thumb.xml rename to caprice/app/src/main/res/color/m_seek_bar_thumb.xml diff --git a/caprice/sample/src/main/res/drawable/m_button_background.xml b/caprice/app/src/main/res/drawable/m_button_background.xml similarity index 80% rename from caprice/sample/src/main/res/drawable/m_button_background.xml rename to caprice/app/src/main/res/drawable/m_button_background.xml index 84de644..02bc670 100644 --- a/caprice/sample/src/main/res/drawable/m_button_background.xml +++ b/caprice/app/src/main/res/drawable/m_button_background.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/caprice/sample/src/main/res/drawable/m_ic_add.xml b/caprice/app/src/main/res/drawable/m_ic_add.xml similarity index 100% rename from caprice/sample/src/main/res/drawable/m_ic_add.xml rename to caprice/app/src/main/res/drawable/m_ic_add.xml diff --git a/caprice/sample/src/main/res/layout/activity_blur.xml b/caprice/app/src/main/res/layout/activity_blur.xml similarity index 92% rename from caprice/sample/src/main/res/layout/activity_blur.xml rename to caprice/app/src/main/res/layout/activity_blur.xml index ca220ea..bd4f4a5 100644 --- a/caprice/sample/src/main/res/layout/activity_blur.xml +++ b/caprice/app/src/main/res/layout/activity_blur.xml @@ -1,4 +1,5 @@ - + android:src="@mipmap/ic_blur" + app:gTouchColor="@color/amber_100" /> - - - - + + + + + + +