Skip to content

Commit

Permalink
fix(location): app install fail and can not load more when loaded fin…
Browse files Browse the repository at this point in the history
…ish list again refresh

- app install fail: dagger2 `@BindsOptionalOf` use java.util.Optional(API 24+), now use middle layer Optional
- load more fail: MVVMQuick framework `onListRefresh` not reset offset and refresh not reset `Adapter` load more finished status.

Close: #2
  • Loading branch information
xujiaji committed Sep 16, 2018
1 parent d3a15b5 commit 357a9bf
Show file tree
Hide file tree
Showing 10 changed files with 201 additions and 12 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[![Version](https://img.shields.io/badge/version-1.0.1-green.svg)]() [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Version](https://img.shields.io/badge/version-1.0.2-green.svg)]() [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)

> 目前功能还未完
Expand All @@ -25,6 +25,7 @@ OR
![](https://raw.githubusercontent.com/xujiaji/xujiaji.github.io/pictures/wanandroid/download_qr.png)

## Update
- `1.0.2` [fix #2](https://github.com/xujiaji/WanAndroid/issues/2)
- `1.0.1` 新增体系详情列表界面<br>
![](https://raw.githubusercontent.com/xujiaji/xujiaji.github.io/pictures/wanandroid/update/update_1_0_1.gif)

Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
applicationId "com.xujiaji.wanandroid"
minSdkVersion rootProject.minSdk
targetSdkVersion rootProject.targetSdk
versionCode 2
versionName "1.0.1"
versionCode 3
versionName "1.0.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// externalNativeBuild {
// cmake {
Expand Down
187 changes: 187 additions & 0 deletions app/src/main/java/com/google/common/base/Optional.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
package com.google.common.base;

import com.annimon.stream.Objects;
import com.annimon.stream.OptionalDouble;
import com.annimon.stream.OptionalInt;
import com.annimon.stream.OptionalLong;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Consumer;
import com.annimon.stream.function.Function;
import com.annimon.stream.function.Predicate;
import com.annimon.stream.function.Supplier;
import com.annimon.stream.function.ToDoubleFunction;
import com.annimon.stream.function.ToIntFunction;
import com.annimon.stream.function.ToLongFunction;

import java.util.NoSuchElementException;

/**
* author: xujiaji
* created on: 2018/9/17 0:41
* description: 由于Dagger2 使用@BindsOptionalOf,必须使用{@code com.google.common.base.Optional} or {@code java.util.Optional}.<br>
* 但是引入Guava这么大个包很没有必要,{@code java.util.Optional}有必须得API 24+ <br>
* 因此写了这个中间层,包的路径为Guava中Optional的路径
*/
public class Optional<T> {
private com.annimon.stream.Optional<T> optional;
private static final Optional<?> EMPTY = new Optional();

private final T value;

private Optional() {
this.value = null;
}

private Optional(T value) {
this.value = Objects.requireNonNull(value);
optional = com.annimon.stream.Optional.of(value);
}

public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}

public static <T> Optional<T> ofNullable(T value) {
return value == null ? Optional.<T>empty() : of(value);
}

@SuppressWarnings("unchecked")
public static <T> Optional<T> empty() {
return (Optional<T>) EMPTY;
}

public static <T> Optional<T> absent() {
return (Optional<T>) EMPTY;
}

public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}

public boolean isPresent() {
return value != null;
}

public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}

public void ifPresentOrElse(Consumer<? super T> consumer, Runnable emptyAction) {
if (value != null) {
consumer.accept(value);
} else {
emptyAction.run();
}
}

public Optional<T> executeIfPresent(Consumer<? super T> consumer) {
ifPresent(consumer);
return this;
}

public Optional<T> executeIfAbsent(Runnable action) {
if (value == null)
action.run();
return this;
}

public <R> R custom(Function<Optional<T>, R> function) {
Objects.requireNonNull(function);
return function.apply(this);
}

public Optional<T> filter(Predicate<? super T> predicate) {
if (!isPresent()) return this;
return predicate.test(value) ? this : Optional.<T>empty();
}

public Optional<T> filterNot(Predicate<? super T> predicate) {
return filter(Predicate.Util.negate(predicate));
}

public <U> Optional<U> map(Function<? super T, ? extends U> mapper) {
if (!isPresent()) return empty();
return Optional.ofNullable(mapper.apply(value));
}

public OptionalInt mapToInt(ToIntFunction<? super T> mapper) {
if (!isPresent()) return OptionalInt.empty();
return OptionalInt.of(mapper.applyAsInt(value));
}

public OptionalLong mapToLong(ToLongFunction<? super T> mapper) {
if (!isPresent()) return OptionalLong.empty();
return OptionalLong.of(mapper.applyAsLong(value));
}

public OptionalDouble mapToDouble(ToDoubleFunction<? super T> mapper) {
if (!isPresent()) return OptionalDouble.empty();
return OptionalDouble.of(mapper.applyAsDouble(value));
}

public <U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
if (!isPresent()) return empty();
return Objects.requireNonNull(mapper.apply(value));
}

@SuppressWarnings("unchecked")
public Stream<T> stream() {
if (!isPresent()) return Stream.empty();
return Stream.of(value);
}

@SuppressWarnings("unchecked")
public <R> Optional<R> select(Class<R> clazz) {
Objects.requireNonNull(clazz);
if (!isPresent()) return empty();
return (Optional<R>) Optional.ofNullable(clazz.isInstance(value) ? value : null);
}

public Optional<T> or(Supplier<Optional<T>> supplier) {
if (isPresent()) return this;
Objects.requireNonNull(supplier);
return Objects.requireNonNull(supplier.get());
}

public T orElse(T other) {
return value != null ? value : other;
}

public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}

public <X extends Throwable> T orElseThrow(Supplier<? extends X> exc) throws X {
if (value != null) return value;
else throw exc.get();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}

if (!(obj instanceof com.annimon.stream.Optional)) {
return false;
}

Optional<?> other = (Optional<?>) obj;
return Objects.equals(value, other.value);
}

