mirror of
https://github.com/leanote/leanote-android.git
synced 2025-10-15 14:51:04 +00:00
code refactoring
- extract DashDividerDecoration class - keep showing app name on main activity’s title - show notebook’s title on list item
This commit is contained in:
@@ -34,13 +34,13 @@
|
|||||||
android:label="@string/preview" />
|
android:label="@string/preview" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.MainActivity"
|
android:name=".ui.MainActivity"
|
||||||
android:label="@string/recent_notes" />
|
android:label="@string/app_name" />
|
||||||
<activity android:name=".ui.SignInActivity" />
|
<activity android:name=".ui.SignInActivity" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.SettingsActivity"
|
android:name=".ui.SettingsActivity"
|
||||||
android:label="@string/settings" />
|
android:label="@string/settings" />
|
||||||
|
<activity
|
||||||
<activity android:name=".ui.AboutActivity"
|
android:name=".ui.AboutActivity"
|
||||||
android:label="@string/about" />
|
android:label="@string/about" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
|
@@ -30,6 +30,8 @@ import okhttp3.MediaType;
|
|||||||
import okhttp3.MultipartBody;
|
import okhttp3.MultipartBody;
|
||||||
import okhttp3.RequestBody;
|
import okhttp3.RequestBody;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
|
import rx.Observable;
|
||||||
|
import rx.Subscriber;
|
||||||
|
|
||||||
public class NoteService {
|
public class NoteService {
|
||||||
|
|
||||||
@@ -426,11 +428,17 @@ public class NoteService {
|
|||||||
return ApiProvider.getInstance().getNoteApi().update(requestBodyMap, fileBodies);
|
return ApiProvider.getInstance().getNoteApi().update(requestBodyMap, fileBodies);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void deleteNote(Note note) {
|
public static Observable<Void> deleteNote(final Note note) {
|
||||||
|
return Observable.create(
|
||||||
|
new Observable.OnSubscribe<Void>() {
|
||||||
|
@Override
|
||||||
|
public void call(Subscriber<? super Void> subscriber) {
|
||||||
|
if (!subscriber.isUnsubscribed()) {
|
||||||
if (TextUtils.isEmpty(note.getNoteId())) {
|
if (TextUtils.isEmpty(note.getNoteId())) {
|
||||||
AppDataBase.deleteNoteByLocalId(note.getId());
|
AppDataBase.deleteNoteByLocalId(note.getId());
|
||||||
} else {
|
} else {
|
||||||
UpdateRe response = RetrofitUtils.excuteWithException(deleteNote(note.getNoteId(), note.getUsn()));
|
UpdateRe response = RetrofitUtils.excuteWithException(
|
||||||
|
ApiProvider.getInstance().getNoteApi().delete(note.getNoteId(), note.getUsn()));
|
||||||
if (response.isOk()) {
|
if (response.isOk()) {
|
||||||
AppDataBase.deleteNoteByLocalId(note.getId());
|
AppDataBase.deleteNoteByLocalId(note.getId());
|
||||||
updateUsnIfNeed(response.getUsn());
|
updateUsnIfNeed(response.getUsn());
|
||||||
@@ -438,6 +446,11 @@ public class NoteService {
|
|||||||
throw new IllegalStateException(response.getMsg());
|
throw new IllegalStateException(response.getMsg());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
subscriber.onNext(null);
|
||||||
|
subscriber.onCompleted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateUsnIfNeed(int newUsn) {
|
private static void updateUsnIfNeed(int newUsn) {
|
||||||
|
@@ -3,6 +3,7 @@ package org.houxg.leamonax.service;
|
|||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import org.houxg.leamonax.database.AppDataBase;
|
||||||
import org.houxg.leamonax.model.Account;
|
import org.houxg.leamonax.model.Account;
|
||||||
import org.houxg.leamonax.model.Notebook;
|
import org.houxg.leamonax.model.Notebook;
|
||||||
import org.houxg.leamonax.network.ApiProvider;
|
import org.houxg.leamonax.network.ApiProvider;
|
||||||
@@ -29,4 +30,9 @@ public class NotebookService {
|
|||||||
throw new IllegalStateException(notebook.getMsg());
|
throw new IllegalStateException(notebook.getMsg());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getTitle(long notebookLocalId) {
|
||||||
|
Notebook notebook = AppDataBase.getNotebookByLocalId(notebookLocalId);
|
||||||
|
return notebook != null ? notebook.getTitle() : "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -51,7 +51,7 @@ import rx.schedulers.Schedulers;
|
|||||||
public class MainActivity extends BaseActivity implements NotebookAdapter.NotebookAdapterListener {
|
public class MainActivity extends BaseActivity implements NotebookAdapter.NotebookAdapterListener {
|
||||||
|
|
||||||
private static final String EXT_SHOULD_RELOAD = "ext_should_reload";
|
private static final String EXT_SHOULD_RELOAD = "ext_should_reload";
|
||||||
private static final String TAG_NOTE_FRAGMENT = "note_fragment";
|
private static final String TAG_NOTE_FRAGMENT = "tag_note_fragment";
|
||||||
|
|
||||||
NoteFragment mNoteFragment;
|
NoteFragment mNoteFragment;
|
||||||
|
|
||||||
@@ -129,6 +129,15 @@ public class MainActivity extends BaseActivity implements NotebookAdapter.Notebo
|
|||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
|
||||||
|
mDrawerLayout.closeDrawer(GravityCompat.START);
|
||||||
|
} else {
|
||||||
|
super.onBackPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void fetchInfo() {
|
private void fetchInfo() {
|
||||||
AccountService.getInfo(AccountService.getCurrent().getUserId())
|
AccountService.getInfo(AccountService.getCurrent().getUserId())
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
@@ -169,7 +178,6 @@ public class MainActivity extends BaseActivity implements NotebookAdapter.Notebo
|
|||||||
public void onClickedNotebook(Notebook notebook) {
|
public void onClickedNotebook(Notebook notebook) {
|
||||||
mNoteFragment.loadNoteFromLocal(notebook.getId());
|
mNoteFragment.loadNoteFromLocal(notebook.getId());
|
||||||
mDrawerLayout.closeDrawer(GravityCompat.START, true);
|
mDrawerLayout.closeDrawer(GravityCompat.START, true);
|
||||||
setTitle(notebook.getTitle());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -238,7 +246,6 @@ public class MainActivity extends BaseActivity implements NotebookAdapter.Notebo
|
|||||||
void showRecentNote() {
|
void showRecentNote() {
|
||||||
mNoteFragment.loadNoteFromLocal(NoteFragment.RECENT_NOTES);
|
mNoteFragment.loadNoteFromLocal(NoteFragment.RECENT_NOTES);
|
||||||
mDrawerLayout.closeDrawer(GravityCompat.START, true);
|
mDrawerLayout.closeDrawer(GravityCompat.START, true);
|
||||||
setTitle(getString(R.string.recent_notes));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnClick(R.id.rl_about)
|
@OnClick(R.id.rl_about)
|
||||||
|
@@ -4,14 +4,8 @@ package org.houxg.leamonax.ui;
|
|||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.DashPathEffect;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.Path;
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v13.view.ViewCompat;
|
|
||||||
import android.support.v4.widget.SwipeRefreshLayout;
|
import android.support.v4.widget.SwipeRefreshLayout;
|
||||||
import android.support.v7.widget.DefaultItemAnimator;
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
@@ -36,6 +30,7 @@ import org.houxg.leamonax.service.NoteService;
|
|||||||
import org.houxg.leamonax.utils.DisplayUtils;
|
import org.houxg.leamonax.utils.DisplayUtils;
|
||||||
import org.houxg.leamonax.utils.NetworkUtils;
|
import org.houxg.leamonax.utils.NetworkUtils;
|
||||||
import org.houxg.leamonax.utils.ToastUtils;
|
import org.houxg.leamonax.utils.ToastUtils;
|
||||||
|
import org.houxg.leamonax.widget.DashDividerDecoration;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -43,9 +38,7 @@ import java.util.Locale;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import rx.Observable;
|
|
||||||
import rx.Observer;
|
import rx.Observer;
|
||||||
import rx.Subscriber;
|
|
||||||
import rx.android.schedulers.AndroidSchedulers;
|
import rx.android.schedulers.AndroidSchedulers;
|
||||||
import rx.schedulers.Schedulers;
|
import rx.schedulers.Schedulers;
|
||||||
|
|
||||||
@@ -206,17 +199,7 @@ public class NoteFragment extends Fragment implements NoteAdapter.NoteAdapterLis
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void deleteNote(final Note note) {
|
private void deleteNote(final Note note) {
|
||||||
Observable.create(
|
NoteService.deleteNote(note)
|
||||||
new Observable.OnSubscribe<Void>() {
|
|
||||||
@Override
|
|
||||||
public void call(Subscriber<? super Void> subscriber) {
|
|
||||||
if (!subscriber.isUnsubscribed()) {
|
|
||||||
NoteService.deleteNote(note);
|
|
||||||
subscriber.onNext(null);
|
|
||||||
subscriber.onCompleted();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(new Observer<Void>() {
|
.subscribe(new Observer<Void>() {
|
||||||
@@ -248,46 +231,4 @@ public class NoteFragment extends Fragment implements NoteAdapter.NoteAdapterLis
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class DashDividerDecoration extends RecyclerView.ItemDecoration {
|
|
||||||
|
|
||||||
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
|
||||||
private Path mPath;
|
|
||||||
|
|
||||||
public DashDividerDecoration(int color, int dashGap, int dashWidth, int height) {
|
|
||||||
mPaint.setColor(color);
|
|
||||||
mPaint.setStyle(Paint.Style.STROKE);
|
|
||||||
mPaint.setStrokeWidth(height);
|
|
||||||
mPaint.setPathEffect(new DashPathEffect(new float[]{dashWidth, dashGap}, 0));
|
|
||||||
mPath = new Path();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
|
||||||
super.onDraw(c, parent, state);
|
|
||||||
final int left = parent.getPaddingLeft();
|
|
||||||
final int right = parent.getWidth() - parent.getPaddingRight();
|
|
||||||
final int childCount = parent.getChildCount();
|
|
||||||
final int strokeWidth = (int) mPaint.getStrokeWidth();
|
|
||||||
for (int i = 0; i < childCount; i++) {
|
|
||||||
final View child = parent.getChildAt(i);
|
|
||||||
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
|
|
||||||
.getLayoutParams();
|
|
||||||
final int top = child.getBottom() + params.bottomMargin +
|
|
||||||
Math.round(ViewCompat.getTranslationY(child));
|
|
||||||
int offsetY = top + strokeWidth / 2;
|
|
||||||
|
|
||||||
mPath.reset();
|
|
||||||
mPath.moveTo(left, offsetY);
|
|
||||||
mPath.lineTo(right, offsetY);
|
|
||||||
c.drawPath(mPath, mPaint);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
|
||||||
super.getItemOffsets(outRect, view, parent, state);
|
|
||||||
outRect.set(0, 0, 0, (int) mPaint.getStrokeWidth());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,53 @@
|
|||||||
|
package org.houxg.leamonax.widget;
|
||||||
|
|
||||||
|
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.DashPathEffect;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.Path;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.support.v13.view.ViewCompat;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
public class DashDividerDecoration extends RecyclerView.ItemDecoration {
|
||||||
|
|
||||||
|
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
private Path mPath;
|
||||||
|
|
||||||
|
public DashDividerDecoration(int color, int dashGap, int dashWidth, int height) {
|
||||||
|
mPaint.setColor(color);
|
||||||
|
mPaint.setStyle(Paint.Style.STROKE);
|
||||||
|
mPaint.setStrokeWidth(height);
|
||||||
|
mPaint.setPathEffect(new DashPathEffect(new float[]{dashWidth, dashGap}, 0));
|
||||||
|
mPath = new Path();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
||||||
|
super.onDraw(c, parent, state);
|
||||||
|
final int left = parent.getPaddingLeft();
|
||||||
|
final int right = parent.getWidth() - parent.getPaddingRight();
|
||||||
|
final int childCount = parent.getChildCount();
|
||||||
|
final int strokeWidth = (int) mPaint.getStrokeWidth();
|
||||||
|
for (int i = 0; i < childCount; i++) {
|
||||||
|
final View child = parent.getChildAt(i);
|
||||||
|
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
|
||||||
|
.getLayoutParams();
|
||||||
|
final int top = child.getBottom() + params.bottomMargin +
|
||||||
|
Math.round(ViewCompat.getTranslationY(child));
|
||||||
|
int offsetY = top + strokeWidth / 2;
|
||||||
|
|
||||||
|
mPath.reset();
|
||||||
|
mPath.moveTo(left, offsetY);
|
||||||
|
mPath.lineTo(right, offsetY);
|
||||||
|
c.drawPath(mPath, mPaint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
||||||
|
super.getItemOffsets(outRect, view, parent, state);
|
||||||
|
outRect.set(0, 0, 0, (int) mPaint.getStrokeWidth());
|
||||||
|
}
|
||||||
|
}
|
@@ -22,15 +22,14 @@
|
|||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_notebook"
|
android:id="@+id/tv_dirty"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:fontFamily="sans-serif-light"
|
android:fontFamily="sans-serif-light"
|
||||||
android:textColor="@color/colorAccent"
|
android:text="@string/changed"
|
||||||
android:textSize="12sp"
|
android:textColor="#FFA726"
|
||||||
android:visibility="gone"
|
android:textSize="12sp" />
|
||||||
tools:text="Gradle" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_update_time"
|
android:id="@+id/tv_update_time"
|
||||||
@@ -42,14 +41,14 @@
|
|||||||
tools:text="9-18 23:23" />
|
tools:text="9-18 23:23" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_dirty"
|
android:id="@+id/tv_notebook"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:fontFamily="sans-serif-light"
|
android:fontFamily="sans-serif-medium"
|
||||||
android:text="@string/changed"
|
android:textColor="@color/hint_text_light"
|
||||||
android:textColor="#FFA726"
|
android:textSize="12sp"
|
||||||
android:textSize="12sp" />
|
tools:text="Gradle" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@@ -7,6 +7,8 @@
|
|||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
<item name="android:actionMenuTextColor">@color/menu_text</item>
|
<item name="android:actionMenuTextColor">@color/menu_text</item>
|
||||||
|
|
||||||
|
<item name="android:homeAsUpIndicator">@drawable/ic_arrow_back_white</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="SettingsStatus">
|
<style name="SettingsStatus">
|
||||||
|
Reference in New Issue
Block a user