From ac1bfcae60e32eee569ddedb7b77f312cbbf9f67 Mon Sep 17 00:00:00 2001 From: goapunk <goapunk@riseup.net> Date: Tue, 24 Apr 2018 11:54:20 +0200 Subject: [PATCH] Make test data creation configurable. --- briar-android/src/main/AndroidManifest.xml | 10 ++ .../android/activity/ActivityComponent.java | 3 + .../android/settings/SettingsFragment.java | 12 +- .../briar/android/test/TestDataActivity.java | 100 +++++++++++ .../main/res/layout/activity_test_data.xml | 170 ++++++++++++++++++ briar-android/src/main/res/xml/settings.xml | 9 +- .../briar/api/test/TestDataCreator.java | 13 ++ .../briar/test/TestDataCreatorImpl.java | 46 +++-- 8 files changed, 332 insertions(+), 31 deletions(-) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java create mode 100644 briar-android/src/main/res/layout/activity_test_data.xml diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml index cc195722b5..19b55dca6c 100644 --- a/briar-android/src/main/AndroidManifest.xml +++ b/briar-android/src/main/AndroidManifest.xml @@ -352,6 +352,16 @@ /> </activity> + <activity + android:name="org.briarproject.briar.android.test.TestDataActivity" + android:label="Create test data" + android:parentActivityName="org.briarproject.briar.android.settings.SettingsActivity"> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="org.briarproject.briar.android.settings.SettingsActivity" + /> + </activity> + <activity android:name="org.briarproject.briar.android.panic.PanicPreferencesActivity" android:label="@string/panic_setting" diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java index 2f8ca83faa..68564c4e49 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/ActivityComponent.java @@ -70,6 +70,7 @@ import org.briarproject.briar.android.sharing.ShareForumFragment; import org.briarproject.briar.android.sharing.ShareForumMessageFragment; import org.briarproject.briar.android.sharing.SharingModule; import org.briarproject.briar.android.splash.SplashScreenActivity; +import org.briarproject.briar.android.test.TestDataActivity; import dagger.Component; @@ -147,6 +148,8 @@ public interface ActivityComponent { void inject(SettingsActivity activity); + void inject(TestDataActivity activity); + void inject(ChangePasswordActivity activity); void inject(IntroductionActivity activity); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java index 1efca23465..8f8c444040 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java @@ -30,7 +30,6 @@ import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.bramble.util.StringUtils; import org.briarproject.briar.R; import org.briarproject.briar.android.util.UserFeedback; -import org.briarproject.briar.api.test.TestDataCreator; import java.util.logging.Logger; @@ -105,8 +104,6 @@ public class SettingsFragment extends PreferenceFragmentCompat @Inject AndroidExecutor androidExecutor; - @Inject - TestDataCreator testDataCreator; @Override public void onAttach(Context context) { @@ -153,14 +150,7 @@ public class SettingsFragment extends PreferenceFragmentCompat }); Preference testData = findPreference("pref_key_test_data"); - if (IS_DEBUG_BUILD) { - testData.setOnPreferenceClickListener(preference -> { - LOG.info("Creating test data"); - testDataCreator.createTestData(); - getActivity().finish(); - return true; - }); - } else { + if (!IS_DEBUG_BUILD) { testData.setVisible(false); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java new file mode 100644 index 0000000000..632d82ea4b --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java @@ -0,0 +1,100 @@ +package org.briarproject.briar.android.test; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.view.MenuItem; +import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; +import android.widget.TextView; + +import org.briarproject.briar.R; +import org.briarproject.briar.android.activity.ActivityComponent; +import org.briarproject.briar.android.activity.BriarActivity; +import org.briarproject.briar.android.navdrawer.NavDrawerActivity; +import org.briarproject.briar.api.test.TestDataCreator; + +import javax.inject.Inject; + +public class TestDataActivity extends BriarActivity { + + @Inject + TestDataCreator testDataCreator; + + private TextView[] textviews = new TextView[5]; + private SeekBar[] seekbars = new SeekBar[5]; + + @Override + public void onCreate(Bundle bundle) { + super.onCreate(bundle); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } + + setContentView(R.layout.activity_test_data); + textviews[0] = findViewById(R.id.textViewContactsSb); + textviews[1] = findViewById(R.id.textViewMessagesSb); + textviews[2] = findViewById(R.id.TextViewBlogPostsSb); + textviews[3] = findViewById(R.id.TextViewForumsSb); + textviews[4] = findViewById(R.id.TextViewForumMessagesSb); + seekbars[0] = findViewById(R.id.seekBarContacts); + seekbars[1] = findViewById(R.id.seekBarMessages); + seekbars[2] = findViewById(R.id.seekBarBlogPosts); + seekbars[3] = findViewById(R.id.seekBarForums); + seekbars[4] = findViewById(R.id.seekBarForumMessages); + + for (int i = 0; i < 5; i++) { + final TextView textView = textviews[i]; + seekbars[i].setOnSeekBarChangeListener( + new OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, + int progress, + boolean fromUser) { + textView.setText("" + progress); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + + }); + } + + findViewById(R.id.buttonCreateTestData).setOnClickListener( + v -> { + createTestData(); + }); + } + + private void createTestData() { + testDataCreator.createTestData(seekbars[0].getProgress(), + seekbars[1].getProgress(), seekbars[2].getProgress(), + seekbars[3].getProgress(), seekbars[4].getProgress()); + Intent intent = new Intent(this, NavDrawerActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + @Override + public void injectActivity(ActivityComponent component) { + component.inject(this); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } + return false; + } +} diff --git a/briar-android/src/main/res/layout/activity_test_data.xml b/briar-android/src/main/res/layout/activity_test_data.xml new file mode 100644 index 0000000000..c0d6c68334 --- /dev/null +++ b/briar-android/src/main/res/layout/activity_test_data.xml @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="0dp" + android:padding="8dp"> + + <android.support.constraint.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <TextView + android:id="@+id/textViewContacts" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Number of contacts" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + + <SeekBar + android:id="@+id/seekBarContacts" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:max="50" + android:progress="20" + app:layout_constraintEnd_toStartOf="@+id/textViewContactsSb" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textViewContacts"/> + + <TextView + android:id="@+id/textViewContactsSb" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ems="2" + android:text="20" + app:layout_constraintBottom_toBottomOf="@+id/seekBarContacts" + app:layout_constraintEnd_toEndOf="parent"/> + + + <TextView + android:id="@+id/textViewMessages" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Number of messages per contact" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/seekBarContacts"/> + + <SeekBar + android:id="@+id/seekBarMessages" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:max="50" + android:paddingTop="5dp" + android:progress="15" + app:layout_constraintEnd_toStartOf="@+id/textViewMessagesSb" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textViewMessages"/> + + <TextView + android:id="@+id/textViewMessagesSb" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ems="2" + android:text="20" + app:layout_constraintBottom_toBottomOf="@+id/seekBarMessages" + app:layout_constraintEnd_toEndOf="parent"/> + + <TextView + android:id="@+id/textViewBlogPosts" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Number of blog posts" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/seekBarMessages"/> + + <SeekBar + android:id="@+id/seekBarBlogPosts" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:max="50" + android:paddingTop="5dp" + android:progress="30" + app:layout_constraintEnd_toStartOf="@+id/TextViewBlogPostsSb" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textViewBlogPosts"/> + + <TextView + android:id="@+id/TextViewBlogPostsSb" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ems="2" + android:text="20" + app:layout_constraintBottom_toBottomOf="@+id/seekBarBlogPosts" + app:layout_constraintEnd_toEndOf="parent"/> + + <TextView + android:id="@+id/textViewForums" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Number of forums" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/seekBarBlogPosts"/> + + <SeekBar + android:id="@+id/seekBarForums" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:max="10" + android:paddingTop="5dp" + android:progress="3" + app:layout_constraintEnd_toStartOf="@+id/TextViewForumsSb" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textViewForums"/> + + <TextView + android:id="@+id/TextViewForumsSb" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ems="2" + android:text="20" + app:layout_constraintBottom_toBottomOf="@+id/seekBarForums" + app:layout_constraintEnd_toEndOf="parent"/> + + <TextView + android:id="@+id/textViewForumMessages" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Number of forum messages" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/seekBarForums"/> + + <SeekBar + android:id="@+id/seekBarForumMessages" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:max="50" + android:paddingTop="5dp" + android:progress="30" + app:layout_constraintEnd_toStartOf="@+id/TextViewForumMessagesSb" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textViewForumMessages"/> + + <TextView + android:id="@+id/TextViewForumMessagesSb" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ems="2" + android:text="20" + app:layout_constraintBottom_toBottomOf="@+id/seekBarForumMessages" + app:layout_constraintEnd_toEndOf="parent"/> + + <Button + android:id="@+id/buttonCreateTestData" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="10dp" + android:text="Create test data" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/seekBarForumMessages"/> + </android.support.constraint.ConstraintLayout> + </ScrollView> +</android.support.constraint.ConstraintLayout> diff --git a/briar-android/src/main/res/xml/settings.xml b/briar-android/src/main/res/xml/settings.xml index 43ad96985a..9f3a55f94f 100644 --- a/briar-android/src/main/res/xml/settings.xml +++ b/briar-android/src/main/res/xml/settings.xml @@ -124,6 +124,11 @@ <Preference android:key="pref_key_test_data" - android:title="Create Test Data"/> + android:title="Create Test Data"> -</PreferenceScreen> \ No newline at end of file + <intent + android:targetClass="org.briarproject.briar.android.test.TestDataActivity" + android:targetPackage="@string/app_package"/> + </Preference> + +</PreferenceScreen> diff --git a/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java b/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java index 55b77221d2..5bae29a83d 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/test/TestDataCreator.java @@ -8,4 +8,17 @@ public interface TestDataCreator { /* Creates fake test data on the DatabaseExecutor */ void createTestData(); + /** + * Creates a configurable amount of fake test data on the DatabaseExecutor + * + * @param numContacts Number of contacts to create. + * @param numPrivateMsgs Number of private messages to create for each + * contact. + * @param numBlogPosts Number of blog posts to create. + * @param numForums Number of forums to create. + * @param numForumPosts Number of forum posts to create per forum. + */ + void createTestData(int numContacts, int numPrivateMsgs, int numBlogPosts, + int numForums, int numForumPosts); + } diff --git a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java index c090feefda..c273001e17 100644 --- a/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/test/TestDataCreatorImpl.java @@ -61,12 +61,6 @@ import static org.briarproject.briar.test.TestData.GROUP_NAMES; public class TestDataCreatorImpl implements TestDataCreator { - private final static int NUM_CONTACTS = 20; - private final static int NUM_PRIVATE_MSGS = 15; - private final static int NUM_BLOG_POSTS = 30; - private final static int NUM_FORUMS = 3; - private final static int NUM_FORUM_POSTS = 30; - private final Logger LOG = Logger.getLogger(TestDataCreatorImpl.class.getName()); @@ -92,6 +86,12 @@ public class TestDataCreatorImpl implements TestDataCreator { private final Random random = new Random(); private final Map<Contact, LocalAuthor> localAuthors = new HashMap<>(); + private int numContacts = 20; + private int numPrivateMsgs = 15; + private int numBlogPosts = 30; + private int numForums = 3; + private int numForumPosts = 30; + @Inject TestDataCreatorImpl(AuthorFactory authorFactory, Clock clock, PrivateMessageFactory privateMessageFactory, @@ -119,6 +119,16 @@ public class TestDataCreatorImpl implements TestDataCreator { this.ioExecutor = ioExecutor; } + public void createTestData(int numContacts, int numPrivateMsgs, int numBlogPosts, int numForums, + int numForumPosts){ + this.numContacts = numContacts; + this.numPrivateMsgs = numPrivateMsgs; + this.numBlogPosts = numBlogPosts; + this.numForums = numForums; + this.numForumPosts = numForumPosts; + createTestData(); + } + public void createTestData() { ioExecutor.execute(() -> { try { @@ -143,9 +153,9 @@ public class TestDataCreatorImpl implements TestDataCreator { } private List<Contact> createContacts() throws DbException { - List<Contact> contacts = new ArrayList<>(NUM_CONTACTS); + List<Contact> contacts = new ArrayList<>(numContacts); LocalAuthor localAuthor = identityManager.getLocalAuthor(); - for (int i = 0; i < NUM_CONTACTS; i++) { + for (int i = 0; i < numContacts; i++) { Contact contact = addRandomContact(localAuthor); contacts.add(contact); } @@ -210,7 +220,7 @@ public class TestDataCreatorImpl implements TestDataCreator { String btAddress = getRandomBluetoothAddress(); String uuid = getRandomUUID(); bt.put(BluetoothConstants.PROP_ADDRESS, btAddress); - bt.put(BluetoothConstants.PROP_UUID,uuid); + bt.put(BluetoothConstants.PROP_UUID, uuid); props.put(BluetoothConstants.ID, bt); // LAN @@ -275,7 +285,7 @@ public class TestDataCreatorImpl implements TestDataCreator { throws DbException { for (Contact contact : contacts) { Group group = messagingManager.getContactGroup(contact); - for (int i = 0; i < NUM_PRIVATE_MSGS; i++) { + for (int i = 0; i < numPrivateMsgs; i++) { try { createPrivateMessage(group.getId(), i); } catch (FormatException e) { @@ -284,7 +294,7 @@ public class TestDataCreatorImpl implements TestDataCreator { } } if (LOG.isLoggable(INFO)) { - LOG.info("Created " + NUM_PRIVATE_MSGS + + LOG.info("Created " + numPrivateMsgs + " private messages per contact."); } } @@ -315,13 +325,13 @@ public class TestDataCreatorImpl implements TestDataCreator { private void createBlogPosts(List<Contact> contacts) throws DbException { - for (int i = 0; i < NUM_BLOG_POSTS; i++) { + for (int i = 0; i < numBlogPosts; i++) { Contact contact = contacts.get(random.nextInt(contacts.size())); LocalAuthor author = localAuthors.get(contact); addBlogPost(author, i); } if (LOG.isLoggable(INFO)) { - LOG.info("Created " + NUM_BLOG_POSTS + " blog posts."); + LOG.info("Created " + numBlogPosts + " blog posts."); } } @@ -341,8 +351,8 @@ public class TestDataCreatorImpl implements TestDataCreator { private List<Forum> createForums(List<Contact> contacts) throws DbException { - List<Forum> forums = new ArrayList<>(NUM_FORUMS); - for (int i = 0; i < NUM_FORUMS; i++) { + List<Forum> forums = new ArrayList<>(numForums); + for (int i = 0; i < numForums; i++) { // create forum String name = GROUP_NAMES[random.nextInt(GROUP_NAMES.length)]; Forum forum = forumManager.addForum(name); @@ -361,8 +371,8 @@ public class TestDataCreatorImpl implements TestDataCreator { forums.add(forum); } if (LOG.isLoggable(INFO)) { - LOG.info("Created " + NUM_FORUMS + " forums with " + - NUM_FORUM_POSTS + " posts each."); + LOG.info("Created " + numForums + " forums with " + + numForumPosts + " posts each."); } return forums; } @@ -370,7 +380,7 @@ public class TestDataCreatorImpl implements TestDataCreator { private void createRandomForumPosts(Forum forum, List<Contact> contacts) throws DbException { List<ForumPost> posts = new ArrayList<>(); - for (int i = 0; i < NUM_FORUM_POSTS; i++) { + for (int i = 0; i < numForumPosts; i++) { Contact contact = contacts.get(random.nextInt(contacts.size())); LocalAuthor author = localAuthors.get(contact); long timestamp = clock.currentTimeMillis() - i * 60 * 1000; -- GitLab