package org.briarproject.android; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import org.briarproject.R; import org.briarproject.android.contact.ContactListActivity; import org.briarproject.android.forum.ForumListActivity; import org.briarproject.android.util.LayoutUtils; import org.briarproject.api.TransportId; import org.briarproject.api.android.ReferenceManager; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.db.DbException; import org.briarproject.api.event.Event; import org.briarproject.api.event.EventBus; import org.briarproject.api.event.EventListener; import org.briarproject.api.event.TransportDisabledEvent; import org.briarproject.api.event.TransportEnabledEvent; import org.briarproject.api.identity.LocalAuthor; import org.briarproject.api.plugins.Plugin; import org.briarproject.api.plugins.PluginManager; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import javax.inject.Inject; import static android.view.Gravity.CENTER; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH; public class DashboardActivity extends BriarActivity implements EventListener { private static final Logger LOG = Logger.getLogger(DashboardActivity.class.getName()); private List transports; private BaseAdapter transportsAdapter; @Inject private ReferenceManager referenceManager; @Inject private PluginManager pluginManager; // Fields that are accessed from background threads must be volatile @Inject private volatile DatabaseComponent db; @Inject private volatile EventBus eventBus; @Override public void onCreate(Bundle state) { super.onCreate(state); handleIntent(getIntent()); } @Override public void onResume() { super.onResume(); eventBus.addListener(this); } @Override public void onPause() { super.onPause(); eventBus.removeListener(this); } @Override public void onNewIntent(Intent i) { super.onNewIntent(i); handleIntent(i); } @Override public void eventOccurred(Event e) { if (e instanceof TransportEnabledEvent) { TransportId id = ((TransportEnabledEvent) e).getTransportId(); if (LOG.isLoggable(INFO)) { LOG.info("TransportEnabledEvent: " + id.getString()); } setTransport(id, true); } else if (e instanceof TransportDisabledEvent) { TransportId id = ((TransportDisabledEvent) e).getTransportId(); if (LOG.isLoggable(INFO)) { LOG.info("TransportDisabledEvent: " + id.getString()); } setTransport(id, false); } } private void handleIntent(Intent i) { boolean failed = i.getBooleanExtra("briar.STARTUP_FAILED", false); long handle = i.getLongExtra("briar.LOCAL_AUTHOR_HANDLE", -1); if (failed) { finish(); LOG.info("Exiting"); System.exit(0); } else if (handle == -1) { // The activity has been launched before showButtons(); } else { // The activity was launched from the setup wizard LocalAuthor a = referenceManager.removeReference(handle, LocalAuthor.class); // The reference may be null if the activity has been recreated, // for example due to screen rotation if (a == null) { showButtons(); } else { showSpinner(); storeLocalAuthor(a); } } } private void showButtons() { ListView.LayoutParams matchMatch = new ListView.LayoutParams(MATCH_PARENT, MATCH_PARENT); final List