Signal-Android/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java

164 lines
5.3 KiB
Java
Raw Normal View History

2018-02-01 19:22:48 -08:00
/*
* Copyright (C) 2015 Open Whisper Systems
2014-02-13 01:35:08 -08:00
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.thoughtcrime.securesms;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
2014-02-13 01:35:08 -08:00
import androidx.appcompat.app.AlertDialog;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper;
2020-11-25 11:36:33 -04:00
import org.thoughtcrime.securesms.conversation.ConversationIntents;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.groups.ui.creategroup.CreateGroupActivity;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
2020-09-23 09:21:55 -04:00
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
import org.whispersystems.libsignal.util.guava.Optional;
2014-02-13 01:35:08 -08:00
import java.io.IOException;
2014-02-13 01:35:08 -08:00
/**
* Activity container for starting a new conversation.
2014-02-13 01:35:08 -08:00
*
* @author Moxie Marlinspike
*
*/
public class NewConversationActivity extends ContactSelectionActivity
implements ContactSelectionListFragment.ListCallback
{
2018-02-01 19:22:48 -08:00
@SuppressWarnings("unused")
2021-03-29 18:37:22 -04:00
private static final String TAG = Log.tag(NewConversationActivity.class);
@Override
2018-02-01 19:22:48 -08:00
public void onCreate(Bundle bundle, boolean ready) {
2018-02-01 19:36:09 -08:00
super.onCreate(bundle, ready);
2018-02-01 19:22:48 -08:00
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
2021-07-12 15:44:59 -03:00
getSupportActionBar().setTitle(R.string.NewConversationActivity__new_message);
}
@Override
public boolean onBeforeContactSelected(Optional<RecipientId> recipientId, String number) {
if (recipientId.isPresent()) {
launch(Recipient.resolved(recipientId.get()));
} else {
Log.i(TAG, "[onContactSelected] Maybe creating a new recipient.");
2020-09-23 09:21:55 -04:00
if (TextSecurePreferences.isPushRegistered(this) && NetworkConstraint.isMet(this)) {
Log.i(TAG, "[onContactSelected] Doing contact refresh.");
AlertDialog progress = SimpleProgressDialog.show(this);
SimpleTask.run(getLifecycle(), () -> {
Recipient resolved = Recipient.external(this, number);
2020-09-23 09:21:55 -04:00
if (!resolved.isRegistered() || !resolved.hasUuid()) {
Log.i(TAG, "[onContactSelected] Not registered or no UUID. Doing a directory refresh.");
try {
DirectoryHelper.refreshDirectoryFor(this, resolved, false);
resolved = Recipient.resolved(resolved.getId());
} catch (IOException e) {
Log.w(TAG, "[onContactSelected] Failed to refresh directory for new contact.");
}
}
return resolved;
}, resolved -> {
progress.dismiss();
launch(resolved);
});
} else {
launch(Recipient.external(this, number));
}
}
return true;
}
2021-07-12 15:44:59 -03:00
@Override
public void onSelectionChanged() {
}
private void launch(Recipient recipient) {
2020-11-25 11:36:33 -04:00
long existingThread = DatabaseFactory.getThreadDatabase(this).getThreadIdIfExistsFor(recipient.getId());
Intent intent = ConversationIntents.createBuilder(this, recipient.getId(), existingThread)
.withDraftText(getIntent().getStringExtra(Intent.EXTRA_TEXT))
.withDataUri(getIntent().getData())
.withDataType(getIntent().getType())
.build();
startActivity(intent);
finish();
2014-02-13 01:35:08 -08:00
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
2020-06-05 20:19:03 -03:00
case android.R.id.home: super.onBackPressed(); return true;
case R.id.menu_refresh: handleManualRefresh(); return true;
case R.id.menu_new_group: handleCreateGroup(); return true;
case R.id.menu_invite: handleInvite(); return true;
}
return false;
}
private void handleManualRefresh() {
contactsFragment.setRefreshing(true);
onRefresh();
}
2020-06-05 20:19:03 -03:00
private void handleCreateGroup() {
startActivity(CreateGroupActivity.newIntent(this));
}
private void handleInvite() {
startActivity(new Intent(this, InviteActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.clear();
getMenuInflater().inflate(R.menu.new_conversation_activity, menu);
super.onCreateOptionsMenu(menu);
return true;
}
@Override
public void onInvite() {
handleInvite();
finish();
}
@Override
public void onNewGroup(boolean forceV1) {
2020-06-05 20:19:03 -03:00
handleCreateGroup();
finish();
}
2014-02-13 01:35:08 -08:00
}