Skip to content

Commit

Permalink
update views
Browse files Browse the repository at this point in the history
  • Loading branch information
REBOOTERS authored and gejiaheng committed May 2, 2018
1 parent 4e8f59c commit 039206e
Show file tree
Hide file tree
Showing 21 changed files with 250 additions and 92 deletions.
12 changes: 9 additions & 3 deletions matisse/src/main/java/com/zhihu/matisse/SelectionCreator.java
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,19 @@ public SelectionCreator capture(boolean enable) {
* @param enable Whether to enable original photo or not
* @return {@link SelectionCreator} for fluent API.
*/
public SelectionCreator originalable(boolean enable){
public SelectionCreator originalEnable(boolean enable){
mSelectionSpec.originalable=enable;
return this;
}


public SelectionCreator originalMaxSize(int size){
/**
*
* Maximum original size,the unit is MB. Only useful when {link@originalEnable} set true
*
* @param size Maximum original size. Default value is Integer.MAX_VALUE
* @return {@link SelectionCreator} for fluent API.
*/
public SelectionCreator maxOriginalSize(int size){
mSelectionSpec.originalMaxSize =size;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public void loadImage(Context context, int resizeX, int resizeY, ImageView image
.load(uri)
.override(resizeX, resizeY)
.priority(Priority.HIGH)
.fitCenter()
.into(imageView);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mCheckView.setChecked(mSelectedCollection.isSelected(item));
}
updateSize(item);

mOriginalEnable = getIntent().getBooleanExtra(EXTRA_RESULT_ORIGINAL_ENABLE, false);

}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.zhihu.matisse.R;
Expand All @@ -31,7 +33,9 @@
import com.zhihu.matisse.internal.entity.SelectionSpec;
import com.zhihu.matisse.internal.model.SelectedItemCollection;
import com.zhihu.matisse.internal.ui.adapter.PreviewPagerAdapter;
import com.zhihu.matisse.internal.ui.widget.CheckRadioView;
import com.zhihu.matisse.internal.ui.widget.CheckView;
import com.zhihu.matisse.internal.ui.widget.IncapableDialog;
import com.zhihu.matisse.internal.utils.PhotoMetadataUtils;
import com.zhihu.matisse.internal.utils.Platform;

Expand All @@ -41,6 +45,7 @@ public abstract class BasePreviewActivity extends AppCompatActivity implements V
public static final String EXTRA_DEFAULT_BUNDLE = "extra_default_bundle";
public static final String EXTRA_RESULT_BUNDLE = "extra_result_bundle";
public static final String EXTRA_RESULT_APPLY = "extra_result_apply";
public static final String EXTRA_RESULT_ORIGINAL_ENABLE = "extra_result_original_enable";

protected final SelectedItemCollection mSelectedCollection = new SelectedItemCollection(this);
protected SelectionSpec mSpec;
Expand All @@ -55,6 +60,10 @@ public abstract class BasePreviewActivity extends AppCompatActivity implements V

protected int mPreviousPos = -1;

private LinearLayout mOriginalLayout;
private CheckRadioView mOriginal;
protected boolean mOriginalEnable;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setTheme(SelectionSpec.getInstance().themeId);
Expand All @@ -75,6 +84,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mSelectedCollection.onCreate(savedInstanceState);
}

mOriginalEnable = getIntent().getBooleanExtra(EXTRA_RESULT_ORIGINAL_ENABLE, false);
mButtonBack = (TextView) findViewById(R.id.button_back);
mButtonApply = (TextView) findViewById(R.id.button_apply);
mSize = (TextView) findViewById(R.id.size);
Expand Down Expand Up @@ -118,6 +128,36 @@ public void onClick(View v) {
}
}
});


mOriginalLayout = findViewById(R.id.originalLayout);
mOriginal = findViewById(R.id.original);
mOriginalLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

int count = countOverMaxSize();
if (count > 0) {
IncapableDialog incapableDialog = IncapableDialog.newInstance("",
"有"+count +"张照片大于" + mSpec.originalMaxSize + "M\n无法上传,将取消勾选原图");
incapableDialog.show(getSupportFragmentManager(),
IncapableDialog.class.getName());
return;
}

mOriginalEnable = !mOriginalEnable;
mOriginal.setChecked(mOriginalEnable);
if(!mOriginalEnable){
mOriginal.setColor(Color.WHITE);
}


if(mSpec.onCheckedListener!=null){
mSpec.onCheckedListener.onCheck(mOriginalEnable);
}
}
});

updateApplyButton();
}

