Commit 0a36934574e8dbe0d67bdd96d7abd0eb15c4baa9

Authored by YangShuai
1 parent cdd48e87

1 当子类包含fragment时,自动回调onActivityResult方法

app/strike/src/main/java/com/cnlive/strike/MainActivity.java
@@ -28,7 +28,7 @@ public class MainActivity extends AppCompatActivity { @@ -28,7 +28,7 @@ public class MainActivity extends AppCompatActivity {
28 findViewById(R.id.go_to).setOnClickListener(new View.OnClickListener() { 28 findViewById(R.id.go_to).setOnClickListener(new View.OnClickListener() {
29 @Override 29 @Override
30 public void onClick(View v) { 30 public void onClick(View v) {
31 - startActivity(new Intent(MainActivity.this, MyActivity.class)); 31 + startActivity(new Intent(MainActivity.this, LoginActivity.class));
32 // finish(); 32 // finish();
33 } 33 }
34 }); 34 });
cloud/user/src/main/java/com/cnlive/strike/user/frame/presenter/QuickLoginPresenter.java
@@ -164,9 +164,9 @@ public class QuickLoginPresenter extends BasePresenter<QuickLoginView> { @@ -164,9 +164,9 @@ public class QuickLoginPresenter extends BasePresenter<QuickLoginView> {
164 } else { 164 } else {
165 //友盟账号登录统计,暂时只有平台登录,后续对接三方登录 165 //友盟账号登录统计,暂时只有平台登录,后续对接三方登录
166 // MobclickAgent.onProfileSignIn("CNLive", user.getUid()); 166 // MobclickAgent.onProfileSignIn("CNLive", user.getUid());
167 - ifViewAttached(view -> view.showMainView(false, false)); 167 +// ifViewAttached(view -> view.showMainView(false, false));
168 //todo 测试首次用户 168 //todo 测试首次用户
169 -// ifViewAttached(view -> view.showEditView(false)); 169 + ifViewAttached(view -> view.showEditView(false));
170 } 170 }
171 AppConfig.setCountryCode(""); 171 AppConfig.setCountryCode("");
172 AppConfig.setVerificationCode(""); 172 AppConfig.setVerificationCode("");
cloud/user/src/main/java/com/cnlive/strike/user/ui/activity/FirstLoginActivity.java
@@ -24,10 +24,6 @@ public class FirstLoginActivity extends BaseActivity { @@ -24,10 +24,6 @@ public class FirstLoginActivity extends BaseActivity {
24 private String tagMsg; 24 private String tagMsg;
25 public static String TAG_CLICK_AD = "clickAd"; 25 public static String TAG_CLICK_AD = "clickAd";
26 26
27 - @Override  
28 - protected int getViewLayoutId() {  
29 - return R.layout.activity_login;  
30 - }  
31 27
32 @Override 28 @Override
33 protected void initParam() { 29 protected void initParam() {
@@ -44,9 +40,9 @@ public class FirstLoginActivity extends BaseActivity { @@ -44,9 +40,9 @@ public class FirstLoginActivity extends BaseActivity {
44 @Override 40 @Override
45 protected void initView() { 41 protected void initView() {
46 super.initView(); 42 super.initView();
47 - FragmentManager fragmentManager = getSupportFragmentManager();  
48 - FragmentUtil fragmentUtil = new FragmentUtil(R.id.loginContent);  
49 - fragmentUtil.initFragment(firstLoginFragment, fragmentManager); 43 + if (null != firstLoginFragment) {
  44 + loadRootFragment(firstLoginFragment);
  45 + }
50 } 46 }
51 47
52 @Override 48 @Override
@@ -54,18 +50,6 @@ public class FirstLoginActivity extends BaseActivity { @@ -54,18 +50,6 @@ public class FirstLoginActivity extends BaseActivity {
54 super.onDestroy(); 50 super.onDestroy();
55 } 51 }
56 52
57 - @Override  
58 - protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
59 - super.onActivityResult(requestCode, resultCode, data);  
60 - firstLoginFragment.onActivityResult(requestCode, resultCode, data);  
61 - }  
62 -  
63 - @Override  
64 - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {  
65 - super.onRequestPermissionsResult(requestCode, permissions, grantResults);  
66 - if (firstLoginFragment != null)  
67 - firstLoginFragment.onRequestPermissionsResult(requestCode, permissions, grantResults);  
68 - }  
69 53
70 @Override 54 @Override
71 public void onBackPressed() { 55 public void onBackPressed() {
cloud/user/src/main/java/com/cnlive/strike/user/ui/activity/LoginActivity.java
@@ -91,13 +91,6 @@ public class LoginActivity extends BaseActivity { @@ -91,13 +91,6 @@ public class LoginActivity extends BaseActivity {
91 } 91 }
92 92
93 @Override 93 @Override
94 - public void onActivityResult(int requestCode, int resultCode, Intent data) {  
95 - super.onActivityResult(requestCode, resultCode, data);  
96 - if (quickLoginFragment != null)  
97 - quickLoginFragment.onActivityResult(requestCode, resultCode, data);  
98 - }  
99 -  
100 - @Override  
101 protected void onNewIntent(Intent intent) { 94 protected void onNewIntent(Intent intent) {
102 super.onNewIntent(intent); 95 super.onNewIntent(intent);
103 tagMsg = intent.getStringExtra(TAG_MSG) == null ? "" : intent.getStringExtra(TAG_MSG); 96 tagMsg = intent.getStringExtra(TAG_MSG) == null ? "" : intent.getStringExtra(TAG_MSG);
core/base/src/main/java/com/cnlive/core/libs/base/frame/activity/BaseActivity.java
@@ -32,6 +32,7 @@ import androidx.core.app.ActivityCompat; @@ -32,6 +32,7 @@ import androidx.core.app.ActivityCompat;
32 import androidx.core.content.ContextCompat; 32 import androidx.core.content.ContextCompat;
33 import androidx.databinding.DataBindingUtil; 33 import androidx.databinding.DataBindingUtil;
34 import androidx.databinding.ViewDataBinding; 34 import androidx.databinding.ViewDataBinding;
  35 +import androidx.fragment.app.Fragment;
35 36
36 import com.alibaba.android.arouter.launcher.ARouter; 37 import com.alibaba.android.arouter.launcher.ARouter;
37 import com.cnlive.core.libs.base.application.AppConfig; 38 import com.cnlive.core.libs.base.application.AppConfig;
@@ -1015,4 +1016,16 @@ public abstract class BaseActivity<V extends BaseView, P extends BasePresenter<V @@ -1015,4 +1016,16 @@ public abstract class BaseActivity<V extends BaseView, P extends BasePresenter<V
1015 return mSwipeDelegate.getSwipeBackLayout(); 1016 return mSwipeDelegate.getSwipeBackLayout();
1016 } 1017 }
1017 1018
  1019 +
  1020 + @Override
  1021 + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  1022 + super.onActivityResult(requestCode, resultCode, data);
  1023 + if (null!=getSupportFragmentManager()&&null != getSupportFragmentManager().getFragments()) {
  1024 + for (Fragment fragment : getSupportFragmentManager().getFragments()) {
  1025 + if (null != fragment) {
  1026 + fragment.onActivityResult(requestCode, resultCode, data);
  1027 + }
  1028 + }
  1029 + }
  1030 + }
1018 } 1031 }
1019 \ No newline at end of file 1032 \ No newline at end of file
core/base/src/main/java/top/zibin/luban/Checker.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -import android.graphics.BitmapFactory;  
4 -import android.util.Log;  
5 -  
6 -import java.io.ByteArrayOutputStream;  
7 -import java.io.File;  
8 -import java.io.IOException;  
9 -import java.io.InputStream;  
10 -import java.util.ArrayList;  
11 -import java.util.Arrays;  
12 -import java.util.List;  
13 -  
14 -enum Checker {  
15 - SINGLE;  
16 -  
17 - private static final String TAG = "Luban";  
18 -  
19 - private static List<String> format = new ArrayList<>();  
20 - private static final String JPG = ".jpg";  
21 - private static final String JPEG = ".jpeg";  
22 - private static final String PNG = ".png";  
23 - private static final String WEBP = ".webp";  
24 - private static final String GIF = ".gif";  
25 -  
26 - private final byte[] JPEG_SIGNATURE = new byte[]{(byte) 0xFF, (byte) 0xD8, (byte) 0xFF};  
27 -  
28 - static {  
29 - format.add(JPG);  
30 - format.add(JPEG);  
31 - format.add(PNG);  
32 - format.add(WEBP);  
33 - format.add(GIF);  
34 - }  
35 -  
36 - /**  
37 - * Determine if it is JPG.  
38 - *  
39 - * @param is image file input stream  
40 - */  
41 - boolean isJPG(InputStream is) {  
42 - return isJPG(toByteArray(is));  
43 - }  
44 -  
45 - /**  
46 - * Returns the degrees in clockwise. Values are 0, 90, 180, or 270.  
47 - */  
48 - int getOrientation(InputStream is) {  
49 - return getOrientation(toByteArray(is));  
50 - }  
51 -  
52 - private boolean isJPG(byte[] data) {  
53 - if (data == null || data.length < 3) {  
54 - return false;  
55 - }  
56 - byte[] signatureB = new byte[]{data[0], data[1], data[2]};  
57 - return Arrays.equals(JPEG_SIGNATURE, signatureB);  
58 - }  
59 -  
60 - private int getOrientation(byte[] jpeg) {  
61 - if (jpeg == null) {  
62 - return 0;  
63 - }  
64 -  
65 - int offset = 0;  
66 - int length = 0;  
67 -  
68 - // ISO/IEC 10918-1:1993(E)  
69 - while (offset + 3 < jpeg.length && (jpeg[offset++] & 0xFF) == 0xFF) {  
70 - int marker = jpeg[offset] & 0xFF;  
71 -  
72 - // Check if the marker is a padding.  
73 - if (marker == 0xFF) {  
74 - continue;  
75 - }  
76 - offset++;  
77 -  
78 - // Check if the marker is SOI or TEM.  
79 - if (marker == 0xD8 || marker == 0x01) {  
80 - continue;  
81 - }  
82 - // Check if the marker is EOI or SOS.  
83 - if (marker == 0xD9 || marker == 0xDA) {  
84 - break;  
85 - }  
86 -  
87 - // Get the length and check if it is reasonable.  
88 - length = pack(jpeg, offset, 2, false);  
89 - if (length < 2 || offset + length > jpeg.length) {  
90 - Log.e(TAG, "Invalid length");  
91 - return 0;  
92 - }  
93 -  
94 - // Break if the marker is EXIF in APP1.  
95 - if (marker == 0xE1 && length >= 8  
96 - && pack(jpeg, offset + 2, 4, false) == 0x45786966  
97 - && pack(jpeg, offset + 6, 2, false) == 0) {  
98 - offset += 8;  
99 - length -= 8;  
100 - break;  
101 - }  
102 -  
103 - // Skip other markers.  
104 - offset += length;  
105 - length = 0;  
106 - }  
107 -  
108 - // JEITA CP-3451 Exif Version 2.2  
109 - if (length > 8) {  
110 - // Identify the byte order.  
111 - int tag = pack(jpeg, offset, 4, false);  
112 - if (tag != 0x49492A00 && tag != 0x4D4D002A) {  
113 - Log.e(TAG, "Invalid byte order");  
114 - return 0;  
115 - }  
116 - boolean littleEndian = (tag == 0x49492A00);  
117 -  
118 - // Get the offset and check if it is reasonable.  
119 - int count = pack(jpeg, offset + 4, 4, littleEndian) + 2;  
120 - if (count < 10 || count > length) {  
121 - Log.e(TAG, "Invalid offset");  
122 - return 0;  
123 - }  
124 - offset += count;  
125 - length -= count;  
126 -  
127 - // Get the count and go through all the elements.  
128 - count = pack(jpeg, offset - 2, 2, littleEndian);  
129 - while (count-- > 0 && length >= 12) {  
130 - // Get the tag and check if it is orientation.  
131 - tag = pack(jpeg, offset, 2, littleEndian);  
132 - if (tag == 0x0112) {  
133 - int orientation = pack(jpeg, offset + 8, 2, littleEndian);  
134 - switch (orientation) {  
135 - case 1:  
136 - return 0;  
137 - case 3:  
138 - return 180;  
139 - case 6:  
140 - return 90;  
141 - case 8:  
142 - return 270;  
143 - }  
144 - Log.e(TAG, "Unsupported orientation");  
145 - return 0;  
146 - }  
147 - offset += 12;  
148 - length -= 12;  
149 - }  
150 - }  
151 -  
152 - Log.e(TAG, "Orientation not found");  
153 - return 0;  
154 - }  
155 -  
156 - String extSuffix(InputStreamProvider input) {  
157 - try {  
158 - BitmapFactory.Options options = new BitmapFactory.Options();  
159 - options.inJustDecodeBounds = true;  
160 - BitmapFactory.decodeStream(input.open(), null, options);  
161 - return options.outMimeType.replace("image/", ".");  
162 - } catch (Exception e) {  
163 - return JPG;  
164 - }  
165 - }  
166 -  
167 - boolean needCompress(int leastCompressSize, String path) {  
168 - if (leastCompressSize > 0) {  
169 - File source = new File(path);  
170 - return source.exists() && source.length() > (leastCompressSize << 10);  
171 - }  
172 - return true;  
173 - }  
174 -  
175 - private int pack(byte[] bytes, int offset, int length, boolean littleEndian) {  
176 - int step = 1;  
177 - if (littleEndian) {  
178 - offset += length - 1;  
179 - step = -1;  
180 - }  
181 -  
182 - int value = 0;  
183 - while (length-- > 0) {  
184 - value = (value << 8) | (bytes[offset] & 0xFF);  
185 - offset += step;  
186 - }  
187 - return value;  
188 - }  
189 -  
190 - private byte[] toByteArray(InputStream is) {  
191 - if (is == null) {  
192 - return new byte[0];  
193 - }  
194 -  
195 - ByteArrayOutputStream buffer = new ByteArrayOutputStream();  
196 -  
197 - int read;  
198 - byte[] data = new byte[4096];  
199 -  
200 - try {  
201 - while ((read = is.read(data, 0, data.length)) != -1) {  
202 - buffer.write(data, 0, read);  
203 - }  
204 - } catch (Exception ignored) {  
205 - return new byte[0];  
206 - } finally {  
207 - try {  
208 - buffer.close();  
209 - } catch (IOException ignored) {  
210 - }  
211 - }  
212 -  
213 - return buffer.toByteArray();  
214 - }  
215 -}  
core/base/src/main/java/top/zibin/luban/CompressionPredicate.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -/**  
4 - * Created on 2018/1/3 19:43  
5 - *  
6 - * @author andy  
7 - *  
8 - * A functional interface (callback) that returns true or false for the given input path should be compressed.  
9 - */  
10 -  
11 -public interface CompressionPredicate {  
12 -  
13 - /**  
14 - * Determine the given input path should be compressed and return a boolean.  
15 - * @param path input path  
16 - * @return the boolean result  
17 - */  
18 - boolean apply(String path);  
19 -}  
core/base/src/main/java/top/zibin/luban/Engine.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -import android.graphics.Bitmap;  
4 -import android.graphics.BitmapFactory;  
5 -import android.graphics.Matrix;  
6 -  
7 -import java.io.ByteArrayOutputStream;  
8 -import java.io.File;  
9 -import java.io.FileOutputStream;  
10 -import java.io.IOException;  
11 -  
12 -/**  
13 - * Responsible for starting compress and managing active and cached resources.  
14 - */  
15 -class Engine {  
16 - private InputStreamProvider srcImg;  
17 - private File tagImg;  
18 - private int srcWidth;  
19 - private int srcHeight;  
20 - private boolean focusAlpha;  
21 -  
22 - Engine(InputStreamProvider srcImg, File tagImg, boolean focusAlpha) throws IOException {  
23 - this.tagImg = tagImg;  
24 - this.srcImg = srcImg;  
25 - this.focusAlpha = focusAlpha;  
26 -  
27 - BitmapFactory.Options options = new BitmapFactory.Options();  
28 - options.inJustDecodeBounds = true;  
29 - options.inSampleSize = 1;  
30 -  
31 - BitmapFactory.decodeStream(srcImg.open(), null, options);  
32 - this.srcWidth = options.outWidth;  
33 - this.srcHeight = options.outHeight;  
34 - }  
35 -  
36 - private int computeSize() {  
37 - srcWidth = srcWidth % 2 == 1 ? srcWidth + 1 : srcWidth;  
38 - srcHeight = srcHeight % 2 == 1 ? srcHeight + 1 : srcHeight;  
39 -  
40 - int longSide = Math.max(srcWidth, srcHeight);  
41 - int shortSide = Math.min(srcWidth, srcHeight);  
42 -  
43 - float scale = ((float) shortSide / longSide);  
44 - if (scale <= 1 && scale > 0.5625) {  
45 - if (longSide < 1664) {  
46 - return 1;  
47 - } else if (longSide < 4990) {  
48 - return 2;  
49 - } else if (longSide > 4990 && longSide < 10240) {  
50 - return 4;  
51 - } else {  
52 - return longSide / 1280 == 0 ? 1 : longSide / 1280;  
53 - }  
54 - } else if (scale <= 0.5625 && scale > 0.5) {  
55 - return longSide / 1280 == 0 ? 1 : longSide / 1280;  
56 - } else {  
57 - //TODO 增加最大像素限制  
58 - return Math.max((int) Math.ceil(longSide / (1280.0 / scale)), 1 + (longSide / 20480));  
59 - }  
60 - }  
61 -  
62 - private Bitmap rotatingImage(Bitmap bitmap, int angle) {  
63 - Matrix matrix = new Matrix();  
64 -  
65 - matrix.postRotate(angle);  
66 -  
67 - return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);  
68 - }  
69 -  
70 - File compress() throws IOException {  
71 - BitmapFactory.Options options = new BitmapFactory.Options();  
72 - options.inSampleSize = computeSize();  
73 -  
74 - Bitmap tagBitmap = BitmapFactory.decodeStream(srcImg.open(), null, options);  
75 - ByteArrayOutputStream stream = new ByteArrayOutputStream();  
76 -  
77 - if (Checker.SINGLE.isJPG(srcImg.open())) {  
78 - tagBitmap = rotatingImage(tagBitmap, Checker.SINGLE.getOrientation(srcImg.open()));  
79 - }  
80 - tagBitmap.compress(focusAlpha ? Bitmap.CompressFormat.PNG : Bitmap.CompressFormat.JPEG, 60, stream);  
81 - tagBitmap.recycle();  
82 -  
83 - FileOutputStream fos = new FileOutputStream(tagImg);  
84 - fos.write(stream.toByteArray());  
85 - fos.flush();  
86 - fos.close();  
87 - stream.close();  
88 -  
89 - return tagImg;  
90 - }  
91 -}  
92 \ No newline at end of file 0 \ No newline at end of file
core/base/src/main/java/top/zibin/luban/InputStreamProvider.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -import java.io.IOException;  
4 -import java.io.InputStream;  
5 -  
6 -/**  
7 - * 通过此接口获取输入流,以兼容文件、FileProvider方式获取到的图片  
8 - * <presenter>  
9 - * Get the input stream through this interface, and obtain the picture using compatible files and FileProvider  
10 - */  
11 -public interface InputStreamProvider {  
12 -  
13 - InputStream open() throws IOException;  
14 -  
15 - String getPath();  
16 -}  
core/base/src/main/java/top/zibin/luban/Luban.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -import android.content.Context;  
4 -import android.net.Uri;  
5 -import android.os.AsyncTask;  
6 -import android.os.Handler;  
7 -import android.os.Looper;  
8 -import android.os.Message;  
9 -import android.text.TextUtils;  
10 -import android.util.Log;  
11 -  
12 -import java.io.File;  
13 -import java.io.FileInputStream;  
14 -import java.io.IOException;  
15 -import java.io.InputStream;  
16 -import java.util.ArrayList;  
17 -import java.util.Iterator;  
18 -import java.util.List;  
19 -  
20 -@SuppressWarnings("unused")  
21 -public class Luban implements Handler.Callback {  
22 - private static final String TAG = "Luban";  
23 - private static final String DEFAULT_DISK_CACHE_DIR = "luban_disk_cache";  
24 -  
25 - private static final int MSG_COMPRESS_SUCCESS = 0;  
26 - private static final int MSG_COMPRESS_START = 1;  
27 - private static final int MSG_COMPRESS_ERROR = 2;  
28 -  
29 - private String mTargetDir;  
30 - private boolean focusAlpha;  
31 - private int mLeastCompressSize;  
32 - private OnRenameListener mRenameListener;  
33 - private OnCompressListener mCompressListener;  
34 - private CompressionPredicate mCompressionPredicate;  
35 - private List<InputStreamProvider> mStreamProviders;  
36 -  
37 - private Handler mHandler;  
38 -  
39 - private Luban(Builder builder) {  
40 - this.mTargetDir = builder.mTargetDir;  
41 - this.mRenameListener = builder.mRenameListener;  
42 - this.mStreamProviders = builder.mStreamProviders;  
43 - this.mCompressListener = builder.mCompressListener;  
44 - this.mLeastCompressSize = builder.mLeastCompressSize;  
45 - this.mCompressionPredicate = builder.mCompressionPredicate;  
46 - mHandler = new Handler(Looper.getMainLooper(), this);  
47 - }  
48 -  
49 - public static Builder with(Context context) {  
50 - return new Builder(context);  
51 - }  
52 -  
53 - /**  
54 - * Returns a file with a cache image name in the private cache directory.  
55 - *  
56 - * @param context A context.  
57 - */  
58 - private File getImageCacheFile(Context context, String suffix) {  
59 - if (TextUtils.isEmpty(mTargetDir)) {  
60 - mTargetDir = getImageCacheDir(context).getAbsolutePath();  
61 - }  
62 -  
63 - String cacheBuilder = mTargetDir + "/" +  
64 - System.currentTimeMillis() +  
65 - (int) (Math.random() * 1000) +  
66 - (TextUtils.isEmpty(suffix) ? ".jpg" : suffix);  
67 -  
68 - return new File(cacheBuilder);  
69 - }  
70 -  
71 - private File getImageCustomFile(Context context, String filename) {  
72 - if (TextUtils.isEmpty(mTargetDir)) {  
73 - mTargetDir = getImageCacheDir(context).getAbsolutePath();  
74 - }  
75 -  
76 - String cacheBuilder = mTargetDir + "/" + filename;  
77 -  
78 - return new File(cacheBuilder);  
79 - }  
80 -  
81 - /**  
82 - * Returns a directory with a default name in the private cache directory of the application to  
83 - * use to store retrieved audio.  
84 - *  
85 - * @param context A context.  
86 - * @see #getImageCacheDir(Context, String)  
87 - */  
88 - private File getImageCacheDir(Context context) {  
89 - return getImageCacheDir(context, DEFAULT_DISK_CACHE_DIR);  
90 - }  
91 -  
92 - /**  
93 - * Returns a directory with the given name in the private cache directory of the application to  
94 - * use to store retrieved media and thumbnails.  
95 - *  
96 - * @param context A context.  
97 - * @param cacheName The name of the subdirectory in which to store the cache.  
98 - * @see #getImageCacheDir(Context)  
99 - */  
100 - private static File getImageCacheDir(Context context, String cacheName) {  
101 - File cacheDir = context.getExternalCacheDir();  
102 - if (cacheDir != null) {  
103 - File result = new File(cacheDir, cacheName);  
104 - if (!result.mkdirs() && (!result.exists() || !result.isDirectory())) {  
105 - // File wasn't able to create a directory, or the result exists but not a directory  
106 - return null;  
107 - }  
108 - return result;  
109 - }  
110 - if (Log.isLoggable(TAG, Log.ERROR)) {  
111 - Log.e(TAG, "default disk cache dir is null");  
112 - }  
113 - return null;  
114 - }  
115 -  
116 - /**  
117 - * start asynchronous compress thread  
118 - */  
119 - private void launch(final Context context) {  
120 - if (mStreamProviders == null || mStreamProviders.size() == 0 && mCompressListener != null) {  
121 - mCompressListener.onError(new NullPointerException("image file cannot be null"));  
122 - }  
123 -  
124 - Iterator<InputStreamProvider> iterator = mStreamProviders.iterator();  
125 -  
126 - while (iterator.hasNext()) {  
127 - final InputStreamProvider path = iterator.next();  
128 -  
129 - AsyncTask.SERIAL_EXECUTOR.execute(new Runnable() {  
130 - @Override  
131 - public void run() {  
132 - try {  
133 - mHandler.sendMessage(mHandler.obtainMessage(MSG_COMPRESS_START));  
134 -  
135 - File result = compress(context, path);  
136 -  
137 - mHandler.sendMessage(mHandler.obtainMessage(MSG_COMPRESS_SUCCESS, result));  
138 - } catch (IOException e) {  
139 - mHandler.sendMessage(mHandler.obtainMessage(MSG_COMPRESS_ERROR, e));  
140 - }  
141 - }  
142 - });  
143 -  
144 - iterator.remove();  
145 - }  
146 - }  
147 -  
148 - /**  
149 - * start compress and return the file  
150 - */  
151 - private File get(InputStreamProvider input, Context context) throws IOException {  
152 - return new Engine(input, getImageCacheFile(context, Checker.SINGLE.extSuffix(input)), focusAlpha).compress();  
153 - }  
154 -  
155 - private List<File> get(Context context) throws IOException {  
156 - List<File> results = new ArrayList<>();  
157 - Iterator<InputStreamProvider> iterator = mStreamProviders.iterator();  
158 -  
159 - while (iterator.hasNext()) {  
160 - results.add(compress(context, iterator.next()));  
161 - iterator.remove();  
162 - }  
163 -  
164 - return results;  
165 - }  
166 -  
167 - private File compress(Context context, InputStreamProvider path) throws IOException {  
168 - File result;  
169 -  
170 - File outFile = getImageCacheFile(context, Checker.SINGLE.extSuffix(path));  
171 -  
172 - if (mRenameListener != null) {  
173 - String filename = mRenameListener.rename(path.getPath());  
174 - outFile = getImageCustomFile(context, filename);  
175 - }  
176 -  
177 - if (mCompressionPredicate != null) {  
178 - if (mCompressionPredicate.apply(path.getPath())  
179 - && Checker.SINGLE.needCompress(mLeastCompressSize, path.getPath())) {  
180 - result = new Engine(path, outFile, focusAlpha).compress();  
181 - } else {  
182 - result = new File(path.getPath());  
183 - }  
184 - } else {  
185 - result = Checker.SINGLE.needCompress(mLeastCompressSize, path.getPath()) ?  
186 - new Engine(path, outFile, focusAlpha).compress() :  
187 - new File(path.getPath());  
188 - }  
189 -  
190 - return result;  
191 - }  
192 -  
193 - @Override  
194 - public boolean handleMessage(Message msg) {  
195 - if (mCompressListener == null) return false;  
196 -  
197 - switch (msg.what) {  
198 - case MSG_COMPRESS_START:  
199 - mCompressListener.onStart();  
200 - break;  
201 - case MSG_COMPRESS_SUCCESS:  
202 - mCompressListener.onSuccess((File) msg.obj);  
203 - break;  
204 - case MSG_COMPRESS_ERROR:  
205 - mCompressListener.onError((Throwable) msg.obj);  
206 - break;  
207 - }  
208 - return false;  
209 - }  
210 -  
211 - public static class Builder {  
212 - private Context context;  
213 - private String mTargetDir;  
214 - private boolean focusAlpha;  
215 - private int mLeastCompressSize = 100;  
216 - private OnRenameListener mRenameListener;  
217 - private OnCompressListener mCompressListener;  
218 - private CompressionPredicate mCompressionPredicate;  
219 - private List<InputStreamProvider> mStreamProviders;  
220 -  
221 - Builder(Context context) {  
222 - this.context = context;  
223 - this.mStreamProviders = new ArrayList<>();  
224 - }  
225 -  
226 - private Luban build() {  
227 - return new Luban(this);  
228 - }  
229 -  
230 - public Builder load(InputStreamProvider inputStreamProvider) {  
231 - mStreamProviders.add(inputStreamProvider);  
232 - return this;  
233 - }  
234 -  
235 - public Builder load(final File file) {  
236 - mStreamProviders.add(new InputStreamProvider() {  
237 - @Override  
238 - public InputStream open() throws IOException {  
239 - return new FileInputStream(file);  
240 - }  
241 -  
242 - @Override  
243 - public String getPath() {  
244 - return file.getAbsolutePath();  
245 - }  
246 - });  
247 - return this;  
248 - }  
249 -  
250 - public Builder load(final String string) {  
251 - mStreamProviders.add(new InputStreamProvider() {  
252 - @Override  
253 - public InputStream open() throws IOException {  
254 - return new FileInputStream(string);  
255 - }  
256 -  
257 - @Override  
258 - public String getPath() {  
259 - return string;  
260 - }  
261 - });  
262 - return this;  
263 - }  
264 -  
265 - public <T> Builder load(List<T> list) {  
266 - for (T src : list) {  
267 - if (src instanceof String) {  
268 - load((String) src);  
269 - } else if (src instanceof File) {  
270 - load((File) src);  
271 - } else if (src instanceof Uri) {  
272 - load((Uri) src);  
273 - } else {  
274 - throw new IllegalArgumentException("Incoming data type exception, it must be String, File, Uri or Bitmap");  
275 - }  
276 - }  
277 - return this;  
278 - }  
279 -  
280 - public Builder load(final Uri uri) {  
281 - mStreamProviders.add(new InputStreamProvider() {  
282 - @Override  
283 - public InputStream open() throws IOException {  
284 - return context.getContentResolver().openInputStream(uri);  
285 - }  
286 -  
287 - @Override  
288 - public String getPath() {  
289 - return uri.getPath();  
290 - }  
291 - });  
292 - return this;  
293 - }  
294 -  
295 - public Builder putGear(int gear) {  
296 - return this;  
297 - }  
298 -  
299 - public Builder setRenameListener(OnRenameListener listener) {  
300 - this.mRenameListener = listener;  
301 - return this;  
302 - }  
303 -  
304 - public Builder setCompressListener(OnCompressListener listener) {  
305 - this.mCompressListener = listener;  
306 - return this;  
307 - }  
308 -  
309 - public Builder setTargetDir(String targetDir) {  
310 - this.mTargetDir = targetDir;  
311 - return this;  
312 - }  
313 -  
314 - /**  
315 - * Do I need to keep the image's alpha channel  
316 - *  
317 - * @param focusAlpha <presenter> true - to keep alpha channel, the compress speed will be slow. </presenter>  
318 - * <presenter> false - don't keep alpha channel, it might have a black background.</presenter>  
319 - */  
320 - public Builder setFocusAlpha(boolean focusAlpha) {  
321 - this.focusAlpha = focusAlpha;  
322 - return this;  
323 - }  
324 -  
325 - /**  
326 - * do not compress when the origin image file size less than one value  
327 - *  
328 - * @param size the value of file size, unit KB, default 100K  
329 - */  
330 - public Builder ignoreBy(int size) {  
331 - this.mLeastCompressSize = size;  
332 - return this;  
333 - }  
334 -  
335 - /**  
336 - * do compress image when return value was true, otherwise, do not compress the image file  
337 - *  
338 - * @param compressionPredicate A predicate callback that returns true or false for the given input path should be compressed.  
339 - */  
340 - public Builder filter(CompressionPredicate compressionPredicate) {  
341 - this.mCompressionPredicate = compressionPredicate;  
342 - return this;  
343 - }  
344 -  
345 -  
346 - /**  
347 - * begin compress image with asynchronous  
348 - */  
349 - public void launch() {  
350 - build().launch(context);  
351 - }  
352 -  
353 - public File get(final String path) throws IOException {  
354 - return build().get(new InputStreamProvider() {  
355 - @Override  
356 - public InputStream open() throws IOException {  
357 - return new FileInputStream(path);  
358 - }  
359 -  
360 - @Override  
361 - public String getPath() {  
362 - return path;  
363 - }  
364 - }, context);  
365 - }  
366 -  
367 - /**  
368 - * begin compress image with synchronize  
369 - *  
370 - * @return the thumb image file list  
371 - */  
372 - public List<File> get() throws IOException {  
373 - return build().get(context);  
374 - }  
375 - }  
376 -}  
377 \ No newline at end of file 0 \ No newline at end of file
core/base/src/main/java/top/zibin/luban/OnCompressListener.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -import java.io.File;  
4 -  
5 -public interface OnCompressListener {  
6 -  
7 - /**  
8 - * Fired when the compression is started, override to handle in your own code  
9 - */  
10 - void onStart();  
11 -  
12 - /**  
13 - * Fired when a compression returns successfully, override to handle in your own code  
14 - */  
15 - void onSuccess(File file);  
16 -  
17 - /**  
18 - * Fired when a compression fails to complete, override to handle in your own code  
19 - */  
20 - void onError(Throwable e);  
21 -}  
core/base/src/main/java/top/zibin/luban/OnRenameListener.java deleted 100644 → 0
1 -package top.zibin.luban;  
2 -  
3 -/**  
4 - * Author: zibin  
5 - * Datetime: 2018/5/18  
6 - * <presenter>  
7 - * 提供修改压缩图片命名接口  
8 - * <presenter>  
9 - * A functional interface (callback) that used to rename the file after compress.  
10 - */  
11 -public interface OnRenameListener {  
12 -  
13 - /**  
14 - * 压缩前调用该方法用于修改压缩后文件名  
15 - * <presenter>  
16 - * Call before compression begins.  
17 - *  
18 - * @param filePath 传入文件路径/ file path  
19 - * @return 返回重命名后的字符串/ file name  
20 - */  
21 - String rename(String filePath);  
22 -}