support generate random notes for debugging

This commit is contained in:
houxg
2016-11-23 16:58:04 +08:00
parent d83bc39083
commit 2391225079
3 changed files with 128 additions and 0 deletions

View File

@@ -2,18 +2,39 @@ package org.houxg.leamonax.ui;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
import com.raizlabs.android.dbflow.config.FlowManager;
import com.raizlabs.android.dbflow.structure.database.transaction.ProcessModelTransaction;
import com.raizlabs.android.dbflow.structure.database.transaction.Transaction;
import org.bson.types.ObjectId;
import org.houxg.leamonax.BuildConfig;
import org.houxg.leamonax.R;
import org.houxg.leamonax.database.AppDataBase;
import org.houxg.leamonax.model.Note;
import org.houxg.leamonax.service.AccountService;
import org.houxg.leamonax.utils.TestUtils;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.Observable;
import rx.Subscriber;
import rx.schedulers.Schedulers;
public class AboutActivity extends BaseActivity {
@BindView(R.id.tv_version)
TextView mVersionTv;
@BindView(R.id.ll_debug)
View mDebugPanel;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -23,5 +44,38 @@ public class AboutActivity extends BaseActivity {
ButterKnife.bind(this);
mVersionTv.setText(BuildConfig.VERSION_NAME);
mDebugPanel.setVisibility(BuildConfig.DEBUG ? View.VISIBLE : View.GONE);
}
@OnClick(R.id.ll_generate_random_note)
void clickedVersion() {
Observable.create(
new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
String userId = AccountService.getCurrent().getUserId();
SecureRandom random = new SecureRandom();
String notebookId = new ObjectId().toString();
List<Note> notes = new ArrayList<>(8000);
for (int i = 0; i < 5000; i++) {
Note note = TestUtils.randomNote(random, notebookId, userId);
notes.add(note);
}
ProcessModelTransaction<Note> processModelTransaction = new ProcessModelTransaction.Builder<>(
new ProcessModelTransaction.ProcessModel<Note>() {
@Override
public void processModel(Note note) {
note.save();
}
})
.addAll(notes)
.build();
Transaction transaction = FlowManager.getDatabase(AppDataBase.class).beginTransactionAsync(processModelTransaction).build();
transaction.execute();
}
}).subscribeOn(Schedulers.io())
.subscribe();
}
}

View File

@@ -0,0 +1,52 @@
package org.houxg.leamonax.utils;
import org.houxg.leamonax.model.Note;
import java.security.SecureRandom;
public class TestUtils {
private static final char[] CHARS = "abcdefghijklmnopqrstuvwxyz".toCharArray();
public static Note randomNote(SecureRandom random, String notebookId, String userId) {
Note note = new Note();
note.setTitle(randomSentence(random));
note.setContent(randomParagraph(random));
note.setUserId(userId);
note.setNoteBookId(notebookId);
return note;
}
public static String randomWord(SecureRandom random) {
int len = random.nextInt(10) + 1;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < len; i++) {
builder.append(CHARS[random.nextInt(CHARS.length)]);
}
return builder.toString();
}
public static String randomSentence(SecureRandom random) {
int len = random.nextInt(20) + 2;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < len; i++) {
builder.append(randomWord(random));
builder.append(' ');
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
public static String randomParagraph(SecureRandom random) {
int len = random.nextInt(10) + 2;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < len; i++) {
builder.append(randomSentence(random));
builder.append(random.nextBoolean() ? ',' : ".");
builder.append(' ');
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
}

View File

@@ -105,6 +105,28 @@
<include layout="@layout/divider" />
<LinearLayout
android:id="@+id/ll_debug"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/ll_generate_random_note"
style="@style/SettingsPanel"
android:orientation="vertical">
<TextView
style="@style/SettingsSecondaryText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Generate random note" />
</LinearLayout>
<include layout="@layout/divider" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>