Expand Down Expand Up @@ -194,6 +234,53 @@ private void updateApplyButton() {
mButtonApply.setEnabled(true);
mButtonApply.setText(getString(R.string.button_apply, selectedCount));
}

if (mSpec.originalable) {
mOriginalLayout.setVisibility(View.VISIBLE);
updateOriginalState();
} else {
mOriginalLayout.setVisibility(View.INVISIBLE);
}
}


private void updateOriginalState() {
mOriginal.setChecked(mOriginalEnable);
if(!mOriginalEnable){
mOriginal.setColor(Color.WHITE);
}

int selectedCount = mSelectedCollection.count();
if (selectedCount == 0) {
// mOriginal.setChecked(false);
mOriginalEnable = false;
} else if (countOverMaxSize() > 0) {

if (mOriginalEnable) {
IncapableDialog incapableDialog = IncapableDialog.newInstance("",
"该照片大于" + mSpec.originalMaxSize + "M,无法上传将取消勾选原图");
incapableDialog.show(getSupportFragmentManager(),
IncapableDialog.class.getName());

mOriginal.setChecked(false);
mOriginal.setColor(Color.WHITE);
mOriginalEnable = false;
}
}
}


private int countOverMaxSize() {
int count = 0;
int selectedCount = mSelectedCollection.count();
for (int i = 0; i < selectedCount; i++) {
Item item = mSelectedCollection.asList().get(i);
float size = PhotoMetadataUtils.getSizeInMB(item.size);
if (size > mSpec.originalMaxSize) {
count++;
}
}
return count;
}

