15 | * Info : DetailViewPagerAdapter.java
16 | * 已经被{@link ViewPagerAdapter} 取代
17 | */
18 | @Deprecated
19 | public class DetailViewPagerAdapter extends FragmentStatePagerAdapter{
20 |
21 | private List
12 | * Info : ViewPager的万能适配器
13 | */
14 | public abstract class ViewPagerAdapter
6 | * Info : BasePresenter.java
7 | */
8 | public interface BasePresenter {
9 |
10 | void start();
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/base/BaseView.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.base;
2 |
3 | /**
4 | * Created by Houxy on 2016/11/27.
5 | *
6 | * Info : BaseView.java
7 | */
8 | public interface BaseView {
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/base/BaseViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.base;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import com.houxy.days.base.i.OnItemClickListener;
10 | import com.houxy.days.base.i.OnItemLongClickListener;
11 |
12 | import butterknife.ButterKnife;
13 |
14 | /**
15 | * Created by Houxy on 2016/9/12.
16 | *
17 | * Info : holder的基类
18 | */
19 | public class BaseViewHolder
10 | * Info : StatusBarView.java
11 | */
12 | public class StatusBarView extends View {
13 | public StatusBarView(Context context, AttributeSet attrs) {
14 | super(context, attrs);
15 | }
16 |
17 | public StatusBarView(Context context) {
18 | super(context);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/Utils.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common;
2 |
3 | import android.content.Context;
4 | import android.graphics.Point;
5 | import android.view.Display;
6 | import android.view.WindowManager;
7 | import android.view.inputmethod.InputMethodManager;
8 | import android.widget.EditText;
9 |
10 | import com.houxy.days.DaysApplication;
11 |
12 | import java.util.regex.Matcher;
13 | import java.util.regex.Pattern;
14 |
15 | /**
16 | * Created by Houxy on 2016/9/3.
17 | */
18 | public class Utils {
19 |
20 | public static void showSoftInput(){
21 | InputMethodManager inputMethodManager = (InputMethodManager)DaysApplication.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
22 | inputMethodManager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
23 | }
24 |
25 | public static void hideSoftInput(EditText editText){
26 | InputMethodManager imm = (InputMethodManager) DaysApplication.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
27 | //1.得到InputMethodManager对象
28 | //2.调用hideSoftInputFromWindow方法隐藏软键盘
29 | imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); //强制隐藏键盘
30 | }
31 |
32 |
33 | public static String replaceImgHtml(String html) {
34 | String pattern = "
8 | * Info : SimpleSubscriber.java
9 | */
10 | public abstract class SimpleSubscriber
13 | * Info : ActivityComponent.java
14 | */
15 | @PerActivity
16 | @Component(modules = ActivityModule.class)
17 | public interface ActivityComponent {
18 |
19 | Activity activity();
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/di/component/AppComponent.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.di.component;
2 |
3 | import android.content.Context;
4 |
5 | import com.houxy.days.di.module.AppModule;
6 |
7 | import javax.inject.Singleton;
8 |
9 | import dagger.Component;
10 |
11 | /**
12 | * Created by Houxy on 2016/11/28.
13 | *
14 | * Info : AppComponent.java
15 | */
16 | @Singleton
17 | @Component(modules = AppModule.class)
18 | public interface AppComponent {
19 |
20 | //要想依赖此组件的component获取到context,必须显示的暴露
21 | Context context();
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/di/module/ActivityModule.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.di.module;
2 |
3 | import android.app.Activity;
4 |
5 | import com.houxy.days.di.scope.PerActivity;
6 |
7 | import dagger.Module;
8 | import dagger.Provides;
9 |
10 | /**
11 | * Created by Houxy on 2016/11/28.
12 | *
13 | * Info : ActivityModule.java
14 | */
15 | @Module
16 | public class ActivityModule {
17 |
18 | private Activity mActivity;
19 | public ActivityModule(Activity activity){
20 | this.mActivity = activity;
21 | }
22 |
23 | @Provides @PerActivity
24 | public Activity provideActivity(){
25 | return mActivity;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/di/module/AppModule.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.di.module;
2 |
3 | import android.content.Context;
4 |
5 | import javax.inject.Singleton;
6 |
7 | import dagger.Module;
8 | import dagger.Provides;
9 |
10 | /**
11 | * Created by Houxy on 2016/11/27.
12 | *
13 | * Info : AppModule.java
14 | */
15 |
16 | @Module
17 | public final class AppModule {
18 |
19 | private final Context mContext;
20 |
21 | public AppModule(Context context){
22 | mContext = context;
23 | }
24 |
25 | @Provides @Singleton
26 | Context provideContext(){ return mContext; }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/di/scope/PerActivity.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.di.scope;
2 |
3 | import java.lang.annotation.Documented;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 |
7 | import javax.inject.Scope;
8 |
9 | /**
10 | * Created by Houxy on 2016/11/28.
11 | *
12 | * Info : PerActivity.java
13 | */
14 | @Documented
15 | @Scope
16 | @Retention(RetentionPolicy.RUNTIME)
17 | public @interface PerActivity {
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/di/scope/PerFragment.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.di.scope;
2 |
3 | import java.lang.annotation.Documented;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 |
7 | import javax.inject.Scope;
8 |
9 | /**
10 | * Created by Houxy on 2016/11/27.
11 | *
12 | * Info : PerFragment.java
13 | */
14 |
15 | @Documented
16 | @Scope
17 | @Retention(RetentionPolicy.RUNTIME)
18 | public @interface PerFragment {
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/diary/DiaryContract.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.diary;
2 |
3 | import com.houxy.days.base.BasePresenter;
4 | import com.houxy.days.base.BaseView;
5 | import com.houxy.days.bean.Diary;
6 |
7 | import java.util.ArrayList;
8 |
9 | /**
10 | * Created by Houxy on 2016/11/28.
11 | *
12 | * Info : DiaryContract.java
13 | */
14 | public interface DiaryContract {
15 |
16 | interface View extends BaseView{
17 |
18 | void showEmptyView(boolean bShow);
19 |
20 | void setRefreshing(boolean bShow);
21 |
22 | void showDiaries(ArrayList
14 | * Info : DiaryPresenter.java
15 | */
16 | public class DiaryPresenter implements DiaryContract.Presenter{
17 |
18 |
19 | private DiaryContract.View mView;
20 |
21 | @Inject
22 | public DiaryPresenter(DiaryContract.View view){
23 | this.mView = view;
24 | }
25 |
26 | @Override
27 | public void start() {
28 | mView.setRefreshing(true);
29 | }
30 |
31 | @Override
32 | @SuppressWarnings("unchecked")
33 | public void loadDiaries() {
34 | if (null != ACache.getDefault().getAsObject(C.DIARY_CACHE)) {
35 | ArrayList
12 | * Info : DiaryComponent.java
13 | */
14 | @PerFragment
15 | @Component(dependencies = ActivityComponent.class,modules = DiaryModule.class)
16 | public interface DiaryComponent {
17 |
18 | void inject(DiaryFragment fragment);
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/diary/di/DiaryModule.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.diary.di;
2 |
3 | import com.houxy.days.modules.diary.DiaryContract;
4 |
5 | import dagger.Module;
6 | import dagger.Provides;
7 |
8 | /**
9 | * Created by Houxy on 2016/11/28.
10 | *
11 | * Info : DiaryModule.java
12 | */
13 |
14 | @Module
15 | public class DiaryModule {
16 |
17 | private DiaryContract.View mView;
18 |
19 | public DiaryModule(DiaryContract.View view){
20 | mView = view;
21 | }
22 |
23 | @Provides
24 | DiaryContract.View provideDiaryContractView(){
25 | return mView;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/login/RegisterActivity.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.login;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.design.widget.TextInputEditText;
6 | import android.text.TextUtils;
7 | import android.util.Log;
8 | import android.view.View;
9 | import android.widget.Button;
10 |
11 | import com.houxy.days.R;
12 | import com.houxy.days.base.ToolbarActivity;
13 | import com.houxy.days.common.utils.ToastUtils;
14 | import com.houxy.days.bean.User;
15 |
16 | import butterknife.Bind;
17 | import butterknife.ButterKnife;
18 | import cn.bmob.v3.datatype.BmobRelation;
19 | import rx.Subscriber;
20 |
21 | /**
22 | * Created by Houxy on 2016/9/5.
23 | */
24 | public class RegisterActivity extends ToolbarActivity {
25 |
26 | @Bind(R.id.username_et)
27 | TextInputEditText usernameEt;
28 | @Bind(R.id.password_et)
29 | TextInputEditText passwordEt;
30 | @Bind(R.id.confirm_password_et)
31 | TextInputEditText confirmPasswordEt;
32 | @Bind(R.id.register_btn)
33 | Button registerBtn;
34 |
35 | @Override
36 | protected int provideContentViewId() {
37 | return R.layout.activity_register;
38 | }
39 |
40 | @Override
41 | protected void onCreate(@Nullable Bundle savedInstanceState) {
42 | super.onCreate(savedInstanceState);
43 | ButterKnife.bind(this);
44 | initView();
45 | }
46 |
47 | private void initView() {
48 |
49 | setToolBarTitle("注册");
50 |
51 | registerBtn.setOnClickListener(new View.OnClickListener() {
52 | @Override
53 | public void onClick(View v) {
54 | register(usernameEt.getText().toString(), passwordEt.getText().toString(),
55 | confirmPasswordEt.getText().toString());
56 | }
57 | });
58 |
59 | }
60 |
61 |
62 | public void register(String userName, String password, String pwdAgain) {
63 | if (TextUtils.isEmpty(userName)) {
64 | ToastUtils.show("请输入用户名");
65 | return;
66 | }
67 | if (TextUtils.isEmpty(password)) {
68 | ToastUtils.show("请输入密码");
69 | return;
70 | }
71 | if (TextUtils.isEmpty(pwdAgain)) {
72 | ToastUtils.show("请确认密码");
73 | return;
74 | }
75 | if (!password.equals(pwdAgain)) {
76 | ToastUtils.show("两次输入的密码不一致");
77 | return;
78 | }
79 | User user = new User();
80 | user.setUsername(userName);
81 | user.setPassword(password);
82 | user.setSex(true);
83 | user.setNickName("");
84 | user.setMotto("小白");
85 | user.setAvatar("");
86 | user.setRelation(new BmobRelation());
87 | user.signUpObservable(user.getClass()).subscribe(new Subscriber
13 | * Info : MainComponent.java
14 | */
15 | @PerActivity
16 | @Component(dependencies = AppComponent.class, modules = {MainModule.class, ActivityModule.class})
17 | public interface MainComponent extends ActivityComponent{
18 |
19 | void inject(MainActivity mainActivity);
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/main/MainModule.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.main;
2 |
3 | import dagger.Module;
4 |
5 | /**
6 | * Created by Houxy on 2016/11/28.
7 | *
8 | * Info : MainModule.java
9 | */
10 | @Module
11 | public class MainModule {
12 |
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/main/behavior/FabSwitchAnimation.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.main.behavior;
2 |
3 | import android.support.design.widget.FloatingActionButton;
4 | import android.view.animation.AccelerateInterpolator;
5 | import android.view.animation.Animation;
6 | import android.view.animation.DecelerateInterpolator;
7 | import android.view.animation.ScaleAnimation;
8 |
9 | import com.houxy.days.R;
10 | import com.houxy.days.common.utils.ResUtil;
11 |
12 | /**
13 | * Created by Houxy on 2016/9/25.
14 | */
15 |
16 | public class FabSwitchAnimation {
17 |
18 | private static int[] colorIntArray = {R.color.colorAccent, android.R.color.holo_green_light,
19 | android.R.color.holo_red_light};
20 | // private static int[] iconIntArray = {R.mipmap.ic_dialog_edit,R.mipmap.ic_dialog_anniversary, R.mipmap.ic_menu_welfare_white};
21 |
22 | private static int[] iconIntArray = {R.mipmap.fab_edit,R.mipmap.fab_event, R.mipmap.ic_menu_welfare_white};
23 | public static void start(final FloatingActionButton fab, final int position) {
24 |
25 | //配合FloatingActionButtonScrollBehavior使用的时候可能因为上个fragment将fab隐藏
26 | //导致切换到下个fragment的时候不可见
27 | fab.show();
28 | fab.clearAnimation();
29 | // Scale down animation
30 | ScaleAnimation shrink = new ScaleAnimation(1f, 0.2f, 1f, 0.2f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
31 | shrink.setDuration(150); // animation duration in milliseconds
32 | shrink.setInterpolator(new DecelerateInterpolator());
33 | shrink.setAnimationListener(new Animation.AnimationListener() {
34 | @Override
35 | public void onAnimationStart(Animation animation) {
36 |
37 | }
38 |
39 | @Override
40 | public void onAnimationEnd(Animation animation) {
41 | // Change FAB color and icon
42 |
43 | fab.setBackgroundTintList(ResUtil.getColorStateList(colorIntArray[position]));
44 | fab.setImageDrawable(ResUtil.getDrawable(iconIntArray[position]));
45 |
46 | // Scale up animation
47 | ScaleAnimation expand = new ScaleAnimation(0.2f, 1f, 0.2f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
48 | expand.setDuration(100); // animation duration in milliseconds
49 | expand.setInterpolator(new AccelerateInterpolator());
50 | fab.startAnimation(expand);
51 | }
52 |
53 | @Override
54 | public void onAnimationRepeat(Animation animation) {
55 |
56 | }
57 | });
58 | fab.startAnimation(shrink);
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/main/behavior/FloatingActionButtonScrollBehavior.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.main.behavior;
2 |
3 | import android.content.Context;
4 | import android.support.design.widget.CoordinatorLayout;
5 | import android.support.design.widget.FloatingActionButton;
6 | import android.support.v4.view.ViewCompat;
7 | import android.util.AttributeSet;
8 | import android.view.View;
9 |
10 | /**
11 | * Created by Houxy on 2016/9/25.
12 | */
13 |
14 | public class FloatingActionButtonScrollBehavior extends FloatingActionButton.Behavior {
15 |
16 | public FloatingActionButtonScrollBehavior(Context context, AttributeSet attrs) {
17 | super();
18 | }
19 |
20 | @Override
21 | public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final
22 | FloatingActionButton child, final View directTargetChild, final View target, final int
23 | nestedScrollAxes) {
24 | // 确保是竖直判断的滚动
25 | return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll
26 | (coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
27 | }
28 |
29 | @Override
30 | public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final
31 | FloatingActionButton child, final View target, final int dxConsumed, final int dyConsumed,
32 | final int dxUnconsumed, final int dyUnconsumed) {
33 | super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
34 | dxUnconsumed, dyUnconsumed);
35 | if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
36 | child.hide();
37 | } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
38 | child.show();
39 | }
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/setting/AboutActivity.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.setting;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.design.widget.AppBarLayout;
6 | import android.support.design.widget.CollapsingToolbarLayout;
7 | import android.support.design.widget.CoordinatorLayout;
8 | import android.support.v7.widget.Toolbar;
9 | import android.widget.Button;
10 | import android.widget.ImageView;
11 | import android.widget.TextView;
12 |
13 | import com.houxy.days.R;
14 | import com.houxy.days.base.BaseActivity;
15 | import com.houxy.days.common.StatusBarUtil;
16 |
17 | import butterknife.Bind;
18 | import butterknife.ButterKnife;
19 |
20 | import static com.google.common.base.Preconditions.checkNotNull;
21 |
22 | /**
23 | * Created by Houxy on 2016/11/30.
24 | *
25 | * Info : AboutActivity.java
26 | */
27 | public class AboutActivity extends BaseActivity {
28 |
29 |
30 | @Bind(R.id.banner) ImageView mBanner;
31 | @Bind(R.id.tv_version) TextView mTvVersion;
32 | @Bind(R.id.toolbar) Toolbar mToolbar;
33 | @Bind(R.id.toolbar_layout) CollapsingToolbarLayout mToolbarLayout;
34 | @Bind(R.id.app_bar) AppBarLayout mAppBar;
35 | @Bind(R.id.bt_code) Button mBtCode;
36 | @Bind(R.id.bt_blog) Button mBtBlog;
37 | @Bind(R.id.bt_pay) Button mBtPay;
38 | @Bind(R.id.bt_share) Button mBtShare;
39 | @Bind(R.id.bt_update) Button mBtUpdate;
40 | @Bind(R.id.bt_bug) Button mBtBug;
41 | @Bind(R.id.coord) CoordinatorLayout mCoord;
42 |
43 | @Override
44 | protected void onCreate(@Nullable Bundle savedInstanceState) {
45 | super.onCreate(savedInstanceState);
46 | setContentView(R.layout.activity_about);
47 | ButterKnife.bind(this);
48 | setStatusBar();
49 | initView();
50 | }
51 |
52 | private void initView() {
53 | setSupportActionBar(mToolbar);
54 | checkNotNull(getSupportActionBar());
55 | getSupportActionBar().setDisplayHomeAsUpEnabled(true);
56 | }
57 |
58 | @Override
59 | public void setStatusBar() {
60 | StatusBarUtil.setTranslucentForCoordinatorLayout(this, 112);
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/setting/SettingActivity.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.setting;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 |
6 | import com.houxy.days.R;
7 | import com.houxy.days.base.ToolbarActivity;
8 |
9 | /**
10 | * Created by Houxy on 2016/9/29.
11 | *
12 | * Info : SettingActivity.java
13 | */
14 |
15 | public class SettingActivity extends ToolbarActivity{
16 | @Override
17 | protected int provideContentViewId() {
18 | return R.layout.activity_setting;
19 | }
20 |
21 | @Override
22 | protected void onCreate(@Nullable Bundle savedInstanceState) {
23 | super.onCreate(savedInstanceState);
24 | initView();
25 | getFragmentManager().beginTransaction().replace(R.id.frameLayout, new SettingFragment()).commit();
26 | setStatusBar();
27 | }
28 |
29 | private void initView() {
30 | setToolBarTitle("设置");
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/setting/SettingFragment.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.setting;
2 |
3 | import android.os.Bundle;
4 | import android.preference.CheckBoxPreference;
5 | import android.preference.Preference;
6 | import android.preference.PreferenceFragment;
7 | import android.support.design.widget.Snackbar;
8 |
9 | import com.houxy.days.C;
10 | import com.houxy.days.DaysApplication;
11 | import com.houxy.days.R;
12 | import com.houxy.days.common.utils.FileUtil;
13 | import com.houxy.days.common.utils.SPUtil;
14 | import com.houxy.days.common.utils.SimpleSubscriber;
15 | import com.houxy.days.common.utils.rx.RxHelper;
16 |
17 | import java.io.File;
18 |
19 | import rx.Observable;
20 | import rx.functions.Func1;
21 |
22 | import static com.google.common.base.Preconditions.checkNotNull;
23 |
24 | /**
25 | * Created by Houxy on 2016/11/30.
26 | *
27 | * Info : SettingFragment.java
28 | */
29 | public class SettingFragment extends PreferenceFragment
30 | implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener{
31 |
32 |
33 | private Preference mClearCache;
34 | private CheckBoxPreference mItemAnimation;
35 |
36 |
37 | @Override
38 | public void onCreate(Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | addPreferencesFromResource(R.xml.setting);
41 | mClearCache = findPreference(C.CLEAR_CACHE);
42 | mClearCache.setSummary(FileUtil.getAutoFileOrFilesSize(DaysApplication.cacheDir + "/days/image/"));
43 | mClearCache.setOnPreferenceClickListener(this);
44 | mItemAnimation = (CheckBoxPreference)findPreference(C.ITEM_ANIMATION);
45 | mItemAnimation.setChecked(SPUtil.getItemAnimation());
46 | mItemAnimation.setOnPreferenceChangeListener(this);
47 | }
48 |
49 | @Override
50 | public boolean onPreferenceChange(Preference preference, Object newValue) {
51 | if(preference == mItemAnimation){
52 | SPUtil.setItemAnimation(true);
53 | }
54 | return false;
55 | }
56 |
57 | @Override
58 | public boolean onPreferenceClick(Preference preference) {
59 | if(preference == mClearCache){
60 | Observable.just(FileUtil.delete(new File(DaysApplication.cacheDir + "/days/image/")))
61 | .filter(new Func1
21 | * Info : PhotoActivity.java
22 | */
23 | public class PhotoActivity extends BaseActivity {
24 |
25 | // @Bind(R.id.toolbar) Toolbar mToolbar;
26 | @Bind(R.id.ivGirl) PhotoView mIvGirl;
27 | protected boolean mIsHidden = false;
28 | private String url;
29 |
30 |
31 | public static Intent getIntentStartActivity(Context context, String url) {
32 | Intent intent = new Intent(context, PhotoActivity.class);
33 | intent.putExtra("imgUrl", url);
34 | return intent;
35 | }
36 |
37 |
38 | @Override
39 | protected void onCreate(@Nullable Bundle savedInstanceState) {
40 | super.onCreate(savedInstanceState);
41 | setContentView(R.layout.activity_photo);
42 | ButterKnife.bind(this);
43 | parseIntent();
44 | initView();
45 | }
46 |
47 | private void initView() {
48 |
49 | Glide.with(this).load(url).into(mIvGirl);
50 |
51 | mIvGirl.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() {
52 | @Override
53 | public void onViewTap(View view, float v, float v1) {
54 | finish();
55 | }
56 | });
57 |
58 |
59 | }
60 |
61 |
62 | private void parseIntent() {
63 | if (null != getIntent().getStringExtra("imgUrl")) {
64 | url = getIntent().getStringExtra("imgUrl");
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/modules/welfare/PhotoFragment.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.modules.welfare;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.v4.app.DialogFragment;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 |
10 | import com.bumptech.glide.Glide;
11 | import com.houxy.days.R;
12 |
13 | import butterknife.Bind;
14 | import butterknife.ButterKnife;
15 | import uk.co.senab.photoview.PhotoView;
16 | import uk.co.senab.photoview.PhotoViewAttacher;
17 |
18 | /**
19 | * Created by Houxy on 2017/1/24.
20 | *
21 | * Info : PhotoFragment.java
22 | */
23 | public class PhotoFragment extends DialogFragment {
24 |
25 |
26 | @Bind(R.id.ivGirl) PhotoView mIvGirl;
27 | private String url;
28 |
29 | @Override
30 | public void setArguments(Bundle args) {
31 | super.setArguments(args);
32 | url = args.getString("imgUrl");
33 | }
34 |
35 |
36 | @Override
37 | public void onCreate(@Nullable Bundle savedInstanceState) {
38 | super.onCreate(savedInstanceState);
39 | //设置全屏主题
40 | setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
41 | }
42 |
43 | @Nullable
44 | @Override
45 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
46 | View view = inflater.inflate(R.layout.fragment_photo, container, false);
47 | ButterKnife.bind(this, view);
48 | initView();
49 | return view;
50 | }
51 |
52 | private void initView() {
53 | Glide.with(this).load(url).into(mIvGirl);
54 | mIvGirl.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() {
55 | @Override
56 | public void onViewTap(View view, float v, float v1) {
57 | dismiss();
58 | }
59 | });
60 | }
61 |
62 | @Override
63 | public void onDestroyView() {
64 | super.onDestroyView();
65 | ButterKnife.unbind(this);
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/widget/AnimRecyclerViewAdapter.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.widget;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.view.animation.Animation;
8 | import android.view.animation.AnimationUtils;
9 |
10 | import com.houxy.days.R;
11 |
12 | /**
13 | * Created by Houxy on 2016/9/24.
14 | */
15 |
16 | public class AnimRecyclerViewAdapter";
35 | Pattern p = Pattern.compile(pattern);
36 | Matcher m = p.matcher(html);
37 | return m.replaceAll("[图片]");
38 | }
39 |
40 | public static String replaceN(String html) {
41 | String pattern = "\n";
42 | Pattern p = Pattern.compile(pattern);
43 | Matcher m = p.matcher(html);
44 | return m.replaceAll("");
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/holder/BitmapHolder.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.holder;
2 |
3 | import android.graphics.Bitmap;
4 |
5 | /**
6 | * Created by Houxy on 2016/10/5.
7 | */
8 |
9 | public class BitmapHolder {
10 |
11 | private Bitmap bitmap;
12 | private int position;
13 |
14 |
15 | public BitmapHolder(Bitmap bitmap, int position){
16 | this.bitmap = bitmap;
17 | this.position = position;
18 | }
19 |
20 | public void setBitmap(Bitmap bitmap) {
21 | this.bitmap = bitmap;
22 | }
23 |
24 | public Bitmap getBitmap() {
25 | return bitmap;
26 | }
27 |
28 | public void setPosition(int position) {
29 | this.position = position;
30 | }
31 |
32 | public int getPosition() {
33 | return position;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/holder/StringHolder.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.holder;
2 |
3 | /**
4 | * Created by Houxy on 2016/9/5.
5 | */
6 | public class StringHolder {
7 |
8 | private String string;
9 | private int startIndex;
10 | private int endIndex;
11 |
12 |
13 | public StringHolder(String string, int startIndex, int endIndex){
14 | this.string = string;
15 | this.startIndex = startIndex;
16 | this.endIndex= endIndex;
17 | }
18 |
19 |
20 | public int getEndIndex() {
21 | return endIndex;
22 | }
23 |
24 | public int getStartIndex() {
25 | return startIndex;
26 | }
27 |
28 | public String getString() {
29 | return string;
30 | }
31 |
32 | public void setEndIndex(int endIndex) {
33 | this.endIndex = endIndex;
34 | }
35 |
36 | public void setStartIndex(int startIndex) {
37 | this.startIndex = startIndex;
38 | }
39 |
40 | public void setString(String string) {
41 | this.string = string;
42 | }
43 |
44 | @Override
45 | public String toString() {
46 | return "src : " + getString() + " start : " + getStartIndex() + " end : " + getEndIndex();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/utils/DensityUtil.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.utils;
2 |
3 | import android.content.Context;
4 | import android.util.DisplayMetrics;
5 | import android.view.WindowManager;
6 |
7 | /**
8 | * Created by Houxy on 2016/9/21.
9 | */
10 |
11 | public class DensityUtil {
12 |
13 | /**
14 | * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
15 | */
16 | public static int dip2px(Context context, float dpValue) {
17 | final float scale = context.getResources().getDisplayMetrics().density;
18 | return (int) (dpValue * scale + 0.5f);
19 | }
20 |
21 |
22 | /**
23 | * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
24 | */
25 | public static int px2dip(Context context, float pxValue) {
26 | final float scale = context.getResources().getDisplayMetrics().density;
27 | return (int) (pxValue / scale + 0.5f);
28 | }
29 |
30 | /**
31 | * 获取屏幕宽度
32 | */
33 | public static int getWindowWidth(Context context){
34 |
35 | DisplayMetrics metric = new DisplayMetrics();
36 | WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
37 | manager.getDefaultDisplay().getMetrics(metric);
38 | return metric.widthPixels;
39 |
40 | }
41 |
42 | /**
43 | * 获取屏幕高度
44 | */
45 | public static int getWindowheight(Context context){
46 |
47 | DisplayMetrics metric = new DisplayMetrics();
48 | WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
49 | manager.getDefaultDisplay().getMetrics(metric);
50 | return metric.heightPixels;
51 |
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/utils/DialogUtil.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.utils;
2 |
3 | import android.app.Activity;
4 | import android.app.DatePickerDialog;
5 | import android.app.Dialog;
6 | import android.content.DialogInterface;
7 | import android.support.v7.app.AlertDialog;
8 | import android.view.View;
9 |
10 | import com.houxy.days.C;
11 | import com.houxy.days.common.utils.UploadPictureUtil;
12 |
13 | import java.util.Calendar;
14 |
15 | /**
16 | * Created by Houxy on 2016/9/13.
17 | */
18 | public class DialogUtil {
19 |
20 |
21 | /**
22 | *
23 | * @param activity
24 | * @param calendar
25 | */
26 | public static void showDatePickerDialog(Activity activity,Calendar calendar, DatePickerDialog.OnDateSetListener dateSetListener) {
27 |
28 |
29 | // 直接创建一个DatePickerDialog对话框实例,并将它显示出来
30 | new DatePickerDialog(activity, dateSetListener
31 | , calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), // 设置初始日期
32 | calendar.get(Calendar.DAY_OF_MONTH)).show();
33 | }
34 |
35 | public static void showSelectPicDialog(final Activity activity){
36 | new AlertDialog.Builder(activity).setItems(new String[]{"相册", "照相机", "取消"}, new DialogInterface.OnClickListener() {
37 | @Override
38 | public void onClick(DialogInterface dialog, int which) {
39 | switch (which) {
40 | case 0:
41 | activity.startActivityForResult(UploadPictureUtil.getUploadIntent(C.PICK_FROM_FILE), C.PICK_FROM_FILE);
42 | break;
43 | case 1:
44 | activity.startActivityForResult(UploadPictureUtil.getUploadIntent(C.PICK_FROM_CAMERA), C.PICK_FROM_CAMERA);
45 | break;
46 | case 2:
47 | dialog.dismiss();
48 | break;
49 | }
50 | }
51 | }).create().show();
52 | }
53 |
54 | public static void showSingleChoiceDialog(Activity activity, String title, final String[] choices, DialogInterface.OnClickListener onClickListener){
55 |
56 | new AlertDialog.Builder(activity).setTitle(title).setSingleChoiceItems(choices, 0, onClickListener)
57 | .setNegativeButton("取消", new DialogInterface.OnClickListener() {
58 | @Override
59 | public void onClick(DialogInterface dialog, int which) {
60 | dialog.dismiss();
61 | }
62 | }).create().show();
63 | }
64 |
65 | public static void showDialog(Activity activity, String title, Dialog.OnClickListener posBtnOnClickListener){
66 | new AlertDialog.Builder(activity).setTitle(title).setNegativeButton("取消", new DialogInterface.OnClickListener() {
67 | @Override
68 | public void onClick(DialogInterface dialog, int which) {
69 | dialog.dismiss();
70 | }
71 | }).setPositiveButton("确定", posBtnOnClickListener).create().show();
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/utils/NetUtil.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.utils;
2 |
3 | import android.content.Context;
4 | import android.net.ConnectivityManager;
5 | import android.net.NetworkInfo;
6 |
7 | /**
8 | * Created by Houxy on 2016/9/23.
9 | */
10 |
11 | public class NetUtil {
12 | /**
13 | * 只关注是否联网
14 | */
15 | public static boolean isNetworkConnected(Context context) {
16 | if (context != null) {
17 | ConnectivityManager mConnectivityManager =
18 | (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
19 | NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
20 | if (mNetworkInfo != null) {
21 | return mNetworkInfo.isAvailable();
22 | }
23 | }
24 | return false;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/utils/ResUtil.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.utils;
2 |
3 | import android.content.res.ColorStateList;
4 | import android.graphics.drawable.Drawable;
5 | import android.support.annotation.ColorRes;
6 | import android.support.annotation.DrawableRes;
7 | import android.support.annotation.StringRes;
8 | import android.support.v4.content.ContextCompat;
9 |
10 | import com.houxy.days.DaysApplication;
11 |
12 | /**
13 | * Created by Houxy on 2016/9/21.
14 | */
15 |
16 | public class ResUtil {
17 |
18 | public static int getColor(@ColorRes int id) {
19 | return ContextCompat.getColor(DaysApplication.getContext(), id);
20 | }
21 |
22 | public static Drawable getDrawable(@DrawableRes int id) {
23 | return ContextCompat.getDrawable(DaysApplication.getContext(), id);
24 | }
25 | public static String getString(@StringRes int id){
26 | return DaysApplication.getContext().getString(id);
27 | }
28 |
29 | public static ColorStateList getColorStateList(@ColorRes int id){
30 | return ColorStateList.valueOf(getColor(id));
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/utils/SPUtil.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.utils;
2 |
3 | import android.app.Activity;
4 | import android.content.SharedPreferences;
5 |
6 | import com.houxy.days.C;
7 | import com.houxy.days.DaysApplication;
8 |
9 | /**
10 | * Created by Houxy on 2016/9/8.
11 | */
12 | public class SPUtil {
13 |
14 | public SPUtil() {
15 | throw new AssertionError("no instance");
16 | }
17 |
18 | private static class Holder {
19 | private static SharedPreferences sp = DaysApplication.getContext().getSharedPreferences(C.SP_DATA, Activity.MODE_PRIVATE);
20 | }
21 |
22 | private static SharedPreferences getSP() {
23 | return Holder.sp;
24 | }
25 |
26 | public static void setUsername(String username) {
27 | getSP().edit().putString(C.USERNAME, username).apply();
28 | }
29 |
30 | public static String getUsername() {
31 | return getSP().getString(C.USERNAME, "");
32 | }
33 |
34 | public static void setPassword(String psw) {
35 | getSP().edit().putString(C.PASSWORD, psw).apply();
36 | }
37 |
38 | public static String getPassword() {
39 | return getSP().getString(C.PASSWORD, "");
40 | }
41 |
42 | public static void setToken(String token) {
43 | getSP().edit().putString(C.TOKEN_HEADER, token).apply();
44 | }
45 |
46 | public static String getToken() {
47 | return getSP().getString(C.TOKEN_HEADER, "");
48 | }
49 |
50 | public static void setMeiZhiCache(boolean hasMeiZhi) {
51 | getSP().edit().putBoolean(C.HAS_MEIZHI_CACHE, hasMeiZhi).apply();
52 | }
53 |
54 | public static boolean getMeiZhiCache() {
55 | return getSP().getBoolean(C.HAS_MEIZHI_CACHE, false);
56 | }
57 |
58 | public static void setItemAnimation(boolean hasMeiZhi) {
59 | getSP().edit().putBoolean(C.ITEM_ANIMATION, hasMeiZhi).apply();
60 | }
61 |
62 | public static boolean getItemAnimation() {
63 | return getSP().getBoolean(C.ITEM_ANIMATION, false);
64 | }
65 |
66 | public static void setClearCache(boolean hasMeiZhi) {
67 | getSP().edit().putBoolean(C.ITEM_ANIMATION, hasMeiZhi).apply();
68 | }
69 |
70 | public static boolean getClearCache() {
71 | return getSP().getBoolean(C.ITEM_ANIMATION, false);
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/app/src/main/java/com/houxy/days/common/utils/SimpleSubscriber.java:
--------------------------------------------------------------------------------
1 | package com.houxy.days.common.utils;
2 |
3 | import rx.Subscriber;
4 |
5 | /**
6 | * Created by Houxy on 2016/11/30.
7 | *