@Override
public int hashCode() {
return Objects.hashCode(value);
}

@Override
public String toString() {
return value != null
? String.format("Optional[%s]", value)
: "Optional.empty";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void onChanged(@Nullable Result<PageBean<T>> pageBeanResult) {
adapter.loadMoreFail();
} else {
adapter.setEnableLoadMore(true);
adapter.loadMoreComplete();
adapter.setLoaded(false);
}

if (pageBeanResult == null) {
Expand All @@ -58,7 +58,7 @@ public void onChanged(@Nullable Result<PageBean<T>> pageBeanResult) {
}

if (pageBeanResult.getData().isOver()) {
adapter.setLoaded();
adapter.setLoaded(true);
}

if (mutableLiveDataRefreshLoadModel.isRefresh) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public LikeViewModel(@NonNull Application application) {

@Override
public void onListRefresh() {
super.onListRefresh();
mCollectsLiveData.setValue(new RefreshLoadModel<>(net.get().getCollects(UPDATE_INDEX), true));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import com.google.common.base.Optional;
import com.xujiaji.mvvmquick.di.ActivityScoped;
import com.xujiaji.wanandroid.base.BaseFragment;
import com.xujiaji.wanandroid.databinding.LayoutRefreshBinding;
Expand All @@ -16,12 +17,9 @@
import com.youth.banner.Banner;

import java.util.List;
import java.util.Optional;

import javax.inject.Inject;

import dagger.Lazy;

/**
* author: xujiaji
* created on: 2018/8/5 20:53
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public SingleLiveEvent<RefreshLoadModel<MutableLiveData<Result<PageBean<BlogPost

@Override
public void onListRefresh() {
super.onListRefresh();
if (mType == MainBlogPostsFragment.TYPE_MAIN) {
mBannerData.setValue(net.get().getBanners());
mBlogPostsLiveData.setValue(new RefreshLoadModel<>(net.get().getBlogPosts(UPDATE_INDEX), true));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public SingleLiveEvent<RefreshLoadModel<MutableLiveData<Result<PageBean<BlogPost

@Override
public void onListRefresh() {
super.onListRefresh();
projectsLiveData.setValue(new RefreshLoadModel<>(net.get().getProjects(UPDATE_INDEX), true));
}

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ ext{
updateApp = '3.5.2'
umengCommon = '1.5.3'
umengAnalytics = '7.5.3'
mvvmQuick = '0.0.3'
mvvmQuick = '0.0.5'
stream = '1.1.9'
blurry = '2.1.1'
}
6 changes: 3 additions & 3 deletions json/version.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
"errorCode":0,
"errorMsg":"",
"data":{
"version_name":"1.0.1",
"version_name":"1.0.2",
"version_code":2,
"update_info":"1.添加体系详情界面;\n2.修复一些小bug;\n3.更新MVVMQuick框架",
"file_size":"8.4M",
"file_size":"8.8M",
"constraint":false,
"apk_url":"https://github.com/xujiaji/WanAndroid/releases/download/v1.0.1/app-release.apk"
"apk_url":"https://github.com/xujiaji/WanAndroid/releases/download/v1.0.2/app-release.apk"
}
}

0 comments on commit 357a9bf

Please sign in to comment.