protected void updateSize(Item item) {
Expand All @@ -209,6 +296,7 @@ protected void sendBackResult(boolean apply) {
Intent intent = new Intent();
intent.putExtra(EXTRA_RESULT_BUNDLE, mSelectedCollection.getDataWithBundle());
intent.putExtra(EXTRA_RESULT_APPLY, apply);
intent.putExtra(EXTRA_RESULT_ORIGINAL_ENABLE,mOriginalEnable);
setResult(Activity.RESULT_OK, intent);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.zhihu.matisse.internal.ui.widget;

import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

import com.zhihu.matisse.R;

public class CheckRadioView extends AppCompatImageView {

private Drawable mDrawable;

private int selectedColor;
private int unSelectedColor;

public CheckRadioView(Context context) {
super(context);
init();
}



public CheckRadioView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

private void init() {
selectedColor = ResourcesCompat.getColor(
getResources(), R.color.zhihu_item_checkCircle_backgroundColor,
getContext().getTheme());
unSelectedColor = ResourcesCompat.getColor(
getResources(), R.color.zhihu_check_original_radio_disable,
getContext().getTheme());
setChecked(false);
}

public void setChecked(boolean enable){
if(enable){
setImageResource(R.drawable.ic_preview_radio_on);
mDrawable=getDrawable();
mDrawable.setColorFilter(selectedColor, PorterDuff.Mode.SRC_IN);
}else {
setImageResource(R.drawable.ic_preview_radio_off);
mDrawable=getDrawable();
mDrawable.setColorFilter(unSelectedColor, PorterDuff.Mode.SRC_IN);
}
}


public void setColor(int color){
if (mDrawable == null) {
mDrawable=getDrawable();
}
mDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
* when original is enabled , callback immediately when user check or uncheck original.
*/
public interface OnCheckedListener {
void onCheck();
void onCheck(boolean isChecked);
}
38 changes: 15 additions & 23 deletions matisse/src/main/java/com/zhihu/matisse/ui/MatisseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

Expand All @@ -51,6 +50,7 @@
import com.zhihu.matisse.internal.ui.adapter.AlbumMediaAdapter;
import com.zhihu.matisse.internal.ui.adapter.AlbumsAdapter;
import com.zhihu.matisse.internal.ui.widget.AlbumsSpinner;
import com.zhihu.matisse.internal.ui.widget.CheckRadioView;
import com.zhihu.matisse.internal.ui.widget.IncapableDialog;
import com.zhihu.matisse.internal.utils.MediaStoreCompat;
import com.zhihu.matisse.internal.utils.PathUtils;
Expand Down Expand Up @@ -86,7 +86,7 @@ public class MatisseActivity extends AppCompatActivity implements
private View mEmptyView;

private LinearLayout mOriginalLayout;
private ImageView mOriginal;
private CheckRadioView mOriginal;
private boolean mOriginalEnable;

@Override
Expand Down Expand Up @@ -128,7 +128,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mEmptyView = findViewById(R.id.empty_view);
mOriginalLayout = findViewById(R.id.originalLayout);
mOriginal = findViewById(R.id.original);
mOriginal.setOnClickListener(this);
mOriginalLayout.setOnClickListener(this);

mSelectedCollection.onCreate(savedInstanceState);
updateBottomToolbar();
Expand Down Expand Up @@ -181,6 +181,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_PREVIEW) {
Bundle resultBundle = data.getBundleExtra(BasePreviewActivity.EXTRA_RESULT_BUNDLE);
ArrayList<Item> selected = resultBundle.getParcelableArrayList(SelectedItemCollection.STATE_SELECTION);
mOriginalEnable = data.getBooleanExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE,false);
int collectionType = resultBundle.getInt(SelectedItemCollection.STATE_COLLECTION_TYPE,
SelectedItemCollection.COLLECTION_UNDEFINED);
if (data.getBooleanExtra(BasePreviewActivity.EXTRA_RESULT_APPLY, false)) {
Expand Down Expand Up @@ -227,19 +228,20 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}

private void updateBottomToolbar() {

int selectedCount = mSelectedCollection.count();
if (selectedCount == 0) {
mButtonPreview.setEnabled(false);
mButtonApply.setEnabled(false);
mButtonApply.setText(getString(R.string.button_apply_default));
mButtonApply.setText(getString(R.string.button_sure_default));
} else if (selectedCount == 1 && mSpec.singleSelectionModeEnabled()) {
mButtonPreview.setEnabled(true);
mButtonApply.setText(R.string.button_apply_default);
mButtonApply.setEnabled(true);
} else {
mButtonPreview.setEnabled(true);
mButtonApply.setEnabled(true);
mButtonApply.setText(getString(R.string.button_apply, selectedCount));
mButtonApply.setText(getString(R.string.button_sure, selectedCount));
}


Expand All @@ -255,13 +257,11 @@ private void updateBottomToolbar() {


private void updateOriginalState() {
mOriginal.setChecked(mOriginalEnable);
int selectedCount = mSelectedCollection.count();
if (selectedCount == 0) {
// mOriginal.setChecked(false);
if(mSpec.themeId==R.style.Matisse_Zhihu){

}
mOriginalEnable = false;
// mOriginalEnable = false;
} else if (countOverMaxSize() > 0) {

if (mOriginalEnable) {
Expand All @@ -270,7 +270,7 @@ private void updateOriginalState() {
incapableDialog.show(getSupportFragmentManager(),
IncapableDialog.class.getName());

// mOriginal.setChecked(false);
mOriginal.setChecked(false);
mOriginalEnable = false;
}
}
Expand All @@ -295,6 +295,7 @@ public void onClick(View v) {
if (v.getId() == R.id.button_preview) {
Intent intent = new Intent(this, SelectedPreviewActivity.class);
intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, mSelectedCollection.getDataWithBundle());
intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE,mOriginalEnable);
startActivityForResult(intent, REQUEST_CODE_PREVIEW);
} else if (v.getId() == R.id.button_apply) {
Intent result = new Intent();
Expand All @@ -305,7 +306,7 @@ public void onClick(View v) {
result.putExtra(EXTRA_RESULT_ORIGINAL_ENABLE, mOriginalEnable);
setResult(RESULT_OK, result);
finish();
} else if (v.getId() == R.id.original) {
} else if (v.getId() == R.id.originalLayout) {
int count = countOverMaxSize();
if (count > 0) {
IncapableDialog incapableDialog = IncapableDialog.newInstance("",
Expand All @@ -316,20 +317,10 @@ public void onClick(View v) {
}

mOriginalEnable = !mOriginalEnable;
// mOriginal.setChecked(mOriginalEnable);

if(mOriginalEnable){
if(mSpec.themeId==R.style.Matisse_Zhihu){
mOriginal.setImageResource(R.drawable.ic_imagepicker_radio_on);
}else {
mOriginal.setImageResource(R.drawable.ic_imagepicker_radio_on_night);
}
}else {
mOriginal.setImageResource(R.drawable.ic_preview_radio_off);
}
mOriginal.setChecked(mOriginalEnable);

if(mSpec.onCheckedListener!=null){
mSpec.onCheckedListener.onCheck();
mSpec.onCheckedListener.onCheck(mOriginalEnable);
}
}
}
Expand Down Expand Up @@ -408,6 +399,7 @@ public void onMediaClick(Album album, Item item, int adapterPosition) {
intent.putExtra(AlbumPreviewActivity.EXTRA_ALBUM, album);
intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, item);
intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, mSelectedCollection.getDataWithBundle());
intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE,mOriginalEnable);
startActivityForResult(intent, REQUEST_CODE_PREVIEW);
}

Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit 039206e

Please sign in to comment.