diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java index 346c01ef8ba3274459b05758bf1a529a0ec8bcd6..4d82fe74dcfe02cf5e2d3243bc419edeb5550c19 100644 --- a/briar-android/src/org/briarproject/android/ActivityComponent.java +++ b/briar-android/src/org/briarproject/android/ActivityComponent.java @@ -2,25 +2,29 @@ package org.briarproject.android; import android.app.Activity; +import org.briarproject.android.blogs.MyBlogsFragment; +import org.briarproject.android.contact.ContactListFragment; import org.briarproject.android.contact.ConversationActivity; import org.briarproject.android.forum.AvailableForumsActivity; import org.briarproject.android.forum.ContactSelectorFragment; import org.briarproject.android.forum.CreateForumActivity; import org.briarproject.android.forum.ForumActivity; +import org.briarproject.android.forum.ForumListFragment; import org.briarproject.android.forum.ForumSharingStatusActivity; import org.briarproject.android.forum.ShareForumActivity; import org.briarproject.android.forum.ShareForumMessageFragment; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.identity.CreateIdentityActivity; +import org.briarproject.android.introduction.ContactChooserFragment; import org.briarproject.android.introduction.IntroductionActivity; import org.briarproject.android.introduction.IntroductionMessageFragment; import org.briarproject.android.invitation.AddContactActivity; +import org.briarproject.android.keyagreement.ChooseIdentityFragment; import org.briarproject.android.keyagreement.KeyAgreementActivity; +import org.briarproject.android.keyagreement.ShowQrCodeFragment; import org.briarproject.android.panic.PanicPreferencesActivity; import org.briarproject.android.panic.PanicResponderActivity; -import javax.inject.Named; - import dagger.Component; @ActivityScope @@ -66,33 +70,16 @@ public interface ActivityComponent { void inject(IntroductionActivity activity); - @Named("ContactListFragment") - BaseFragment newContactListFragment(); - - @Named("ForumListFragment") - BaseFragment newForumListFragment(); - - @Named("BlogsFragment") - BaseFragment newBlogsFragment(); - - @Named("MyBlogsFragment") - BaseFragment newMyBlogsFragment(); - - @Named("ChooseIdentityFragment") - BaseFragment newChooseIdentityFragment(); - - @Named("ShowQrCodeFragment") - BaseFragment newShowQrCodeFragment(); - - @Named("ContactChooserFragment") - BaseFragment newContactChooserFragment(); - - @Named("ContactSelectorFragment") - ContactSelectorFragment newContactSelectorFragment(); - - @Named("ShareForumMessageFragment") - ShareForumMessageFragment newShareForumMessageFragment(); + // Fragments + void inject(ContactListFragment fragment); + void inject(ForumListFragment fragment); + void inject(BaseFragment fragment); + void inject(MyBlogsFragment fragment); + void inject(ChooseIdentityFragment fragment); + void inject(ShowQrCodeFragment fragment); + void inject(ContactChooserFragment fragment); + void inject(ContactSelectorFragment fragment); + void inject(ShareForumMessageFragment fragment); + void inject(IntroductionMessageFragment fragment); - @Named("IntroductionMessageFragment") - IntroductionMessageFragment newIntroductionMessageFragment(); } diff --git a/briar-android/src/org/briarproject/android/ActivityModule.java b/briar-android/src/org/briarproject/android/ActivityModule.java index 5ba13b3ec88abbedcae21afa25fefbdae4b89e77..ea984bca0bab42760c652869ea561f87c85e69ee 100644 --- a/briar-android/src/org/briarproject/android/ActivityModule.java +++ b/briar-android/src/org/briarproject/android/ActivityModule.java @@ -3,19 +3,13 @@ package org.briarproject.android; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; -import android.os.Bundle; -import org.briarproject.android.blogs.BlogsFragment; -import org.briarproject.android.blogs.MyBlogsFragment; -import org.briarproject.android.contact.ContactListFragment; import org.briarproject.android.controller.BriarController; import org.briarproject.android.controller.BriarControllerImpl; import org.briarproject.android.controller.ConfigController; import org.briarproject.android.controller.ConfigControllerImpl; import org.briarproject.android.controller.DbController; import org.briarproject.android.controller.DbControllerImpl; -import org.briarproject.android.forum.ForumController; -import org.briarproject.android.forum.ForumControllerImpl; import org.briarproject.android.controller.NavDrawerController; import org.briarproject.android.controller.NavDrawerControllerImpl; import org.briarproject.android.controller.PasswordController; @@ -23,15 +17,9 @@ import org.briarproject.android.controller.PasswordControllerImpl; import org.briarproject.android.controller.SetupController; import org.briarproject.android.controller.SetupControllerImpl; import org.briarproject.android.controller.TransportStateListener; -import org.briarproject.android.forum.ContactSelectorFragment; -import org.briarproject.android.forum.ForumListFragment; +import org.briarproject.android.forum.ForumController; +import org.briarproject.android.forum.ForumControllerImpl; import org.briarproject.android.forum.ForumTestControllerImpl; -import org.briarproject.android.forum.ShareForumMessageFragment; -import org.briarproject.android.fragment.BaseFragment; -import org.briarproject.android.introduction.ContactChooserFragment; -import org.briarproject.android.introduction.IntroductionMessageFragment; -import org.briarproject.android.keyagreement.ChooseIdentityFragment; -import org.briarproject.android.keyagreement.ShowQrCodeFragment; import javax.inject.Named; @@ -137,78 +125,4 @@ public class ActivityModule { return new BriarServiceConnection(); } - @Provides - @Named("ForumListFragment") - BaseFragment provideForumListFragment(ForumListFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("ContactListFragment") - BaseFragment provideContactListFragment(ContactListFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("BlogsFragment") - BaseFragment provideBlogsFragment(BlogsFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("MyBlogsFragment") - BaseFragment provideMyBlogsFragment(MyBlogsFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("ChooseIdentityFragment") - BaseFragment provideChooseIdentityFragment( - ChooseIdentityFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("ShowQrCodeFragment") - BaseFragment provideShowQrCodeFragment(ShowQrCodeFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("ContactChooserFragment") - BaseFragment provideContactChooserFragment( - ContactChooserFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("ContactSelectorFragment") - ContactSelectorFragment provideContactSelectorFragment( - ContactSelectorFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("ShareForumMessageFragment") - ShareForumMessageFragment provideShareForumMessageFragment( - ShareForumMessageFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } - - @Provides - @Named("IntroductionMessageFragment") - IntroductionMessageFragment provideIntroductionMessageFragment( - IntroductionMessageFragment fragment) { - fragment.setArguments(new Bundle()); - return fragment; - } } diff --git a/briar-android/src/org/briarproject/android/BaseActivity.java b/briar-android/src/org/briarproject/android/BaseActivity.java index 38063e239e5b46ea9ce0ae233f06c76d647bf495..0ab5d1405f17dcf819dc3c6f462822ff8ae033e3 100644 --- a/briar-android/src/org/briarproject/android/BaseActivity.java +++ b/briar-android/src/org/briarproject/android/BaseActivity.java @@ -49,6 +49,10 @@ public abstract class BaseActivity extends AppCompatActivity { } } + public ActivityComponent getActivityComponent() { + return activityComponent; + } + // This exists to make test overrides easier protected ActivityModule getActivityModule() { return new ActivityModule(this); diff --git a/briar-android/src/org/briarproject/android/BriarFragmentActivity.java b/briar-android/src/org/briarproject/android/BriarFragmentActivity.java index ef7a9fd6a53111e6bef31a6493dd0a737c6750c1..a46581c471a1af1bf524aa15461ee918d453afdf 100644 --- a/briar-android/src/org/briarproject/android/BriarFragmentActivity.java +++ b/briar-android/src/org/briarproject/android/BriarFragmentActivity.java @@ -52,13 +52,17 @@ public abstract class BriarFragmentActivity extends BriarActivity { exiting. This models the typical Google navigation behaviour such as in Gmail/Inbox. */ - startFragment(activityComponent.newContactListFragment()); + startFragment(ContactListFragment.newInstance()); } else { super.onBackPressed(); } } + public void onFragmentCreated(String tag) { + updateToolbarTitle(tag); + } + protected void startFragment(BaseFragment fragment) { if (getSupportFragmentManager().getBackStackEntryCount() == 0) startFragment(fragment, false); @@ -94,6 +98,5 @@ public abstract class BriarFragmentActivity extends BriarActivity { trans.addToBackStack(fragment.getUniqueTag()); } trans.commit(); - updateToolbarTitle(fragment.getUniqueTag()); } } diff --git a/briar-android/src/org/briarproject/android/NavDrawerActivity.java b/briar-android/src/org/briarproject/android/NavDrawerActivity.java index 66d7d19b56d6d37cde92d1f06abb64181d4da73e..847a8d7e6a76913fe078b70512981b3090d83779 100644 --- a/briar-android/src/org/briarproject/android/NavDrawerActivity.java +++ b/briar-android/src/org/briarproject/android/NavDrawerActivity.java @@ -21,9 +21,12 @@ import android.widget.ImageView; import android.widget.TextView; import org.briarproject.R; +import org.briarproject.android.blogs.BlogsFragment; +import org.briarproject.android.contact.ContactListFragment; import org.briarproject.android.controller.NavDrawerController; import org.briarproject.android.controller.TransportStateListener; import org.briarproject.android.controller.handler.UiResultHandler; +import org.briarproject.android.forum.ForumListFragment; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.util.CustomAnimations; import org.briarproject.api.TransportId; @@ -49,8 +52,6 @@ public class NavDrawerActivity extends BriarFragmentActivity implements public static final String INTENT_CONTACTS = "intent_contacts"; public static final String INTENT_FORUMS = "intent_forums"; - private static final String KEY_CURRENT_FRAGMENT_ID = "key_current_id"; - private static final Logger LOG = Logger.getLogger(NavDrawerActivity.class.getName()); @@ -66,7 +67,6 @@ public class NavDrawerActivity extends BriarFragmentActivity implements private List<Transport> transports; private BaseAdapter transportsAdapter; - private int currentFragmentId = R.id.nav_btn_contacts; @Override protected void onNewIntent(Intent intent) { @@ -74,10 +74,12 @@ public class NavDrawerActivity extends BriarFragmentActivity implements exitIfStartupFailed(intent); checkAuthorHandle(intent); clearBackStack(); - if (intent.getBooleanExtra(INTENT_FORUMS, false)) - startFragment(activityComponent.newForumListFragment()); - else if (intent.getBooleanExtra(INTENT_CONTACTS, false)) - startFragment(activityComponent.newContactListFragment()); + if (intent.getBooleanExtra(INTENT_FORUMS, false)) { + startFragment(ForumListFragment.newInstance()); + } + else if (intent.getBooleanExtra(INTENT_CONTACTS, false)) { + startFragment(ContactListFragment.newInstance()); + } } @Override @@ -109,22 +111,17 @@ public class NavDrawerActivity extends BriarFragmentActivity implements R.string.nav_drawer_close_description); drawerLayout.addDrawerListener(drawerToggle); navigation.setNavigationItemSelectedListener(this); - if (state == null) { - navigation.setCheckedItem(R.id.nav_btn_contacts); - startFragment(activityComponent.newContactListFragment()); - } checkAuthorHandle(getIntent()); initializeTransports(getLayoutInflater()); transportsView.setAdapter(transportsAdapter); welcomeMessageCheck(); - } - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(KEY_CURRENT_FRAGMENT_ID, currentFragmentId); + if (state == null) { + navigation.setCheckedItem(R.id.nav_btn_contacts); + startFragment(ContactListFragment.newInstance()); + } } private void welcomeMessageCheck() { @@ -171,16 +168,17 @@ public class NavDrawerActivity extends BriarFragmentActivity implements }); } - private void loadCurrentFragment() { - switch (currentFragmentId) { + private void loadFragment(int fragmentId) { + // TODO re-use fragments from the manager when possible + switch (fragmentId) { case R.id.nav_btn_contacts: - startFragment(activityComponent.newContactListFragment()); + startFragment(ContactListFragment.newInstance()); break; case R.id.nav_btn_forums: - startFragment(activityComponent.newForumListFragment()); + startFragment(ForumListFragment.newInstance()); break; case R.id.nav_btn_blogs: - startFragment(activityComponent.newBlogsFragment()); + startFragment(BlogsFragment.newInstance()); break; case R.id.nav_btn_settings: startActivity(new Intent(this, SettingsActivity.class)); @@ -195,8 +193,7 @@ public class NavDrawerActivity extends BriarFragmentActivity implements public boolean onNavigationItemSelected(MenuItem item) { drawerLayout.closeDrawer(START); clearBackStack(); - currentFragmentId = item.getItemId(); - loadCurrentFragment(); + loadFragment(item.getItemId()); return true; } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java index 5d4521803f0fa3fffe95fc47b7d4b53de8ca763e..a736537ff9257943e90197255ef9b08e42079765 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogsFragment.java @@ -12,25 +12,25 @@ import android.view.View; import android.view.ViewGroup; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseFragment; -import javax.inject.Inject; - public class BlogsFragment extends BaseFragment { public final static String TAG = BlogsFragment.class.getName(); - // TODO add your first fragment here - //@Inject - //Lazy<MyBlogsFragment> myBlogsFragment; - private static final String SELECTED_TAB = "selectedTab"; private TabLayout tabLayout; - @Inject - public BlogsFragment() { + public static BlogsFragment newInstance() { + + Bundle args = new Bundle(); + + BlogsFragment fragment = new BlogsFragment(); + fragment.setArguments(args); + return fragment; } - + @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -72,6 +72,11 @@ public class BlogsFragment extends BaseFragment { return TAG; } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + private static class TabAdapter extends FragmentStatePagerAdapter { private String[] titles; diff --git a/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java b/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java index e20fb6c1e9f065b09db5c39931f5f38a75b60501..572bc516eb02192deee98f8b4b0d9a7965e120c5 100644 --- a/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/MyBlogsFragment.java @@ -8,10 +8,9 @@ import android.view.ViewGroup; import android.widget.TextView; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseFragment; -import java.util.logging.Logger; - import javax.inject.Inject; public class MyBlogsFragment extends BaseFragment { @@ -52,4 +51,9 @@ public class MyBlogsFragment extends BaseFragment { return TAG; } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + } diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java index 7b71d84f040b0086010ce833d0d38a082d422a83..e76c39e86fc229ad968cc6917318507e08905144 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java @@ -14,6 +14,7 @@ import android.view.View; import android.view.ViewGroup; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.keyagreement.KeyAgreementActivity; import org.briarproject.android.util.BriarRecyclerView; @@ -84,9 +85,13 @@ public class ContactListFragment extends BaseFragment implements EventListener { @Inject protected volatile ForumSharingManager forumSharingManager; - @Inject - public ContactListFragment() { - + public static ContactListFragment newInstance() { + + Bundle args = new Bundle(); + + ContactListFragment fragment = new ContactListFragment(); + fragment.setArguments(args); + return fragment; } @Override @@ -94,6 +99,11 @@ public class ContactListFragment extends BaseFragment implements EventListener { return TAG; } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -154,7 +164,6 @@ public class ContactListFragment extends BaseFragment implements EventListener { return contentView; } - @Override public void onResume() { super.onResume(); diff --git a/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java b/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java index 313231ebcbdbc8f74aabae4d41ac4191e9b2f61d..99f1f41c6109fe9a6f7e14ea0c44e83ccfdaf6c5 100644 --- a/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java +++ b/briar-android/src/org/briarproject/android/forum/ContactSelectorFragment.java @@ -13,6 +13,7 @@ import android.view.View; import android.view.ViewGroup; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.contact.BaseContactListAdapter; import org.briarproject.android.contact.ContactListItem; import org.briarproject.android.fragment.BaseFragment; @@ -64,15 +65,18 @@ public class ContactSelectorFragment extends BaseFragment implements protected volatile GroupId groupId; - public void initBundle(GroupId groupId) { - Bundle bundle = new Bundle(); - bundle.putByteArray(GROUP_ID, groupId.getBytes()); - setArguments(bundle); - } + public static ContactSelectorFragment newInstance(GroupId groupId) { - @Inject - public ContactSelectorFragment() { + Bundle args = new Bundle(); + args.putByteArray(GROUP_ID, groupId.getBytes()); + ContactSelectorFragment fragment = new ContactSelectorFragment(); + fragment.setArguments(args); + return fragment; + } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); } @Override diff --git a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java index ea33d2b3791ef52c646f3dec39acbef7929a679f..0a1cb32ef58ca3c17f7a59aceb71602ca97f5157 100644 --- a/briar-android/src/org/briarproject/android/forum/ForumListFragment.java +++ b/briar-android/src/org/briarproject/android/forum/ForumListFragment.java @@ -14,6 +14,7 @@ import android.view.View; import android.view.ViewGroup; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseEventFragment; import org.briarproject.android.util.BriarRecyclerView; import org.briarproject.api.db.DbException; @@ -59,9 +60,13 @@ public class ForumListFragment extends BaseEventFragment implements @Inject protected volatile ForumManager forumManager; @Inject protected volatile ForumSharingManager forumSharingManager; - @Inject - public ForumListFragment() { + public static ForumListFragment newInstance() { + Bundle args = new Bundle(); + + ForumListFragment fragment = new ForumListFragment(); + fragment.setArguments(args); + return fragment; } @Nullable @@ -96,6 +101,11 @@ public class ForumListFragment extends BaseEventFragment implements return TAG; } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + @Override public void onResume() { super.onResume(); diff --git a/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java index 81bcdf8cd7025b179a4a4ba66ab36768926db478..d789e854f69307e931b9202376bacdea20a75fcd 100644 --- a/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java +++ b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +// TODO extend the BriarFragmentActivity ? public class ShareForumActivity extends BriarActivity implements BaseFragment.BaseFragmentListener { @@ -33,8 +34,7 @@ public class ShareForumActivity extends BriarActivity implements if (savedInstanceState == null) { ContactSelectorFragment contactSelectorFragment = - activityComponent.newContactSelectorFragment(); - contactSelectorFragment.initBundle(groupId); + ContactSelectorFragment.newInstance(groupId); getSupportFragmentManager().beginTransaction() .add(R.id.shareForumContainer, contactSelectorFragment) .commit(); @@ -50,8 +50,7 @@ public class ShareForumActivity extends BriarActivity implements Collection<ContactId> contacts) { ShareForumMessageFragment messageFragment = - activityComponent.newShareForumMessageFragment(); - messageFragment.initBundle(groupId, contacts); + ShareForumMessageFragment.newInstance(groupId, contacts); getSupportFragmentManager().beginTransaction() .setCustomAnimations(android.R.anim.fade_in, @@ -86,7 +85,7 @@ public class ShareForumActivity extends BriarActivity implements // turn contact integers from a bundle back to ContactIds List<ContactId> contacts = new ArrayList<>(intContacts.size()); - for(Integer c : intContacts) { + for (Integer c : intContacts) { contacts.add(new ContactId(c)); } return contacts; @@ -102,4 +101,9 @@ public class ShareForumActivity extends BriarActivity implements // this is handled by the recycler view in ContactSelectorFragment } + @Override + public void onFragmentCreated(String tag) { + + } + } diff --git a/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java b/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java index cf2b6e16062c4ffb5990fe27b6d0baa28e5f1afa..e8682a13695e96341100c14c9eb2e2d2e290218d 100644 --- a/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java +++ b/briar-android/src/org/briarproject/android/forum/ShareForumMessageFragment.java @@ -12,6 +12,7 @@ import android.widget.EditText; import android.widget.Toast; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.api.contact.ContactId; import org.briarproject.api.db.DbException; @@ -46,16 +47,13 @@ public class ShareForumMessageFragment extends BaseFragment { private volatile GroupId groupId; private volatile Collection<ContactId> contacts; - public void initBundle(GroupId groupId, Collection<ContactId> contacts) { - Bundle bundle = new Bundle(); - bundle.putByteArray(GROUP_ID, groupId.getBytes()); - bundle.putIntegerArrayList(CONTACTS, getContactsFromIds(contacts)); - setArguments(bundle); - } - - @Inject - public ShareForumMessageFragment() { - + public static ShareForumMessageFragment newInstance(GroupId groupId, Collection<ContactId> contacts) { + Bundle args = new Bundle(); + args.putByteArray(GROUP_ID, groupId.getBytes()); + args.putIntegerArrayList(CONTACTS, getContactsFromIds(contacts)); + ShareForumMessageFragment fragment = new ShareForumMessageFragment(); + fragment.setArguments(args); + return fragment; } @Override @@ -119,6 +117,11 @@ public class ShareForumMessageFragment extends BaseFragment { return TAG; } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + public void onButtonClick() { // disable button to prevent accidental double invitations ui.button.setEnabled(false); diff --git a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java index cb0c69c93f682980593c75c9b3ff7c6b5f42236a..75d480bfbfe78a18600f4338f3c57e4892dfb9e7 100644 --- a/briar-android/src/org/briarproject/android/fragment/BaseFragment.java +++ b/briar-android/src/org/briarproject/android/fragment/BaseFragment.java @@ -2,14 +2,19 @@ package org.briarproject.android.fragment; import android.content.Context; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import org.briarproject.android.ActivityComponent; + public abstract class BaseFragment extends Fragment { protected BaseFragmentListener listener; public abstract String getUniqueTag(); + public abstract void injectFragment(ActivityComponent component); + @Override public void onAttach(Context context) { super.onAttach(context); @@ -26,6 +31,14 @@ public abstract class BaseFragment extends Fragment { super.onCreate(savedInstanceState); } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + this.injectFragment(listener.getActivityComponent()); + listener.onFragmentCreated(getUniqueTag()); + } + public interface BaseFragmentListener { void showLoadingScreen(boolean isBlocking, int stringId); @@ -35,5 +48,9 @@ public abstract class BaseFragment extends Fragment { void runOnUiThread(Runnable runnable); void runOnDbThread(Runnable runnable); + + ActivityComponent getActivityComponent(); + + void onFragmentCreated(String tag); } } diff --git a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java index 2a2bd5143b60c7c8572bfa28bb525e90b7ba1d18..8bf810454f99d6a169772ab96162bd503369c5cd 100644 --- a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java +++ b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java @@ -12,6 +12,7 @@ import android.view.View; import android.view.ViewGroup; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.contact.ContactListAdapter; import org.briarproject.android.contact.ContactListItem; import org.briarproject.android.contact.ConversationItem; @@ -66,9 +67,13 @@ public class ContactChooserFragment extends BaseFragment { @Inject protected volatile ConnectionRegistry connectionRegistry; - @Inject - public ContactChooserFragment() { - + public static ContactChooserFragment newInstance() { + + Bundle args = new Bundle(); + + ContactChooserFragment fragment = new ContactChooserFragment(); + fragment.setArguments(args); + return fragment; } @Override @@ -142,6 +147,11 @@ public class ContactChooserFragment extends BaseFragment { return TAG; } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); + } + private void loadContacts() { introductionActivity.runOnDbThread(new Runnable() { @Override diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java b/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java index 5c00e2562888ac2af45ec9dc2406e3c59a338b99..b42516e56a21b62758e65cfd0c5f5e522a1fd447 100644 --- a/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java +++ b/briar-android/src/org/briarproject/android/introduction/IntroductionActivity.java @@ -15,6 +15,7 @@ import org.briarproject.android.BriarActivity; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.api.contact.Contact; +// TODO extend the BriarFragmentActivity ? public class IntroductionActivity extends BriarActivity implements BaseFragment.BaseFragmentListener { @@ -37,7 +38,7 @@ public class IntroductionActivity extends BriarActivity implements getSupportFragmentManager() .beginTransaction() .add(R.id.introductionContainer, - activityComponent.newContactChooserFragment()) + ContactChooserFragment.newInstance()) .commit(); } } @@ -57,6 +58,11 @@ public class IntroductionActivity extends BriarActivity implements // this is handled by the recycler view in ContactChooserFragment } + @Override + public void onFragmentCreated(String tag) { + + } + @Override public boolean onOptionsItemSelected(final MenuItem item) { // Handle presses on the action bar items @@ -86,8 +92,8 @@ public class IntroductionActivity extends BriarActivity implements public void showMessageScreen(View view, Contact c1, Contact c2) { IntroductionMessageFragment messageFragment = - activityComponent.newIntroductionMessageFragment(); - messageFragment.initBundle(c1.getId().getInt(), c2.getId().getInt()); + IntroductionMessageFragment + .newInstance(c1.getId().getInt(), c2.getId().getInt()); if (Build.VERSION.SDK_INT >= 21) { messageFragment.setSharedElementEnterTransition(new ChangeBounds()); diff --git a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java index 93b7c6c070412e86891e67099eff3f58d87125e6..42e0b93d1e74c9819e35c8a85df69b3b2add7150 100644 --- a/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java +++ b/briar-android/src/org/briarproject/android/introduction/IntroductionMessageFragment.java @@ -13,6 +13,7 @@ import android.widget.TextView; import android.widget.Toast; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.api.FormatException; import org.briarproject.api.contact.Contact; @@ -51,19 +52,21 @@ public class IntroductionMessageFragment extends BaseFragment { @Inject protected volatile IntroductionManager introductionManager; - public void initBundle(int contactId1, int contactId2) { + public static IntroductionMessageFragment newInstance(int contactId1, int contactId2) { Bundle args = new Bundle(); args.putInt(CONTACT_ID_1, contactId1); args.putInt(CONTACT_ID_2, contactId2); - setArguments(args); + IntroductionMessageFragment fragment = + new IntroductionMessageFragment(); + fragment.setArguments(args); + return fragment; } - @Inject - public IntroductionMessageFragment() { - + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); } - @Override public void onAttach(Context context) { super.onAttach(context); @@ -94,6 +97,13 @@ public class IntroductionMessageFragment extends BaseFragment { ui.text.setVisibility(GONE); ui.button.setEnabled(false); + return v; + } + + @Override + public void onStart() { + super.onStart(); + // get contact IDs from fragment arguments int contactId1 = getArguments().getInt(CONTACT_ID_1, -1); int contactId2 = getArguments().getInt(CONTACT_ID_2, -1); @@ -101,11 +111,8 @@ public class IntroductionMessageFragment extends BaseFragment { throw new java.lang.InstantiationError( "You need to use newInstance() to instantiate"); } - // get contacts and then show view prepareToSetUpViews(contactId1, contactId2); - - return v; } @Override diff --git a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java index c74b0a366bdebeaefef12364bda30672c0ad766c..176a277948302f91595c93ed1a42b10eff7c8502 100644 --- a/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java +++ b/briar-android/src/org/briarproject/android/keyagreement/ChooseIdentityFragment.java @@ -13,6 +13,7 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Spinner; import org.briarproject.R; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.identity.CreateIdentityActivity; import org.briarproject.android.identity.LocalAuthorItem; @@ -57,9 +58,18 @@ public class ChooseIdentityFragment extends BaseFragment @Inject protected volatile IdentityManager identityManager; - @Inject - public ChooseIdentityFragment() { + public static ChooseIdentityFragment newInstance() { + + Bundle args = new Bundle(); + + ChooseIdentityFragment fragment = new ChooseIdentityFragment(); + fragment.setArguments(args); + return fragment; + } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); } @Override @@ -104,6 +114,11 @@ public class ChooseIdentityFragment extends BaseFragment } }); + } + + @Override + public void onStart() { + super.onStart(); loadLocalAuthors(); } diff --git a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java b/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java index 40122d928a1cd928042c0334156dd1209e0140da..e72e742e25b06190096eae7d2535dcb66bb5e1e7 100644 --- a/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java +++ b/briar-android/src/org/briarproject/android/keyagreement/KeyAgreementActivity.java @@ -94,11 +94,11 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements STEPS)); switch (step) { case STEP_QR: - startFragment(activityComponent.newShowQrCodeFragment()); + startFragment(ShowQrCodeFragment.newInstance()); break; case STEP_ID: default: - startFragment(activityComponent.newChooseIdentityFragment()); + startFragment(ChooseIdentityFragment.newInstance()); break; } } diff --git a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java index 60c7ca85bd794414fa1dd27d2b0ddce1fe455a66..dacca905bf432a02239e28d17d17dd1178c69237 100644 --- a/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java +++ b/briar-android/src/org/briarproject/android/keyagreement/ShowQrCodeFragment.java @@ -21,7 +21,7 @@ import android.widget.Toast; import com.google.zxing.Result; import org.briarproject.R; -import org.briarproject.android.AndroidComponent; +import org.briarproject.android.ActivityComponent; import org.briarproject.android.api.AndroidExecutor; import org.briarproject.android.fragment.BaseEventFragment; import org.briarproject.android.util.CameraView; @@ -86,9 +86,18 @@ public class ShowQrCodeFragment extends BaseEventFragment private volatile KeyAgreementTask task; private volatile boolean waitingForBluetooth; - @Inject - public ShowQrCodeFragment() { + public static ShowQrCodeFragment newInstance() { + + Bundle args = new Bundle(); + + ShowQrCodeFragment fragment = new ShowQrCodeFragment(); + fragment.setArguments(args); + return fragment; + } + @Override + public void injectFragment(ActivityComponent component) { + component.inject(this); } @Override diff --git a/build.gradle b/build.gradle index 816417b2f7e1f9cccb9c346eb7885cfedcfbe0cb..c1b7382b30428dccde26ebfd76d6cf8e0840e137 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.1.2' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'de.undercouch:gradle-download-task:2.1.0' classpath files('briar-core/libs/gradle-witness.jar')