mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-23 15:51:29 +00:00
Unused code cleanup.
This commit is contained in:
parent
20b6763408
commit
12804a30c0
@ -221,7 +221,11 @@ android {
|
|||||||
'proguard/proguard-ez-vcard.pro',
|
'proguard/proguard-ez-vcard.pro',
|
||||||
'proguard/proguard.pro'
|
'proguard/proguard.pro'
|
||||||
testProguardFiles 'proguard/proguard-automation.pro'
|
testProguardFiles 'proguard/proguard-automation.pro'
|
||||||
|
|
||||||
|
// Uncomment for testing this build type without signing.
|
||||||
|
// signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
|
|
||||||
debug {
|
debug {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
|
|
||||||
|
@ -179,14 +179,6 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name="org.thoughtcrime.securesms.CountrySelectionActivity"
|
android:name="org.thoughtcrime.securesms.CountrySelectionActivity"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
|
||||||
<activity
|
|
||||||
android:name="org.thoughtcrime.securesms.PromptMmsActivity"
|
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
|
||||||
android:label="Configure MMS Settings"
|
|
||||||
android:windowSoftInputMode="stateUnchanged" />
|
|
||||||
<activity
|
|
||||||
android:name="org.thoughtcrime.securesms.preferences.MmsPreferencesActivity"
|
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.thoughtcrime.securesms.ShareActivity"
|
android:name="org.thoughtcrime.securesms.ShareActivity"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||||
@ -283,10 +275,6 @@
|
|||||||
android:theme="@style/Theme.TextSecure.DayNight"
|
android:theme="@style/Theme.TextSecure.DayNight"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:windowSoftInputMode="stateHidden" />
|
android:windowSoftInputMode="stateHidden" />
|
||||||
<activity
|
|
||||||
android:name="org.thoughtcrime.securesms.GroupCreateActivity"
|
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
|
||||||
android:windowSoftInputMode="stateVisible" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.thoughtcrime.securesms.DatabaseMigrationActivity"
|
android:name="org.thoughtcrime.securesms.DatabaseMigrationActivity"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||||
@ -387,9 +375,6 @@
|
|||||||
android:name="org.thoughtcrime.securesms.RecipientPreferenceActivity"
|
android:name="org.thoughtcrime.securesms.RecipientPreferenceActivity"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||||
android:theme="@style/Theme.Session.DayNight.NoActionBar" />
|
android:theme="@style/Theme.Session.DayNight.NoActionBar" />
|
||||||
<activity
|
|
||||||
android:name="org.thoughtcrime.securesms.BlockedContactsActivity"
|
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name="org.thoughtcrime.securesms.scribbles.StickerSelectActivity"
|
android:name="org.thoughtcrime.securesms.scribbles.StickerSelectActivity"
|
||||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||||
|
@ -1,143 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.database.Cursor;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.ListFragment;
|
|
||||||
import androidx.loader.app.LoaderManager;
|
|
||||||
import androidx.loader.content.Loader;
|
|
||||||
import androidx.cursoradapter.widget.CursorAdapter;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.AdapterView;
|
|
||||||
import android.widget.ListView;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.Address;
|
|
||||||
import org.thoughtcrime.securesms.database.loaders.BlockedContactsLoader;
|
|
||||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
|
||||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
|
||||||
import org.thoughtcrime.securesms.preferences.BlockedContactListItem;
|
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
|
|
||||||
public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity {
|
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
|
||||||
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPreCreate() {
|
|
||||||
dynamicTheme.onCreate(this);
|
|
||||||
dynamicLanguage.onCreate(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle bundle, boolean ready) {
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
getSupportActionBar().setTitle(R.string.BlockedContactsActivity_blocked_contacts);
|
|
||||||
initFragment(android.R.id.content, new BlockedContactsFragment());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
dynamicTheme.onResume(this);
|
|
||||||
dynamicLanguage.onResume(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case android.R.id.home: finish(); return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class BlockedContactsFragment
|
|
||||||
extends ListFragment
|
|
||||||
implements LoaderManager.LoaderCallbacks<Cursor>, ListView.OnItemClickListener
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
|
|
||||||
return inflater.inflate(R.layout.blocked_contacts_fragment, container, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle bundle) {
|
|
||||||
super.onCreate(bundle);
|
|
||||||
setListAdapter(new BlockedContactAdapter(getActivity(), GlideApp.with(this), null));
|
|
||||||
getLoaderManager().initLoader(0, null, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityCreated(Bundle bundle) {
|
|
||||||
super.onActivityCreated(bundle);
|
|
||||||
getListView().setOnItemClickListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NonNull Loader<Cursor> onCreateLoader(int id, Bundle args) {
|
|
||||||
return new BlockedContactsLoader(getActivity());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) {
|
|
||||||
if (getListAdapter() != null) {
|
|
||||||
((CursorAdapter) getListAdapter()).changeCursor(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
|
|
||||||
if (getListAdapter() != null) {
|
|
||||||
((CursorAdapter) getListAdapter()).changeCursor(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
|
||||||
Recipient recipient = ((BlockedContactListItem)view).getRecipient();
|
|
||||||
Intent intent = new Intent(getActivity(), RecipientPreferenceActivity.class);
|
|
||||||
intent.putExtra(RecipientPreferenceActivity.ADDRESS_EXTRA, recipient.getAddress());
|
|
||||||
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class BlockedContactAdapter extends CursorAdapter {
|
|
||||||
|
|
||||||
private final GlideRequests glideRequests;
|
|
||||||
|
|
||||||
BlockedContactAdapter(@NonNull Context context, @NonNull GlideRequests glideRequests, @Nullable Cursor c) {
|
|
||||||
super(context, c);
|
|
||||||
this.glideRequests = glideRequests;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
|
||||||
return LayoutInflater.from(context)
|
|
||||||
.inflate(R.layout.blocked_contact_list_item, parent, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bindView(View view, Context context, Cursor cursor) {
|
|
||||||
String address = cursor.getString(1);
|
|
||||||
Recipient recipient = Recipient.from(context, Address.fromSerialized(address), true);
|
|
||||||
|
|
||||||
((BlockedContactListItem) view).set(glideRequests, recipient);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2015 Open Whisper Systems
|
|
||||||
*
|
|
||||||
* 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.os.Bundle;
|
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.components.ContactFilterToolbar;
|
|
||||||
import org.thoughtcrime.securesms.loki.fragments.ContactSelectionListFragment;
|
|
||||||
import org.thoughtcrime.securesms.loki.fragments.ContactSelectionListLoader.DisplayMode;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base activity container for selecting a list of contacts.
|
|
||||||
*
|
|
||||||
* @author Moxie Marlinspike
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public abstract class ContactSelectionActivity extends PassphraseRequiredActionBarActivity
|
|
||||||
implements SwipeRefreshLayout.OnRefreshListener,
|
|
||||||
ContactSelectionListFragment.OnContactSelectedListener
|
|
||||||
{
|
|
||||||
private static final String TAG = ContactSelectionActivity.class.getSimpleName();
|
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
|
|
||||||
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
|
|
||||||
|
|
||||||
protected ContactSelectionListFragment contactsFragment;
|
|
||||||
|
|
||||||
private ContactFilterToolbar toolbar;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreCreate() {
|
|
||||||
dynamicTheme.onCreate(this);
|
|
||||||
dynamicLanguage.onCreate(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle icicle, boolean ready) {
|
|
||||||
if (!getIntent().hasExtra(ContactSelectionListFragment.DISPLAY_MODE)) {
|
|
||||||
getIntent().putExtra(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
setContentView(R.layout.contact_selection_activity);
|
|
||||||
|
|
||||||
initializeToolbar();
|
|
||||||
initializeResources();
|
|
||||||
initializeSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
dynamicTheme.onResume(this);
|
|
||||||
dynamicLanguage.onResume(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ContactFilterToolbar getToolbar() {
|
|
||||||
return toolbar;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeToolbar() {
|
|
||||||
this.toolbar = ViewUtil.findById(this, R.id.toolbar);
|
|
||||||
setSupportActionBar(toolbar);
|
|
||||||
|
|
||||||
assert getSupportActionBar() != null;
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
|
|
||||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
|
||||||
getSupportActionBar().setIcon(null);
|
|
||||||
getSupportActionBar().setLogo(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeResources() {
|
|
||||||
contactsFragment = (ContactSelectionListFragment) getSupportFragmentManager().findFragmentById(R.id.contact_selection_list_fragment);
|
|
||||||
contactsFragment.setOnContactSelectedListener(this);
|
|
||||||
contactsFragment.setOnRefreshListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeSearch() {
|
|
||||||
toolbar.setOnFilterChangedListener(filter -> contactsFragment.setQueryFilter(filter));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRefresh() { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onContactSelected(String number) {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onContactDeselected(String number) {}
|
|
||||||
}
|
|
@ -1,605 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2014 Open Whisper Systems
|
|
||||||
*
|
|
||||||
* 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.app.Activity;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuInflater;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.ListView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
|
||||||
import com.bumptech.glide.request.target.SimpleTarget;
|
|
||||||
import com.bumptech.glide.request.transition.Transition;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.avatar.AvatarSelection;
|
|
||||||
import org.thoughtcrime.securesms.components.PushRecipientsPanel;
|
|
||||||
import org.thoughtcrime.securesms.components.PushRecipientsPanel.RecipientsPanelChangedListener;
|
|
||||||
import org.thoughtcrime.securesms.contacts.RecipientsEditor;
|
|
||||||
import org.thoughtcrime.securesms.contacts.avatars.ContactColors;
|
|
||||||
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
|
|
||||||
import org.thoughtcrime.securesms.conversation.ConversationActivity;
|
|
||||||
import org.thoughtcrime.securesms.database.Address;
|
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
|
||||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
|
||||||
import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
|
|
||||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
|
||||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
|
||||||
import org.thoughtcrime.securesms.groups.GroupManager;
|
|
||||||
import org.thoughtcrime.securesms.groups.GroupManager.GroupActionResult;
|
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
|
||||||
import org.thoughtcrime.securesms.loki.fragments.ContactSelectionListFragment;
|
|
||||||
import org.thoughtcrime.securesms.loki.fragments.ContactSelectionListLoader.DisplayMode;
|
|
||||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
||||||
import org.thoughtcrime.securesms.util.BitmapUtil;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
|
||||||
import org.thoughtcrime.securesms.util.SelectedRecipientsAdapter;
|
|
||||||
import org.thoughtcrime.securesms.util.SelectedRecipientsAdapter.OnRecipientDeletedListener;
|
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
|
||||||
import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
|
|
||||||
import org.session.libsignal.libsignal.util.guava.Optional;
|
|
||||||
import org.session.libsignal.service.api.util.InvalidNumberException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Activity to create and update groups
|
|
||||||
*
|
|
||||||
* @author Jake McGinty
|
|
||||||
*/
|
|
||||||
public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|
||||||
implements OnRecipientDeletedListener,
|
|
||||||
RecipientsPanelChangedListener
|
|
||||||
{
|
|
||||||
|
|
||||||
private final static String TAG = GroupCreateActivity.class.getSimpleName();
|
|
||||||
|
|
||||||
public static final String GROUP_ADDRESS_EXTRA = "group_recipient";
|
|
||||||
public static final String GROUP_THREAD_EXTRA = "group_thread";
|
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
|
||||||
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
|
|
||||||
|
|
||||||
private static final int PICK_CONTACT = 1;
|
|
||||||
public static final int AVATAR_SIZE = 210;
|
|
||||||
|
|
||||||
private EditText groupName;
|
|
||||||
private ListView lv;
|
|
||||||
private ImageView avatar;
|
|
||||||
private TextView creatingText;
|
|
||||||
private Bitmap avatarBmp;
|
|
||||||
|
|
||||||
@NonNull private Optional<GroupData> groupToUpdate = Optional.absent();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreCreate() {
|
|
||||||
dynamicTheme.onCreate(this);
|
|
||||||
dynamicLanguage.onCreate(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle state, boolean ready) {
|
|
||||||
setContentView(R.layout.group_create_activity);
|
|
||||||
//noinspection ConstantConditions
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
initializeResources();
|
|
||||||
initializeExistingGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
dynamicTheme.onResume(this);
|
|
||||||
dynamicLanguage.onResume(this);
|
|
||||||
updateViewState();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isSignalGroup() {
|
|
||||||
return TextSecurePreferences.isPushRegistered(this) && !getAdapter().hasNonPushMembers();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void disableSignalGroupViews(int reasonResId) {
|
|
||||||
View pushDisabled = findViewById(R.id.push_disabled);
|
|
||||||
pushDisabled.setVisibility(View.VISIBLE);
|
|
||||||
((TextView) findViewById(R.id.push_disabled_reason)).setText(reasonResId);
|
|
||||||
avatar.setEnabled(false);
|
|
||||||
groupName.setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void enableSignalGroupViews() {
|
|
||||||
findViewById(R.id.push_disabled).setVisibility(View.GONE);
|
|
||||||
avatar.setEnabled(true);
|
|
||||||
groupName.setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions")
|
|
||||||
private void updateViewState() {
|
|
||||||
if (!TextSecurePreferences.isPushRegistered(this)) {
|
|
||||||
disableSignalGroupViews(R.string.GroupCreateActivity_youre_not_registered_for_signal);
|
|
||||||
getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_mms_title);
|
|
||||||
} else if (getAdapter().hasNonPushMembers()) {
|
|
||||||
disableSignalGroupViews(R.string.GroupCreateActivity_contacts_dont_support_push);
|
|
||||||
getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_mms_title);
|
|
||||||
} else {
|
|
||||||
enableSignalGroupViews();
|
|
||||||
getSupportActionBar().setTitle(groupToUpdate.isPresent()
|
|
||||||
? R.string.GroupCreateActivity_actionbar_edit_title
|
|
||||||
: R.string.GroupCreateActivity_actionbar_title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isActiveInDirectory(Recipient recipient) {
|
|
||||||
return recipient.resolve().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addSelectedContacts(@NonNull Recipient... recipients) {
|
|
||||||
new AddMembersTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, recipients);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addSelectedContacts(@NonNull Collection<Recipient> recipients) {
|
|
||||||
addSelectedContacts(recipients.toArray(new Recipient[recipients.size()]));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeResources() {
|
|
||||||
RecipientsEditor recipientsEditor = ViewUtil.findById(this, R.id.recipients_text);
|
|
||||||
PushRecipientsPanel recipientsPanel = ViewUtil.findById(this, R.id.recipients);
|
|
||||||
lv = ViewUtil.findById(this, R.id.selected_contacts_list);
|
|
||||||
avatar = ViewUtil.findById(this, R.id.avatar);
|
|
||||||
groupName = ViewUtil.findById(this, R.id.group_name);
|
|
||||||
creatingText = ViewUtil.findById(this, R.id.creating_group_text);
|
|
||||||
SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(this);
|
|
||||||
adapter.setOnRecipientDeletedListener(this);
|
|
||||||
lv.setAdapter(adapter);
|
|
||||||
recipientsEditor.setHint(R.string.recipients_panel__add_members);
|
|
||||||
recipientsPanel.setPanelChangeListener(this);
|
|
||||||
findViewById(R.id.contacts_button).setOnClickListener(new AddRecipientButtonListener());
|
|
||||||
avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.ic_group_white_24dp).asDrawable(this, ContactColors.UNKNOWN_COLOR.toConversationColor(this)));
|
|
||||||
avatar.setOnClickListener(view -> AvatarSelection.startAvatarSelection(this, false, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeExistingGroup() {
|
|
||||||
final Address groupAddress = getIntent().getParcelableExtra(GROUP_ADDRESS_EXTRA);
|
|
||||||
|
|
||||||
if (groupAddress != null) {
|
|
||||||
new FillExistingGroupInfoAsyncTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, groupAddress.toGroupString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
|
||||||
MenuInflater inflater = this.getMenuInflater();
|
|
||||||
menu.clear();
|
|
||||||
|
|
||||||
inflater.inflate(R.menu.menu_apply, menu);
|
|
||||||
super.onPrepareOptionsMenu(menu);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
super.onOptionsItemSelected(item);
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case android.R.id.home:
|
|
||||||
finish();
|
|
||||||
return true;
|
|
||||||
case R.id.applyButton:
|
|
||||||
if (groupToUpdate.isPresent()) handleGroupUpdate();
|
|
||||||
else handleGroupCreate();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRecipientDeleted(Recipient recipient) {
|
|
||||||
getAdapter().remove(recipient);
|
|
||||||
updateViewState();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRecipientsPanelUpdate(List<Recipient> recipients) {
|
|
||||||
if (recipients != null && !recipients.isEmpty()) addSelectedContacts(recipients);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleGroupCreate() {
|
|
||||||
if (getAdapter().getCount() < 1) {
|
|
||||||
Log.i(TAG, getString(R.string.GroupCreateActivity_contacts_no_members));
|
|
||||||
Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_no_members, Toast.LENGTH_SHORT).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (isSignalGroup()) {
|
|
||||||
Recipient local = Recipient.from(this, Address.fromSerialized(TextSecurePreferences.getLocalNumber(this)), false);
|
|
||||||
new CreateSignalGroupTask(this, avatarBmp, getGroupName(), getAdapter().getRecipients(), Collections.singleton(local)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
} else {
|
|
||||||
new CreateMmsGroupTask(this, getAdapter().getRecipients()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleGroupUpdate() {
|
|
||||||
new UpdateSignalGroupTask(this, groupToUpdate.get().id, avatarBmp,
|
|
||||||
getGroupName(), getAdapter().getRecipients(), groupToUpdate.get().admins).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleOpenConversation(long threadId, Recipient recipient) {
|
|
||||||
Intent intent = new Intent(this, ConversationActivity.class);
|
|
||||||
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, threadId);
|
|
||||||
intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, ThreadDatabase.DistributionTypes.DEFAULT);
|
|
||||||
intent.putExtra(ConversationActivity.ADDRESS_EXTRA, recipient.getAddress());
|
|
||||||
startActivity(intent);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SelectedRecipientsAdapter getAdapter() {
|
|
||||||
return (SelectedRecipientsAdapter)lv.getAdapter();
|
|
||||||
}
|
|
||||||
|
|
||||||
private @Nullable String getGroupName() {
|
|
||||||
return groupName.getText() != null ? groupName.getText().toString() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int reqCode, int resultCode, final Intent data) {
|
|
||||||
super.onActivityResult(reqCode, resultCode, data);
|
|
||||||
Uri outputFile = Uri.fromFile(new File(getCacheDir(), "cropped"));
|
|
||||||
|
|
||||||
if (data == null || resultCode != Activity.RESULT_OK)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (reqCode) {
|
|
||||||
case PICK_CONTACT:
|
|
||||||
List<String> selected = data.getStringArrayListExtra("contacts");
|
|
||||||
|
|
||||||
for (String contact : selected) {
|
|
||||||
Address address = Address.fromExternal(this, contact);
|
|
||||||
Recipient recipient = Recipient.from(this, address, false);
|
|
||||||
|
|
||||||
addSelectedContacts(recipient);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AvatarSelection.REQUEST_CODE_AVATAR:
|
|
||||||
AvatarSelection.circularCropImage(this, data.getData(), outputFile, R.string.CropImageActivity_group_avatar);
|
|
||||||
break;
|
|
||||||
case AvatarSelection.REQUEST_CODE_CROP_IMAGE:
|
|
||||||
final Uri resultUri = AvatarSelection.getResultUri(data);
|
|
||||||
GlideApp.with(this)
|
|
||||||
.asBitmap()
|
|
||||||
.load(resultUri)
|
|
||||||
.skipMemoryCache(true)
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
|
||||||
.centerCrop()
|
|
||||||
.override(AVATAR_SIZE, AVATAR_SIZE)
|
|
||||||
.into(new SimpleTarget<Bitmap>() {
|
|
||||||
@Override
|
|
||||||
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
|
|
||||||
setAvatar(resultUri, resource);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class AddRecipientButtonListener implements View.OnClickListener {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
Intent intent = new Intent(GroupCreateActivity.this, PushContactSelectionActivity.class);
|
|
||||||
intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_CONTACTS);
|
|
||||||
startActivityForResult(intent, PICK_CONTACT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class CreateMmsGroupTask extends AsyncTask<Void,Void,GroupActionResult> {
|
|
||||||
private final GroupCreateActivity activity;
|
|
||||||
private final Set<Recipient> members;
|
|
||||||
|
|
||||||
public CreateMmsGroupTask(GroupCreateActivity activity, Set<Recipient> members) {
|
|
||||||
this.activity = activity;
|
|
||||||
this.members = members;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected GroupActionResult doInBackground(Void... avoid) {
|
|
||||||
List<Address> memberAddresses = new LinkedList<>();
|
|
||||||
|
|
||||||
for (Recipient recipient : members) {
|
|
||||||
memberAddresses.add(recipient.getAddress());
|
|
||||||
}
|
|
||||||
Address local = Address.fromSerialized(TextSecurePreferences.getLocalNumber(activity));
|
|
||||||
memberAddresses.add(local);
|
|
||||||
|
|
||||||
String groupId = DatabaseFactory.getGroupDatabase(activity).getOrCreateGroupForMembers(memberAddresses, true, Collections.singletonList(local));
|
|
||||||
Recipient groupRecipient = Recipient.from(activity, Address.fromSerialized(groupId), true);
|
|
||||||
long threadId = DatabaseFactory.getThreadDatabase(activity).getOrCreateThreadIdFor(groupRecipient, ThreadDatabase.DistributionTypes.DEFAULT);
|
|
||||||
|
|
||||||
return new GroupActionResult(groupRecipient, threadId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(GroupActionResult result) {
|
|
||||||
activity.handleOpenConversation(result.getThreadId(), result.getGroupRecipient());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onProgressUpdate(Void... values) {
|
|
||||||
super.onProgressUpdate(values);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private abstract static class SignalGroupTask extends AsyncTask<Void,Void,Optional<GroupActionResult>> {
|
|
||||||
|
|
||||||
protected GroupCreateActivity activity;
|
|
||||||
protected Bitmap avatar;
|
|
||||||
protected Set<Recipient> members;
|
|
||||||
protected String name;
|
|
||||||
protected Set<Recipient> admins;
|
|
||||||
|
|
||||||
public SignalGroupTask(GroupCreateActivity activity,
|
|
||||||
Bitmap avatar,
|
|
||||||
String name,
|
|
||||||
Set<Recipient> members,
|
|
||||||
Set<Recipient> admins)
|
|
||||||
{
|
|
||||||
this.activity = activity;
|
|
||||||
this.avatar = avatar;
|
|
||||||
this.name = name;
|
|
||||||
this.members = members;
|
|
||||||
this.admins = admins;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreExecute() {
|
|
||||||
activity.findViewById(R.id.group_details_layout).setVisibility(View.GONE);
|
|
||||||
activity.findViewById(R.id.creating_group_layout).setVisibility(View.VISIBLE);
|
|
||||||
activity.findViewById(R.id.applyButton).setVisibility(View.GONE);
|
|
||||||
final int titleResId = activity.groupToUpdate.isPresent()
|
|
||||||
? R.string.GroupCreateActivity_updating_group
|
|
||||||
: R.string.GroupCreateActivity_creating_group;
|
|
||||||
activity.creatingText.setText(activity.getString(titleResId, activity.getGroupName()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Optional<GroupActionResult> groupActionResultOptional) {
|
|
||||||
if (activity.isFinishing()) return;
|
|
||||||
activity.findViewById(R.id.group_details_layout).setVisibility(View.VISIBLE);
|
|
||||||
activity.findViewById(R.id.creating_group_layout).setVisibility(View.GONE);
|
|
||||||
activity.findViewById(R.id.applyButton).setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class CreateSignalGroupTask extends SignalGroupTask {
|
|
||||||
public CreateSignalGroupTask(GroupCreateActivity activity, Bitmap avatar, String name, Set<Recipient> members, Set<Recipient> admins) {
|
|
||||||
super(activity, avatar, name, members, admins);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Optional<GroupActionResult> doInBackground(Void... aVoid) {
|
|
||||||
return Optional.of(GroupManager.createGroup(activity, members, avatar, name, false, admins));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Optional<GroupActionResult> result) {
|
|
||||||
if (result.isPresent() && result.get().getThreadId() > -1) {
|
|
||||||
if (!activity.isFinishing()) {
|
|
||||||
activity.handleOpenConversation(result.get().getThreadId(), result.get().getGroupRecipient());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.onPostExecute(result);
|
|
||||||
Toast.makeText(activity.getApplicationContext(),
|
|
||||||
R.string.GroupCreateActivity_contacts_invalid_number, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class UpdateSignalGroupTask extends SignalGroupTask {
|
|
||||||
private String groupId;
|
|
||||||
|
|
||||||
public UpdateSignalGroupTask(GroupCreateActivity activity, String groupId,
|
|
||||||
Bitmap avatar, String name, Set<Recipient> members, Set<Recipient> admins)
|
|
||||||
{
|
|
||||||
super(activity, avatar, name, members, admins);
|
|
||||||
this.groupId = groupId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Optional<GroupActionResult> doInBackground(Void... aVoid) {
|
|
||||||
try {
|
|
||||||
return Optional.of(GroupManager.updateGroup(activity, groupId, members, avatar, name, admins));
|
|
||||||
} catch (InvalidNumberException e) {
|
|
||||||
return Optional.absent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Optional<GroupActionResult> result) {
|
|
||||||
if (result.isPresent() && result.get().getThreadId() > -1) {
|
|
||||||
if (!activity.isFinishing()) {
|
|
||||||
Intent intent = activity.getIntent();
|
|
||||||
intent.putExtra(GROUP_THREAD_EXTRA, result.get().getThreadId());
|
|
||||||
intent.putExtra(GROUP_ADDRESS_EXTRA, result.get().getGroupRecipient().getAddress());
|
|
||||||
activity.setResult(RESULT_OK, intent);
|
|
||||||
activity.finish();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.onPostExecute(result);
|
|
||||||
Toast.makeText(activity.getApplicationContext(),
|
|
||||||
R.string.GroupCreateActivity_contacts_invalid_number, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class AddMembersTask extends AsyncTask<Recipient,Void,List<AddMembersTask.Result>> {
|
|
||||||
static class Result {
|
|
||||||
Optional<Recipient> recipient;
|
|
||||||
boolean isPush;
|
|
||||||
String reason;
|
|
||||||
|
|
||||||
public Result(@Nullable Recipient recipient, boolean isPush, @Nullable String reason) {
|
|
||||||
this.recipient = Optional.fromNullable(recipient);
|
|
||||||
this.isPush = isPush;
|
|
||||||
this.reason = reason;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private GroupCreateActivity activity;
|
|
||||||
private boolean failIfNotPush;
|
|
||||||
|
|
||||||
public AddMembersTask(@NonNull GroupCreateActivity activity) {
|
|
||||||
this.activity = activity;
|
|
||||||
this.failIfNotPush = activity.groupToUpdate.isPresent();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<Result> doInBackground(Recipient... recipients) {
|
|
||||||
final List<Result> results = new LinkedList<>();
|
|
||||||
|
|
||||||
for (Recipient recipient : recipients) {
|
|
||||||
boolean isPush = isActiveInDirectory(recipient);
|
|
||||||
|
|
||||||
if (failIfNotPush && !isPush && !recipient.getAddress().isPhone()) {
|
|
||||||
results.add(new Result(null, false, activity.getString(R.string.GroupCreateActivity_cannot_add_non_push_to_existing_group,
|
|
||||||
recipient.toShortString())));
|
|
||||||
} else if (TextUtils.equals(TextSecurePreferences.getLocalNumber(activity), recipient.getAddress().serialize())) {
|
|
||||||
results.add(new Result(null, false, activity.getString(R.string.GroupCreateActivity_youre_already_in_the_group)));
|
|
||||||
} else {
|
|
||||||
results.add(new Result(recipient, isPush, null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(List<Result> results) {
|
|
||||||
if (activity.isFinishing()) return;
|
|
||||||
|
|
||||||
for (Result result : results) {
|
|
||||||
if (result.recipient.isPresent()) {
|
|
||||||
activity.getAdapter().add(result.recipient.get(), result.isPush);
|
|
||||||
} else {
|
|
||||||
Toast.makeText(activity, result.reason, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
activity.updateViewState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class FillExistingGroupInfoAsyncTask extends ProgressDialogAsyncTask<String,Void,Optional<GroupData>> {
|
|
||||||
private GroupCreateActivity activity;
|
|
||||||
|
|
||||||
public FillExistingGroupInfoAsyncTask(GroupCreateActivity activity) {
|
|
||||||
super(activity,
|
|
||||||
R.string.GroupCreateActivity_loading_group_details,
|
|
||||||
R.string.please_wait);
|
|
||||||
this.activity = activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Optional<GroupData> doInBackground(String... groupIds) {
|
|
||||||
final GroupDatabase db = DatabaseFactory.getGroupDatabase(activity);
|
|
||||||
final List<Recipient> recipients = db.getGroupMembers(groupIds[0], false);
|
|
||||||
final Optional<GroupRecord> group = db.getGroup(groupIds[0]);
|
|
||||||
final Set<Recipient> existingContacts = new HashSet<>(recipients.size());
|
|
||||||
existingContacts.addAll(recipients);
|
|
||||||
|
|
||||||
if (group.isPresent()) {
|
|
||||||
List<Address> adminList = group.get().getAdmins();
|
|
||||||
final Set<Recipient> admins = new HashSet<>(adminList.size());
|
|
||||||
for (Address admin : adminList) {
|
|
||||||
admins.add(Recipient.from(getContext(), admin, false));
|
|
||||||
}
|
|
||||||
return Optional.of(new GroupData(groupIds[0],
|
|
||||||
existingContacts,
|
|
||||||
BitmapUtil.fromByteArray(group.get().getAvatar()),
|
|
||||||
group.get().getAvatar(),
|
|
||||||
group.get().getTitle(),
|
|
||||||
admins));
|
|
||||||
} else {
|
|
||||||
return Optional.absent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Optional<GroupData> group) {
|
|
||||||
super.onPostExecute(group);
|
|
||||||
|
|
||||||
if (group.isPresent() && !activity.isFinishing()) {
|
|
||||||
activity.groupToUpdate = group;
|
|
||||||
|
|
||||||
activity.groupName.setText(group.get().name);
|
|
||||||
if (group.get().avatarBmp != null) {
|
|
||||||
activity.setAvatar(group.get().avatarBytes, group.get().avatarBmp);
|
|
||||||
}
|
|
||||||
SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(activity, group.get().recipients);
|
|
||||||
adapter.setOnRecipientDeletedListener(activity);
|
|
||||||
activity.lv.setAdapter(adapter);
|
|
||||||
activity.updateViewState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T> void setAvatar(T model, Bitmap bitmap) {
|
|
||||||
avatarBmp = bitmap;
|
|
||||||
GlideApp.with(this)
|
|
||||||
.load(model)
|
|
||||||
.circleCrop()
|
|
||||||
.skipMemoryCache(true)
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
|
||||||
.into(avatar);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class GroupData {
|
|
||||||
String id;
|
|
||||||
Set<Recipient> recipients;
|
|
||||||
Bitmap avatarBmp;
|
|
||||||
byte[] avatarBytes;
|
|
||||||
String name;
|
|
||||||
Set<Recipient> admins;
|
|
||||||
|
|
||||||
public GroupData(String id, Set<Recipient> recipients, Bitmap avatarBmp, byte[] avatarBytes, String name, Set<Recipient> admins) {
|
|
||||||
this.id = id;
|
|
||||||
this.recipients = recipients;
|
|
||||||
this.avatarBmp = avatarBmp;
|
|
||||||
this.avatarBytes = avatarBytes;
|
|
||||||
this.name = name;
|
|
||||||
this.admins = admins;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms;
|
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.preferences.MmsPreferencesActivity;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
|
|
||||||
public class PromptMmsActivity extends PassphraseRequiredActionBarActivity {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle bundle, boolean ready) {
|
|
||||||
setContentView(R.layout.prompt_apn_activity);
|
|
||||||
initializeResources();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeResources() {
|
|
||||||
Button okButton = findViewById(R.id.ok_button);
|
|
||||||
Button cancelButton = findViewById(R.id.cancel_button);
|
|
||||||
|
|
||||||
okButton.setOnClickListener(v -> {
|
|
||||||
Intent intent = new Intent(PromptMmsActivity.this, MmsPreferencesActivity.class);
|
|
||||||
intent.putExtras(PromptMmsActivity.this.getIntent().getExtras());
|
|
||||||
startActivity(intent);
|
|
||||||
finish();
|
|
||||||
});
|
|
||||||
|
|
||||||
cancelButton.setOnClickListener(v -> finish());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011 Whisper Systems
|
|
||||||
*
|
|
||||||
* 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 org.thoughtcrime.securesms.loki.fragments.ContactSelectionListFragment;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Activity container for selecting a list of contacts.
|
|
||||||
*
|
|
||||||
* @author Moxie Marlinspike
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class PushContactSelectionActivity extends ContactSelectionActivity {
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
private final static String TAG = PushContactSelectionActivity.class.getSimpleName();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle icicle, boolean ready) {
|
|
||||||
getIntent().putExtra(ContactSelectionListFragment.MULTI_SELECT, true);
|
|
||||||
super.onCreate(icicle, ready);
|
|
||||||
|
|
||||||
getToolbar().setNavigationIcon(R.drawable.ic_check_white_24dp);
|
|
||||||
getToolbar().setNavigationOnClickListener(v -> {
|
|
||||||
Intent resultIntent = getIntent();
|
|
||||||
List<String> selectedContacts = contactsFragment.getSelectedContacts();
|
|
||||||
|
|
||||||
if (selectedContacts != null) {
|
|
||||||
resultIntent.putStringArrayListExtra("contacts", new ArrayList<>(selectedContacts));
|
|
||||||
}
|
|
||||||
|
|
||||||
setResult(RESULT_OK, resultIntent);
|
|
||||||
finish();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,6 @@
|
|||||||
package org.thoughtcrime.securesms;
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.ActivityNotFoundException;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
@ -13,19 +12,6 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.loader.app.LoaderManager;
|
|
||||||
import androidx.loader.content.Loader;
|
|
||||||
import androidx.core.view.ViewCompat;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.preference.CheckBoxPreference;
|
|
||||||
import androidx.preference.ListPreference;
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
import androidx.preference.PreferenceCategory;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import android.telephony.PhoneNumberUtils;
|
import android.telephony.PhoneNumberUtils;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -35,8 +21,23 @@ import android.widget.ImageView;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
import androidx.core.view.ViewCompat;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.loader.app.LoaderManager;
|
||||||
|
import androidx.loader.content.Loader;
|
||||||
|
import androidx.preference.CheckBoxPreference;
|
||||||
|
import androidx.preference.ListPreference;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceCategory;
|
||||||
|
|
||||||
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
|
|
||||||
|
import org.session.libsignal.libsignal.util.guava.Optional;
|
||||||
import org.thoughtcrime.securesms.color.MaterialColor;
|
import org.thoughtcrime.securesms.color.MaterialColor;
|
||||||
import org.thoughtcrime.securesms.color.MaterialColors;
|
import org.thoughtcrime.securesms.color.MaterialColors;
|
||||||
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
|
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
|
||||||
@ -65,12 +66,9 @@ import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
|||||||
import org.thoughtcrime.securesms.permissions.Permissions;
|
import org.thoughtcrime.securesms.permissions.Permissions;
|
||||||
import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment;
|
import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment;
|
||||||
import org.thoughtcrime.securesms.preferences.widgets.ColorPickerPreference;
|
import org.thoughtcrime.securesms.preferences.widgets.ColorPickerPreference;
|
||||||
import org.thoughtcrime.securesms.preferences.widgets.ContactPreference;
|
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
|
import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
|
||||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
|
||||||
import org.thoughtcrime.securesms.util.Dialogs;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
||||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||||
@ -80,7 +78,6 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
||||||
import org.session.libsignal.libsignal.util.guava.Optional;
|
|
||||||
|
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
@ -92,17 +89,12 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
private static final String TAG = RecipientPreferenceActivity.class.getSimpleName();
|
private static final String TAG = RecipientPreferenceActivity.class.getSimpleName();
|
||||||
|
|
||||||
public static final String ADDRESS_EXTRA = "recipient_address";
|
public static final String ADDRESS_EXTRA = "recipient_address";
|
||||||
// public static final String CAN_HAVE_SAFETY_NUMBER_EXTRA = "can_have_safety_number";
|
|
||||||
|
|
||||||
private static final String PREFERENCE_MUTED = "pref_key_recipient_mute";
|
private static final String PREFERENCE_MUTED = "pref_key_recipient_mute";
|
||||||
private static final String PREFERENCE_MESSAGE_TONE = "pref_key_recipient_ringtone";
|
private static final String PREFERENCE_MESSAGE_TONE = "pref_key_recipient_ringtone";
|
||||||
// private static final String PREFERENCE_CALL_TONE = "pref_key_recipient_call_ringtone";
|
|
||||||
private static final String PREFERENCE_MESSAGE_VIBRATE = "pref_key_recipient_vibrate";
|
private static final String PREFERENCE_MESSAGE_VIBRATE = "pref_key_recipient_vibrate";
|
||||||
// private static final String PREFERENCE_CALL_VIBRATE = "pref_key_recipient_call_vibrate";
|
|
||||||
// private static final String PREFERENCE_BLOCK = "pref_key_recipient_block";
|
|
||||||
private static final String PREFERENCE_COLOR = "pref_key_recipient_color";
|
private static final String PREFERENCE_COLOR = "pref_key_recipient_color";
|
||||||
private static final String PREFERENCE_IDENTITY = "pref_key_recipient_identity";
|
private static final String PREFERENCE_IDENTITY = "pref_key_recipient_identity";
|
||||||
// private static final String PREFERENCE_ABOUT = "pref_key_number";
|
|
||||||
private static final String PREFERENCE_CUSTOM_NOTIFICATIONS = "pref_key_recipient_custom_notifications";
|
private static final String PREFERENCE_CUSTOM_NOTIFICATIONS = "pref_key_recipient_custom_notifications";
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
|
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
|
||||||
@ -262,8 +254,9 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
extends CorrectedPreferenceFragment
|
extends CorrectedPreferenceFragment
|
||||||
implements RecipientModifiedListener
|
implements RecipientModifiedListener
|
||||||
{
|
{
|
||||||
|
private static final int REQ_CODE_CHANGE_MESSAGE_NOTIFICATION_TONE = 9920;
|
||||||
|
|
||||||
private Recipient recipient;
|
private Recipient recipient;
|
||||||
private boolean canHaveSafetyNumber;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle icicle) {
|
public void onCreate(Bundle icicle) {
|
||||||
@ -272,11 +265,6 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
|
|
||||||
initializeRecipients();
|
initializeRecipients();
|
||||||
|
|
||||||
/*
|
|
||||||
this.canHaveSafetyNumber = getActivity().getIntent()
|
|
||||||
.getBooleanExtra(RecipientPreferenceActivity.CAN_HAVE_SAFETY_NUMBER_EXTRA, false);
|
|
||||||
*/
|
|
||||||
|
|
||||||
Preference customNotificationsPref = this.findPreference(PREFERENCE_CUSTOM_NOTIFICATIONS);
|
Preference customNotificationsPref = this.findPreference(PREFERENCE_CUSTOM_NOTIFICATIONS);
|
||||||
|
|
||||||
if (NotificationChannels.supported()) {
|
if (NotificationChannels.supported()) {
|
||||||
@ -304,33 +292,15 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.findPreference(PREFERENCE_MESSAGE_TONE)
|
this.findPreference(PREFERENCE_MESSAGE_TONE)
|
||||||
.setOnPreferenceChangeListener(new RingtoneChangeListener(false));
|
.setOnPreferenceChangeListener(new RingtoneChangeListener());
|
||||||
this.findPreference(PREFERENCE_MESSAGE_TONE)
|
this.findPreference(PREFERENCE_MESSAGE_TONE)
|
||||||
.setOnPreferenceClickListener(new RingtoneClickedListener(false));
|
.setOnPreferenceClickListener(new RingtoneClickedListener());
|
||||||
/*
|
|
||||||
this.findPreference(PREFERENCE_CALL_TONE)
|
|
||||||
.setOnPreferenceChangeListener(new RingtoneChangeListener(true));
|
|
||||||
this.findPreference(PREFERENCE_CALL_TONE)
|
|
||||||
.setOnPreferenceClickListener(new RingtoneClickedListener(true));
|
|
||||||
*/
|
|
||||||
this.findPreference(PREFERENCE_MESSAGE_VIBRATE)
|
this.findPreference(PREFERENCE_MESSAGE_VIBRATE)
|
||||||
.setOnPreferenceChangeListener(new VibrateChangeListener(false));
|
.setOnPreferenceChangeListener(new VibrateChangeListener());
|
||||||
/*
|
|
||||||
this.findPreference(PREFERENCE_CALL_VIBRATE)
|
|
||||||
.setOnPreferenceChangeListener(new VibrateChangeListener(true));
|
|
||||||
*/
|
|
||||||
this.findPreference(PREFERENCE_MUTED)
|
this.findPreference(PREFERENCE_MUTED)
|
||||||
.setOnPreferenceClickListener(new MuteClickedListener());
|
.setOnPreferenceClickListener(new MuteClickedListener());
|
||||||
/*
|
|
||||||
this.findPreference(PREFERENCE_BLOCK)
|
|
||||||
.setOnPreferenceClickListener(new BlockClickedListener());
|
|
||||||
*/
|
|
||||||
this.findPreference(PREFERENCE_COLOR)
|
this.findPreference(PREFERENCE_COLOR)
|
||||||
.setOnPreferenceChangeListener(new ColorChangeListener());
|
.setOnPreferenceChangeListener(new ColorChangeListener());
|
||||||
/*
|
|
||||||
((ContactPreference)this.findPreference(PREFERENCE_ABOUT))
|
|
||||||
.setListener(new AboutNumberClickedListener());
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -341,6 +311,7 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,14 +329,17 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
|
||||||
|
|
||||||
findPreference(PREFERENCE_MESSAGE_TONE).getOnPreferenceChangeListener().onPreferenceChange(findPreference(PREFERENCE_MESSAGE_TONE), uri);
|
switch (requestCode) {
|
||||||
} else if (requestCode == 2 && resultCode == RESULT_OK && data != null) {
|
case REQ_CODE_CHANGE_MESSAGE_NOTIFICATION_TONE: {
|
||||||
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
if (resultCode == RESULT_OK && data != null) {
|
||||||
|
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
||||||
|
|
||||||
// findPreference(PREFERENCE_CALL_TONE).getOnPreferenceChangeListener().onPreferenceChange(findPreference(PREFERENCE_CALL_TONE), uri);
|
findPreference(PREFERENCE_MESSAGE_TONE).getOnPreferenceChangeListener().onPreferenceChange(findPreference(PREFERENCE_MESSAGE_TONE), uri);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,33 +352,24 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
CheckBoxPreference mutePreference = (CheckBoxPreference) this.findPreference(PREFERENCE_MUTED);
|
CheckBoxPreference mutePreference = (CheckBoxPreference) this.findPreference(PREFERENCE_MUTED);
|
||||||
Preference customPreference = this.findPreference(PREFERENCE_CUSTOM_NOTIFICATIONS);
|
Preference customPreference = this.findPreference(PREFERENCE_CUSTOM_NOTIFICATIONS);
|
||||||
Preference ringtoneMessagePreference = this.findPreference(PREFERENCE_MESSAGE_TONE);
|
Preference ringtoneMessagePreference = this.findPreference(PREFERENCE_MESSAGE_TONE);
|
||||||
// Preference ringtoneCallPreference = this.findPreference(PREFERENCE_CALL_TONE);
|
|
||||||
ListPreference vibrateMessagePreference = (ListPreference) this.findPreference(PREFERENCE_MESSAGE_VIBRATE);
|
ListPreference vibrateMessagePreference = (ListPreference) this.findPreference(PREFERENCE_MESSAGE_VIBRATE);
|
||||||
// ListPreference vibrateCallPreference = (ListPreference) this.findPreference(PREFERENCE_CALL_VIBRATE);
|
|
||||||
ColorPickerPreference colorPreference = (ColorPickerPreference) this.findPreference(PREFERENCE_COLOR);
|
ColorPickerPreference colorPreference = (ColorPickerPreference) this.findPreference(PREFERENCE_COLOR);
|
||||||
// Preference blockPreference = this.findPreference(PREFERENCE_BLOCK);
|
|
||||||
Preference identityPreference = this.findPreference(PREFERENCE_IDENTITY);
|
Preference identityPreference = this.findPreference(PREFERENCE_IDENTITY);
|
||||||
PreferenceCategory callCategory = (PreferenceCategory)this.findPreference("call_settings");
|
PreferenceCategory callCategory = (PreferenceCategory)this.findPreference("call_settings");
|
||||||
PreferenceCategory aboutCategory = (PreferenceCategory)this.findPreference("about");
|
PreferenceCategory aboutCategory = (PreferenceCategory)this.findPreference("about");
|
||||||
PreferenceCategory aboutDivider = (PreferenceCategory)this.findPreference("about_divider");
|
PreferenceCategory aboutDivider = (PreferenceCategory)this.findPreference("about_divider");
|
||||||
// ContactPreference aboutPreference = (ContactPreference)this.findPreference(PREFERENCE_ABOUT);
|
|
||||||
PreferenceCategory privacyCategory = (PreferenceCategory) this.findPreference("privacy_settings");
|
PreferenceCategory privacyCategory = (PreferenceCategory) this.findPreference("privacy_settings");
|
||||||
PreferenceCategory divider = (PreferenceCategory) this.findPreference("divider");
|
PreferenceCategory divider = (PreferenceCategory) this.findPreference("divider");
|
||||||
|
|
||||||
mutePreference.setChecked(recipient.isMuted());
|
mutePreference.setChecked(recipient.isMuted());
|
||||||
|
|
||||||
ringtoneMessagePreference.setSummary(ringtoneMessagePreference.isEnabled() ? getRingtoneSummary(getContext(), recipient.getMessageRingtone()) : "");
|
ringtoneMessagePreference.setSummary(ringtoneMessagePreference.isEnabled() ? getRingtoneSummary(getContext(), recipient.getMessageRingtone()) : "");
|
||||||
// ringtoneCallPreference.setSummary(getRingtoneSummary(getContext(), recipient.getCallRingtone()));
|
|
||||||
|
|
||||||
Pair<String, Integer> vibrateMessageSummary = getVibrateSummary(getContext(), recipient.getMessageVibrate());
|
Pair<String, Integer> vibrateMessageSummary = getVibrateSummary(getContext(), recipient.getMessageVibrate());
|
||||||
Pair<String, Integer> vibrateCallSummary = getVibrateSummary(getContext(), recipient.getCallVibrate());
|
|
||||||
|
|
||||||
vibrateMessagePreference.setSummary(vibrateMessagePreference.isEnabled() ? vibrateMessageSummary.first : "");
|
vibrateMessagePreference.setSummary(vibrateMessagePreference.isEnabled() ? vibrateMessageSummary.first : "");
|
||||||
vibrateMessagePreference.setValueIndex(vibrateMessageSummary.second);
|
vibrateMessagePreference.setValueIndex(vibrateMessageSummary.second);
|
||||||
|
|
||||||
// vibrateCallPreference.setSummary(vibrateCallSummary.first);
|
|
||||||
// vibrateCallPreference.setValueIndex(vibrateCallSummary.second);
|
|
||||||
|
|
||||||
if (recipient.isLocalNumber()) {
|
if (recipient.isLocalNumber()) {
|
||||||
mutePreference.setVisible(false);
|
mutePreference.setVisible(false);
|
||||||
customPreference.setVisible(false);
|
customPreference.setVisible(false);
|
||||||
@ -428,26 +393,12 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
colorPreference.setColors(MaterialColors.CONVERSATION_PALETTE.asConversationColorArray(getActivity()));
|
colorPreference.setColors(MaterialColors.CONVERSATION_PALETTE.asConversationColorArray(getActivity()));
|
||||||
colorPreference.setColor(recipient.getColor().toActionBarColor(getActivity()));
|
colorPreference.setColor(recipient.getColor().toActionBarColor(getActivity()));
|
||||||
|
|
||||||
/*
|
|
||||||
aboutPreference.setTitle(formatAddress(recipient.getAddress()));
|
|
||||||
aboutPreference.setSummary(recipient.getCustomLabel());
|
|
||||||
aboutPreference.setSecure(recipient.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (recipient.isBlocked()) blockPreference.setTitle(R.string.RecipientPreferenceActivity_unblock);
|
|
||||||
else blockPreference.setTitle(R.string.RecipientPreferenceActivity_block);
|
|
||||||
*/
|
|
||||||
|
|
||||||
IdentityUtil.getRemoteIdentityKey(getActivity(), recipient).addListener(new ListenableFuture.Listener<Optional<IdentityRecord>>() {
|
IdentityUtil.getRemoteIdentityKey(getActivity(), recipient).addListener(new ListenableFuture.Listener<Optional<IdentityRecord>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Optional<IdentityRecord> result) {
|
public void onSuccess(Optional<IdentityRecord> result) {
|
||||||
if (result.isPresent()) {
|
if (result.isPresent()) {
|
||||||
if (identityPreference != null) identityPreference.setOnPreferenceClickListener(new IdentityClickedListener(result.get()));
|
if (identityPreference != null) identityPreference.setOnPreferenceClickListener(new IdentityClickedListener(result.get()));
|
||||||
if (identityPreference != null) identityPreference.setEnabled(true);
|
if (identityPreference != null) identityPreference.setEnabled(true);
|
||||||
} else if (canHaveSafetyNumber) {
|
|
||||||
if (identityPreference != null) identityPreference.setSummary(R.string.RecipientPreferenceActivity_available_once_a_message_has_been_sent_or_received);
|
|
||||||
if (identityPreference != null) identityPreference.setEnabled(false);
|
|
||||||
} else {
|
} else {
|
||||||
if (identityPreference != null) getPreferenceScreen().removePreference(identityPreference);
|
if (identityPreference != null) getPreferenceScreen().removePreference(identityPreference);
|
||||||
}
|
}
|
||||||
@ -461,12 +412,6 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NonNull String formatAddress(@NonNull Address address) {
|
|
||||||
if (address.isPhone()) return PhoneNumberUtils.formatNumber(address.toPhoneString());
|
|
||||||
else if (address.isEmail()) return address.toEmailString();
|
|
||||||
else return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
private @NonNull String getRingtoneSummary(@NonNull Context context, @Nullable Uri ringtone) {
|
private @NonNull String getRingtoneSummary(@NonNull Context context, @Nullable Uri ringtone) {
|
||||||
if (ringtone == null) {
|
if (ringtone == null) {
|
||||||
return context.getString(R.string.preferences__default);
|
return context.getString(R.string.preferences__default);
|
||||||
@ -504,22 +449,12 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
|
|
||||||
private class RingtoneChangeListener implements Preference.OnPreferenceChangeListener {
|
private class RingtoneChangeListener implements Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
private final boolean calls;
|
|
||||||
|
|
||||||
RingtoneChangeListener(boolean calls) {
|
|
||||||
this.calls = calls;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
final Context context = preference.getContext();
|
final Context context = preference.getContext();
|
||||||
|
|
||||||
Uri value = (Uri)newValue;
|
Uri value = (Uri)newValue;
|
||||||
|
Uri defaultValue = TextSecurePreferences.getNotificationRingtone(context);
|
||||||
Uri defaultValue;
|
|
||||||
|
|
||||||
if (calls) defaultValue = TextSecurePreferences.getCallNotificationRingtone(context);
|
|
||||||
else defaultValue = TextSecurePreferences.getNotificationRingtone(context);
|
|
||||||
|
|
||||||
if (defaultValue.equals(value)) value = null;
|
if (defaultValue.equals(value)) value = null;
|
||||||
else if (value == null) value = Uri.EMPTY;
|
else if (value == null) value = Uri.EMPTY;
|
||||||
@ -528,12 +463,8 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
new AsyncTask<Uri, Void, Void>() {
|
new AsyncTask<Uri, Void, Void>() {
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Uri... params) {
|
protected Void doInBackground(Uri... params) {
|
||||||
if (calls) {
|
DatabaseFactory.getRecipientDatabase(context).setMessageRingtone(recipient, params[0]);
|
||||||
DatabaseFactory.getRecipientDatabase(context).setCallRingtone(recipient, params[0]);
|
NotificationChannels.updateMessageRingtone(context, recipient, params[0]);
|
||||||
} else {
|
|
||||||
DatabaseFactory.getRecipientDatabase(context).setMessageRingtone(recipient, params[0]);
|
|
||||||
NotificationChannels.updateMessageRingtone(context, recipient, params[0]);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, value);
|
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, value);
|
||||||
@ -544,24 +475,10 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
|
|
||||||
private class RingtoneClickedListener implements Preference.OnPreferenceClickListener {
|
private class RingtoneClickedListener implements Preference.OnPreferenceClickListener {
|
||||||
|
|
||||||
private final boolean calls;
|
|
||||||
|
|
||||||
RingtoneClickedListener(boolean calls) {
|
|
||||||
this.calls = calls;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
Uri current;
|
Uri current = recipient.getMessageRingtone();
|
||||||
Uri defaultUri;
|
Uri defaultUri = TextSecurePreferences.getNotificationRingtone(getContext());
|
||||||
|
|
||||||
if (calls) {
|
|
||||||
current = recipient.getCallRingtone();
|
|
||||||
defaultUri = TextSecurePreferences.getCallNotificationRingtone(getContext());
|
|
||||||
} else {
|
|
||||||
current = recipient.getMessageRingtone();
|
|
||||||
defaultUri = TextSecurePreferences.getNotificationRingtone(getContext());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current == null) current = Settings.System.DEFAULT_NOTIFICATION_URI;
|
if (current == null) current = Settings.System.DEFAULT_NOTIFICATION_URI;
|
||||||
else if (current.toString().isEmpty()) current = null;
|
else if (current.toString().isEmpty()) current = null;
|
||||||
@ -570,10 +487,10 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, defaultUri);
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, defaultUri);
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, calls ? RingtoneManager.TYPE_RINGTONE : RingtoneManager.TYPE_NOTIFICATION);
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, current);
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, current);
|
||||||
|
|
||||||
startActivityForResult(intent, calls ? 2 : 1);
|
startActivityForResult(intent, REQ_CODE_CHANGE_MESSAGE_NOTIFICATION_TONE);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -581,12 +498,6 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
|
|
||||||
private class VibrateChangeListener implements Preference.OnPreferenceChangeListener {
|
private class VibrateChangeListener implements Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
private final boolean call;
|
|
||||||
|
|
||||||
VibrateChangeListener(boolean call) {
|
|
||||||
this.call = call;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
int value = Integer.parseInt((String) newValue);
|
int value = Integer.parseInt((String) newValue);
|
||||||
@ -596,13 +507,8 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
new AsyncTask<Void, Void, Void>() {
|
new AsyncTask<Void, Void, Void>() {
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
if (call) {
|
DatabaseFactory.getRecipientDatabase(context).setMessageVibrate(recipient, vibrateState);
|
||||||
DatabaseFactory.getRecipientDatabase(context).setCallVibrate(recipient, vibrateState);
|
NotificationChannels.updateMessageVibrate(context, recipient, vibrateState);
|
||||||
}
|
|
||||||
else {
|
|
||||||
DatabaseFactory.getRecipientDatabase(context).setMessageVibrate(recipient, vibrateState);
|
|
||||||
NotificationChannels.updateMessageVibrate(context, recipient, vibrateState);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
|
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
|
||||||
@ -698,106 +604,6 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class BlockClickedListener implements Preference.OnPreferenceClickListener {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
if (recipient.isBlocked()) handleUnblock(preference.getContext());
|
|
||||||
else handleBlock(preference.getContext());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleBlock(@NonNull final Context context) {
|
|
||||||
new AsyncTask<Void, Void, Pair<Integer, Integer>>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Pair<Integer, Integer> doInBackground(Void... voids) {
|
|
||||||
int titleRes = R.string.RecipientPreferenceActivity_block_this_contact_question;
|
|
||||||
int bodyRes = R.string.RecipientPreferenceActivity_you_will_no_longer_receive_messages_and_calls_from_this_contact;
|
|
||||||
|
|
||||||
if (recipient.isGroupRecipient()) {
|
|
||||||
bodyRes = R.string.RecipientPreferenceActivity_block_and_leave_group_description;
|
|
||||||
|
|
||||||
if (recipient.isGroupRecipient() && DatabaseFactory.getGroupDatabase(context).isActive(recipient.getAddress().toGroupString())) {
|
|
||||||
titleRes = R.string.RecipientPreferenceActivity_block_and_leave_group;
|
|
||||||
} else {
|
|
||||||
titleRes = R.string.RecipientPreferenceActivity_block_group;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Pair<>(titleRes, bodyRes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Pair<Integer, Integer> titleAndBody) {
|
|
||||||
new AlertDialog.Builder(context)
|
|
||||||
.setTitle(titleAndBody.first)
|
|
||||||
.setMessage(titleAndBody.second)
|
|
||||||
.setCancelable(true)
|
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
|
||||||
.setPositiveButton(R.string.RecipientPreferenceActivity_block, (dialog, which) -> {
|
|
||||||
setBlocked(context, recipient, true);
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleUnblock(@NonNull Context context) {
|
|
||||||
int titleRes = R.string.RecipientPreferenceActivity_unblock_this_contact_question;
|
|
||||||
int bodyRes = R.string.RecipientPreferenceActivity_you_will_once_again_be_able_to_receive_messages_and_calls_from_this_contact;
|
|
||||||
|
|
||||||
if (recipient.isGroupRecipient()) {
|
|
||||||
titleRes = R.string.RecipientPreferenceActivity_unblock_this_group_question;
|
|
||||||
bodyRes = R.string.RecipientPreferenceActivity_unblock_this_group_description;
|
|
||||||
}
|
|
||||||
|
|
||||||
new AlertDialog.Builder(context)
|
|
||||||
.setTitle(titleRes)
|
|
||||||
.setMessage(bodyRes)
|
|
||||||
.setCancelable(true)
|
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
|
||||||
.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, (dialog, which) -> setBlocked(context, recipient, false)).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setBlocked(@NonNull final Context context, final Recipient recipient, final boolean blocked) {
|
|
||||||
new AsyncTask<Void, Void, Void>() {
|
|
||||||
@Override
|
|
||||||
protected Void doInBackground(Void... params) {
|
|
||||||
DatabaseFactory.getRecipientDatabase(context)
|
|
||||||
.setBlocked(recipient, blocked);
|
|
||||||
|
|
||||||
if (recipient.isGroupRecipient() && DatabaseFactory.getGroupDatabase(context).isActive(recipient.getAddress().toGroupString())) {
|
|
||||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
|
||||||
Optional<OutgoingGroupMediaMessage> leaveMessage = GroupUtil.createGroupLeaveMessage(context, recipient);
|
|
||||||
|
|
||||||
if (threadId != -1 && leaveMessage.isPresent()) {
|
|
||||||
MessageSender.send(context, leaveMessage.get(), threadId, false, null);
|
|
||||||
|
|
||||||
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
|
||||||
String groupId = recipient.getAddress().toGroupString();
|
|
||||||
groupDatabase.setActive(groupId, false);
|
|
||||||
groupDatabase.removeMember(groupId, Address.fromSerialized(TextSecurePreferences.getLocalNumber(context)));
|
|
||||||
} else {
|
|
||||||
Log.w(TAG, "Failed to leave group. Can't block.");
|
|
||||||
Toast.makeText(context, R.string.RecipientPreferenceActivity_error_leaving_group, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blocked && (recipient.resolve().isSystemContact() || recipient.resolve().isProfileSharing())) {
|
|
||||||
ApplicationContext.getInstance(context)
|
|
||||||
.getJobManager()
|
|
||||||
.add(new RotateProfileKeyJob());
|
|
||||||
}
|
|
||||||
|
|
||||||
ApplicationContext.getInstance(context)
|
|
||||||
.getJobManager()
|
|
||||||
.add(new MultiDeviceBlockedUpdateJob());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class CustomNotificationsChangedListener implements Preference.OnPreferenceChangeListener {
|
private class CustomNotificationsChangedListener implements Preference.OnPreferenceChangeListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,159 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.components;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
|
||||||
import android.text.Editable;
|
|
||||||
import android.text.InputType;
|
|
||||||
import android.text.TextWatcher;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.TouchDelegate;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
|
||||||
|
|
||||||
public class ContactFilterToolbar extends Toolbar {
|
|
||||||
private OnFilterChangedListener listener;
|
|
||||||
|
|
||||||
private EditText searchText;
|
|
||||||
private AnimatingToggle toggle;
|
|
||||||
// private ImageView keyboardToggle;
|
|
||||||
// private ImageView dialpadToggle;
|
|
||||||
private ImageView clearToggle;
|
|
||||||
private LinearLayout toggleContainer;
|
|
||||||
|
|
||||||
public ContactFilterToolbar(Context context) {
|
|
||||||
this(context, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ContactFilterToolbar(Context context, AttributeSet attrs) {
|
|
||||||
this(context, attrs, R.attr.toolbarStyle);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ContactFilterToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
inflate(context, R.layout.contact_filter_toolbar, this);
|
|
||||||
|
|
||||||
this.searchText = ViewUtil.findById(this, R.id.search_view);
|
|
||||||
this.toggle = ViewUtil.findById(this, R.id.button_toggle);
|
|
||||||
// this.keyboardToggle = ViewUtil.findById(this, R.id.search_keyboard);
|
|
||||||
// this.dialpadToggle = ViewUtil.findById(this, R.id.search_dialpad);
|
|
||||||
this.clearToggle = ViewUtil.findById(this, R.id.search_clear);
|
|
||||||
this.toggleContainer = ViewUtil.findById(this, R.id.toggle_container);
|
|
||||||
|
|
||||||
// this.keyboardToggle.setOnClickListener(new View.OnClickListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onClick(View v) {
|
|
||||||
// searchText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
|
|
||||||
// ServiceUtil.getInputMethodManager(getContext()).showSoftInput(searchText, 0);
|
|
||||||
// displayTogglingView(dialpadToggle);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
// this.dialpadToggle.setOnClickListener(new View.OnClickListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onClick(View v) {
|
|
||||||
// searchText.setInputType(InputType.TYPE_CLASS_PHONE);
|
|
||||||
// ServiceUtil.getInputMethodManager(getContext()).showSoftInput(searchText, 0);
|
|
||||||
// displayTogglingView(keyboardToggle);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
this.clearToggle.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
searchText.setText("");
|
|
||||||
|
|
||||||
// if (SearchUtil.isTextInput(searchText)) displayTogglingView(dialpadToggle);
|
|
||||||
// else displayTogglingView(keyboardToggle);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.searchText.addTextChangedListener(new TextWatcher() {
|
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable s) {
|
|
||||||
if (!SearchUtil.isEmpty(searchText)) displayTogglingView(clearToggle);
|
|
||||||
else displayTogglingView(null);
|
|
||||||
// else if (SearchUtil.isTextInput(searchText)) displayTogglingView(dialpadToggle);
|
|
||||||
// else if (SearchUtil.isPhoneInput(searchText)) displayTogglingView(keyboardToggle);
|
|
||||||
notifyListener();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
setLogo(null);
|
|
||||||
setContentInsetStartWithNavigation(0);
|
|
||||||
displayTogglingView(null);
|
|
||||||
// expandTapArea(toggleContainer, dialpadToggle);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear() {
|
|
||||||
searchText.setText("");
|
|
||||||
notifyListener();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOnFilterChangedListener(OnFilterChangedListener listener) {
|
|
||||||
this.listener = listener;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void notifyListener() {
|
|
||||||
if (listener != null) listener.onFilterChanged(searchText.getText().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void displayTogglingView(View view) {
|
|
||||||
toggle.display(view);
|
|
||||||
if (view != null) {
|
|
||||||
expandTapArea(toggleContainer, view);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void expandTapArea(final View container, final View child) {
|
|
||||||
final int padding = getResources().getDimensionPixelSize(R.dimen.contact_selection_actions_tap_area);
|
|
||||||
|
|
||||||
container.post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Rect rect = new Rect();
|
|
||||||
child.getHitRect(rect);
|
|
||||||
|
|
||||||
rect.top -= padding;
|
|
||||||
rect.left -= padding;
|
|
||||||
rect.right += padding;
|
|
||||||
rect.bottom += padding;
|
|
||||||
|
|
||||||
container.setTouchDelegate(new TouchDelegate(rect, child));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SearchUtil {
|
|
||||||
static boolean isTextInput(EditText editText) {
|
|
||||||
return (editText.getInputType() & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
static boolean isPhoneInput(EditText editText) {
|
|
||||||
return (editText.getInputType() & InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_PHONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isEmpty(EditText editText) {
|
|
||||||
return editText.getText().length() <= 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface OnFilterChangedListener {
|
|
||||||
void onFilterChanged(String filter);
|
|
||||||
}
|
|
||||||
}
|
|
@ -85,12 +85,10 @@ import org.greenrobot.eventbus.Subscribe;
|
|||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
import org.thoughtcrime.securesms.ApplicationContext;
|
import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.ExpirationDialog;
|
import org.thoughtcrime.securesms.ExpirationDialog;
|
||||||
import org.thoughtcrime.securesms.GroupCreateActivity;
|
|
||||||
import org.thoughtcrime.securesms.GroupMembersDialog;
|
import org.thoughtcrime.securesms.GroupMembersDialog;
|
||||||
import org.thoughtcrime.securesms.MediaOverviewActivity;
|
import org.thoughtcrime.securesms.MediaOverviewActivity;
|
||||||
import org.thoughtcrime.securesms.MuteDialog;
|
import org.thoughtcrime.securesms.MuteDialog;
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
|
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
|
||||||
import org.thoughtcrime.securesms.PromptMmsActivity;
|
|
||||||
import org.thoughtcrime.securesms.ShortcutLauncherActivity;
|
import org.thoughtcrime.securesms.ShortcutLauncherActivity;
|
||||||
import org.thoughtcrime.securesms.TransportOption;
|
import org.thoughtcrime.securesms.TransportOption;
|
||||||
import org.thoughtcrime.securesms.VerifyIdentityActivity;
|
import org.thoughtcrime.securesms.VerifyIdentityActivity;
|
||||||
@ -184,7 +182,6 @@ import org.thoughtcrime.securesms.mms.StickerSlide;
|
|||||||
import org.thoughtcrime.securesms.mms.TextSlide;
|
import org.thoughtcrime.securesms.mms.TextSlide;
|
||||||
import org.thoughtcrime.securesms.mms.VideoSlide;
|
import org.thoughtcrime.securesms.mms.VideoSlide;
|
||||||
import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
|
import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
|
||||||
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
|
||||||
import org.thoughtcrime.securesms.permissions.Permissions;
|
import org.thoughtcrime.securesms.permissions.Permissions;
|
||||||
import org.thoughtcrime.securesms.profiles.GroupShareProfileView;
|
import org.thoughtcrime.securesms.profiles.GroupShareProfileView;
|
||||||
import org.thoughtcrime.securesms.providers.BlobProvider;
|
import org.thoughtcrime.securesms.providers.BlobProvider;
|
||||||
@ -281,12 +278,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
public static final String LAST_SEEN_EXTRA = "last_seen";
|
public static final String LAST_SEEN_EXTRA = "last_seen";
|
||||||
public static final String STARTING_POSITION_EXTRA = "starting_position";
|
public static final String STARTING_POSITION_EXTRA = "starting_position";
|
||||||
|
|
||||||
private static final int PICK_GALLERY = 1;
|
// private static final int PICK_GALLERY = 1;
|
||||||
private static final int PICK_DOCUMENT = 2;
|
private static final int PICK_DOCUMENT = 2;
|
||||||
private static final int PICK_AUDIO = 3;
|
private static final int PICK_AUDIO = 3;
|
||||||
private static final int PICK_CONTACT = 4;
|
private static final int PICK_CONTACT = 4;
|
||||||
private static final int GET_CONTACT_DETAILS = 5;
|
private static final int GET_CONTACT_DETAILS = 5;
|
||||||
private static final int GROUP_EDIT = 6;
|
// private static final int GROUP_EDIT = 6;
|
||||||
private static final int TAKE_PHOTO = 7;
|
private static final int TAKE_PHOTO = 7;
|
||||||
private static final int ADD_CONTACT = 8;
|
private static final int ADD_CONTACT = 8;
|
||||||
private static final int PICK_LOCATION = 9;
|
private static final int PICK_LOCATION = 9;
|
||||||
@ -337,7 +334,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
private long threadId;
|
private long threadId;
|
||||||
private int distributionType;
|
private int distributionType;
|
||||||
private boolean archived;
|
private boolean archived;
|
||||||
private boolean isSecureText;
|
private boolean isSecureText; //TODO AC: Refaactor these field, as they are not required anyumore.
|
||||||
private boolean isDefaultSms = false;
|
private boolean isDefaultSms = false;
|
||||||
private boolean isMmsEnabled = false;
|
private boolean isMmsEnabled = false;
|
||||||
private boolean isSecurityInitialized = false;
|
private boolean isSecurityInitialized = false;
|
||||||
@ -624,16 +621,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
case GET_CONTACT_DETAILS:
|
case GET_CONTACT_DETAILS:
|
||||||
sendSharedContact(data.getParcelableArrayListExtra(ContactShareEditActivity.KEY_CONTACTS));
|
sendSharedContact(data.getParcelableArrayListExtra(ContactShareEditActivity.KEY_CONTACTS));
|
||||||
break;
|
break;
|
||||||
case GROUP_EDIT:
|
|
||||||
recipient = Recipient.from(this, data.getParcelableExtra(GroupCreateActivity.GROUP_ADDRESS_EXTRA), true);
|
|
||||||
recipient.addListener(this);
|
|
||||||
updateTitleTextView(recipient);
|
|
||||||
updateProfilePicture();
|
|
||||||
updateSubtitleTextView();
|
|
||||||
NotificationChannels.updateContactChannelName(this, recipient);
|
|
||||||
updateInputUI(recipient, isSecureText, isDefaultSms);
|
|
||||||
supportInvalidateOptionsMenu();
|
|
||||||
break;
|
|
||||||
case TAKE_PHOTO:
|
case TAKE_PHOTO:
|
||||||
if (attachmentManager.getCaptureUri() != null) {
|
if (attachmentManager.getCaptureUri() != null) {
|
||||||
setMedia(attachmentManager.getCaptureUri(), MediaType.IMAGE);
|
setMedia(attachmentManager.getCaptureUri(), MediaType.IMAGE);
|
||||||
@ -907,6 +894,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1258,20 +1246,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
keyboardHeight);
|
keyboardHeight);
|
||||||
}
|
}
|
||||||
attachmentTypeSelector.show(this, attachButton);
|
attachmentTypeSelector.show(this, attachButton);
|
||||||
} else {
|
|
||||||
handleManualMmsRequired();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleManualMmsRequired() {
|
|
||||||
Toast.makeText(this, R.string.MmsDownloader_error_reading_mms_settings, Toast.LENGTH_LONG).show();
|
|
||||||
|
|
||||||
Bundle extras = getIntent().getExtras();
|
|
||||||
Intent intent = new Intent(this, PromptMmsActivity.class);
|
|
||||||
if (extras != null) intent.putExtras(extras);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleUnverifiedRecipients() {
|
private void handleUnverifiedRecipients() {
|
||||||
List<Recipient> unverifiedRecipients = identityRecords.getUnverifiedRecipients(this);
|
List<Recipient> unverifiedRecipients = identityRecords.getUnverifiedRecipients(this);
|
||||||
List<IdentityRecord> unverifiedRecords = identityRecords.getUnverifiedRecords();
|
List<IdentityRecord> unverifiedRecords = identityRecords.getUnverifiedRecords();
|
||||||
@ -2297,9 +2274,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
|||||||
Log.i(TAG, "isManual Selection: " + sendButton.isManualSelection());
|
Log.i(TAG, "isManual Selection: " + sendButton.isManualSelection());
|
||||||
Log.i(TAG, "forceSms: " + forceSms);
|
Log.i(TAG, "forceSms: " + forceSms);
|
||||||
|
|
||||||
if ((recipient.isMmsGroupRecipient() || recipient.getAddress().isEmail()) && !isMmsEnabled) {
|
if (!forceSms && identityRecords.isUnverified()) {
|
||||||
handleManualMmsRequired();
|
|
||||||
} else if (!forceSms && identityRecords.isUnverified()) {
|
|
||||||
handleUnverifiedRecipients();
|
handleUnverifiedRecipients();
|
||||||
}/* else if (!forceSms && identityRecords.isUntrusted()) {
|
}/* else if (!forceSms && identityRecords.isUntrusted()) {
|
||||||
handleUntrustedRecipients();
|
handleUntrustedRecipients();
|
||||||
|
@ -5,25 +5,22 @@ import android.app.KeyguardManager;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.preference.CheckBoxPreference;
|
import androidx.preference.CheckBoxPreference;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
|
import org.session.libsignal.service.api.SignalServiceAccountManager;
|
||||||
import org.thoughtcrime.securesms.ApplicationContext;
|
import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.BlockedContactsActivity;
|
|
||||||
import org.thoughtcrime.securesms.PassphraseChangeActivity;
|
import org.thoughtcrime.securesms.PassphraseChangeActivity;
|
||||||
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
|
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
|
||||||
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
|
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
|
||||||
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
||||||
import org.thoughtcrime.securesms.jobs.MultiDeviceConfigurationUpdateJob;
|
import org.thoughtcrime.securesms.jobs.MultiDeviceConfigurationUpdateJob;
|
||||||
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
|
|
||||||
import org.thoughtcrime.securesms.lock.RegistrationLockDialog;
|
|
||||||
import org.thoughtcrime.securesms.service.KeyCachingService;
|
import org.thoughtcrime.securesms.service.KeyCachingService;
|
||||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||||
import org.session.libsignal.service.api.SignalServiceAccountManager;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@ -34,9 +31,6 @@ import network.loki.messenger.R;
|
|||||||
|
|
||||||
public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment implements InjectableType {
|
public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment implements InjectableType {
|
||||||
|
|
||||||
// private static final String PREFERENCE_CATEGORY_BLOCKED = "preference_category_blocked";
|
|
||||||
// private static final String PREFERENCE_UNIDENTIFIED_LEARN_MORE = "pref_unidentified_learn_more";
|
|
||||||
|
|
||||||
private CheckBoxPreference disablePassphrase;
|
private CheckBoxPreference disablePassphrase;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@ -54,7 +48,6 @@ public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment
|
|||||||
|
|
||||||
disablePassphrase = (CheckBoxPreference) this.findPreference("pref_enable_passphrase_temporary");
|
disablePassphrase = (CheckBoxPreference) this.findPreference("pref_enable_passphrase_temporary");
|
||||||
|
|
||||||
// this.findPreference(TextSecurePreferences.REGISTRATION_LOCK_PREF).setOnPreferenceClickListener(new AccountLockClickListener());
|
|
||||||
this.findPreference(TextSecurePreferences.SCREEN_LOCK).setOnPreferenceChangeListener(new ScreenLockListener());
|
this.findPreference(TextSecurePreferences.SCREEN_LOCK).setOnPreferenceChangeListener(new ScreenLockListener());
|
||||||
this.findPreference(TextSecurePreferences.SCREEN_LOCK_TIMEOUT).setOnPreferenceClickListener(new ScreenLockTimeoutListener());
|
this.findPreference(TextSecurePreferences.SCREEN_LOCK_TIMEOUT).setOnPreferenceClickListener(new ScreenLockTimeoutListener());
|
||||||
|
|
||||||
@ -63,10 +56,6 @@ public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment
|
|||||||
this.findPreference(TextSecurePreferences.READ_RECEIPTS_PREF).setOnPreferenceChangeListener(new ReadReceiptToggleListener());
|
this.findPreference(TextSecurePreferences.READ_RECEIPTS_PREF).setOnPreferenceChangeListener(new ReadReceiptToggleListener());
|
||||||
this.findPreference(TextSecurePreferences.TYPING_INDICATORS).setOnPreferenceChangeListener(new TypingIndicatorsToggleListener());
|
this.findPreference(TextSecurePreferences.TYPING_INDICATORS).setOnPreferenceChangeListener(new TypingIndicatorsToggleListener());
|
||||||
this.findPreference(TextSecurePreferences.LINK_PREVIEWS).setOnPreferenceChangeListener(new LinkPreviewToggleListener());
|
this.findPreference(TextSecurePreferences.LINK_PREVIEWS).setOnPreferenceChangeListener(new LinkPreviewToggleListener());
|
||||||
// this.findPreference(PREFERENCE_CATEGORY_BLOCKED).setOnPreferenceClickListener(new BlockedContactsClickListener());
|
|
||||||
// this.findPreference(TextSecurePreferences.SHOW_UNIDENTIFIED_DELIVERY_INDICATORS).setOnPreferenceChangeListener(new ShowUnidentifiedDeliveryIndicatorsChangedListener());
|
|
||||||
// this.findPreference(TextSecurePreferences.UNIVERSAL_UNIDENTIFIED_ACCESS).setOnPreferenceChangeListener(new UniversalUnidentifiedAccessChangedListener());
|
|
||||||
// this.findPreference(PREFERENCE_UNIDENTIFIED_LEARN_MORE).setOnPreferenceClickListener(new UnidentifiedLearnMoreClickListener());
|
|
||||||
disablePassphrase.setOnPreferenceChangeListener(new DisablePassphraseClickListener());
|
disablePassphrase.setOnPreferenceChangeListener(new DisablePassphraseClickListener());
|
||||||
|
|
||||||
initializeVisibility();
|
initializeVisibility();
|
||||||
@ -154,28 +143,6 @@ public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AccountLockClickListener implements Preference.OnPreferenceClickListener {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
if (((SwitchPreferenceCompat)preference).isChecked()) {
|
|
||||||
RegistrationLockDialog.showRegistrationUnlockPrompt(getContext(), (SwitchPreferenceCompat)preference, accountManager);
|
|
||||||
} else {
|
|
||||||
RegistrationLockDialog.showRegistrationLockPrompt(getContext(), (SwitchPreferenceCompat)preference, accountManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class BlockedContactsClickListener implements Preference.OnPreferenceClickListener {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
Intent intent = new Intent(getActivity(), BlockedContactsActivity.class);
|
|
||||||
startActivity(intent);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ReadReceiptToggleListener implements Preference.OnPreferenceChangeListener {
|
private class ReadReceiptToggleListener implements Preference.OnPreferenceChangeListener {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
@ -266,8 +233,6 @@ public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Derecated
|
|
||||||
|
|
||||||
private class ChangePassphraseClickListener implements Preference.OnPreferenceClickListener {
|
private class ChangePassphraseClickListener implements Preference.OnPreferenceClickListener {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
@ -333,37 +298,4 @@ public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ShowUnidentifiedDeliveryIndicatorsChangedListener implements Preference.OnPreferenceChangeListener {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
||||||
boolean enabled = (boolean) newValue;
|
|
||||||
ApplicationContext.getInstance(getContext())
|
|
||||||
.getJobManager()
|
|
||||||
.add(new MultiDeviceConfigurationUpdateJob(TextSecurePreferences.isReadReceiptsEnabled(getContext()),
|
|
||||||
TextSecurePreferences.isTypingIndicatorsEnabled(getContext()),
|
|
||||||
enabled,
|
|
||||||
TextSecurePreferences.isLinkPreviewsEnabled(getContext())));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class UniversalUnidentifiedAccessChangedListener implements Preference.OnPreferenceChangeListener {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
|
||||||
ApplicationContext.getInstance(getContext())
|
|
||||||
.getJobManager()
|
|
||||||
.add(new RefreshAttributesJob());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class UnidentifiedLearnMoreClickListener implements Preference.OnPreferenceClickListener {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
CommunicationActions.openBrowserLink(preference.getContext(), "https://signal.org/blog/sealed-sender/");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.preferences;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.preference.ListPreference;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class AppearancePreferenceFragment extends ListSummaryPreferenceFragment {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle paramBundle) {
|
|
||||||
super.onCreate(paramBundle);
|
|
||||||
|
|
||||||
this.findPreference(TextSecurePreferences.THEME_PREF).setOnPreferenceChangeListener(new ListSummaryListener());
|
|
||||||
this.findPreference(TextSecurePreferences.LANGUAGE_PREF).setOnPreferenceChangeListener(new ListSummaryListener());
|
|
||||||
initializeListSummary((ListPreference)findPreference(TextSecurePreferences.THEME_PREF));
|
|
||||||
initializeListSummary((ListPreference)findPreference(TextSecurePreferences.LANGUAGE_PREF));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
|
|
||||||
addPreferencesFromResource(R.xml.preferences_appearance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener((ApplicationPreferencesActivity)getActivity());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
((ApplicationPreferencesActivity) getActivity()).getSupportActionBar().setTitle(R.string.preferences__appearance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener((ApplicationPreferencesActivity) getActivity());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CharSequence getSummary(Context context) {
|
|
||||||
String[] languageEntries = context.getResources().getStringArray(R.array.language_entries);
|
|
||||||
String[] languageEntryValues = context.getResources().getStringArray(R.array.language_values);
|
|
||||||
String[] themeEntries = context.getResources().getStringArray(R.array.pref_theme_entries);
|
|
||||||
String[] themeEntryValues = context.getResources().getStringArray(R.array.pref_theme_values);
|
|
||||||
|
|
||||||
int langIndex = Arrays.asList(languageEntryValues).indexOf(TextSecurePreferences.getLanguage(context));
|
|
||||||
int themeIndex = Arrays.asList(themeEntryValues).indexOf(TextSecurePreferences.getTheme(context));
|
|
||||||
|
|
||||||
if (langIndex == -1) langIndex = 0;
|
|
||||||
if (themeIndex == -1) themeIndex = 0;
|
|
||||||
|
|
||||||
return context.getString(R.string.ApplicationPreferencesActivity_appearance_summary,
|
|
||||||
themeEntries[themeIndex],
|
|
||||||
languageEntries[langIndex]);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.preferences;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.widget.RelativeLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
import org.thoughtcrime.securesms.components.AvatarImageView;
|
|
||||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
|
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
|
||||||
|
|
||||||
public class BlockedContactListItem extends RelativeLayout implements RecipientModifiedListener {
|
|
||||||
|
|
||||||
private AvatarImageView contactPhotoImage;
|
|
||||||
private TextView nameView;
|
|
||||||
private GlideRequests glideRequests;
|
|
||||||
private Recipient recipient;
|
|
||||||
|
|
||||||
public BlockedContactListItem(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockedContactListItem(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockedContactListItem(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFinishInflate() {
|
|
||||||
super.onFinishInflate();
|
|
||||||
this.contactPhotoImage = findViewById(R.id.contact_photo_image);
|
|
||||||
this.nameView = findViewById(R.id.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void set(@NonNull GlideRequests glideRequests, @NonNull Recipient recipients) {
|
|
||||||
this.glideRequests = glideRequests;
|
|
||||||
this.recipient = recipients;
|
|
||||||
|
|
||||||
onModified(recipients);
|
|
||||||
recipients.addListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onModified(final Recipient recipients) {
|
|
||||||
final AvatarImageView contactPhotoImage = this.contactPhotoImage;
|
|
||||||
final TextView nameView = this.nameView;
|
|
||||||
|
|
||||||
Util.runOnMain(() -> {
|
|
||||||
contactPhotoImage.setAvatar(glideRequests, recipients, false);
|
|
||||||
nameView.setText(recipients.toShortString());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public Recipient getRecipient() {
|
|
||||||
return recipient;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,76 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2011 Whisper Systems
|
|
||||||
*
|
|
||||||
* 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.preferences;
|
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
|
||||||
|
|
||||||
public class MmsPreferencesActivity extends PassphraseRequiredActionBarActivity {
|
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
|
||||||
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreCreate() {
|
|
||||||
dynamicTheme.onCreate(this);
|
|
||||||
dynamicLanguage.onCreate(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle icicle, boolean ready) {
|
|
||||||
assert getSupportActionBar() != null;
|
|
||||||
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
|
|
||||||
Fragment fragment = new MmsPreferencesFragment();
|
|
||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
|
||||||
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
|
||||||
fragmentTransaction.replace(android.R.id.content, fragment);
|
|
||||||
fragmentTransaction.commit();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
dynamicTheme.onResume(this);
|
|
||||||
dynamicLanguage.onResume(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case android.R.id.home:
|
|
||||||
finish();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
super.onBackPressed();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,103 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (C) 2014 Open Whisper Systems
|
|
||||||
*
|
|
||||||
* 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.preferences;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
import org.thoughtcrime.securesms.components.CustomDefaultPreference;
|
|
||||||
import org.thoughtcrime.securesms.database.ApnDatabase;
|
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
|
||||||
import org.thoughtcrime.securesms.mms.LegacyMmsConnection;
|
|
||||||
import org.thoughtcrime.securesms.util.TelephonyUtil;
|
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
|
|
||||||
public class MmsPreferencesFragment extends CorrectedPreferenceFragment {
|
|
||||||
|
|
||||||
private static final String TAG = MmsPreferencesFragment.class.getSimpleName();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle paramBundle) {
|
|
||||||
super.onCreate(paramBundle);
|
|
||||||
|
|
||||||
((PassphraseRequiredActionBarActivity) getActivity()).getSupportActionBar()
|
|
||||||
.setTitle(R.string.preferences__advanced_mms_access_point_names);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
|
|
||||||
addPreferencesFromResource(R.xml.preferences_manual_mms);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
new LoadApnDefaultsTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class LoadApnDefaultsTask extends AsyncTask<Void, Void, LegacyMmsConnection.Apn> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected LegacyMmsConnection.Apn doInBackground(Void... params) {
|
|
||||||
try {
|
|
||||||
Context context = getActivity();
|
|
||||||
|
|
||||||
if (context != null) {
|
|
||||||
return ApnDatabase.getInstance(context)
|
|
||||||
.getDefaultApnParameters(TelephonyUtil.getMccMnc(context),
|
|
||||||
TelephonyUtil.getApn(context));
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
Log.w(TAG, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(LegacyMmsConnection.Apn apnDefaults) {
|
|
||||||
((CustomDefaultPreference)findPreference(TextSecurePreferences.MMSC_HOST_PREF))
|
|
||||||
.setValidator(new CustomDefaultPreference.CustomDefaultPreferenceDialogFragmentCompat.UriValidator())
|
|
||||||
.setDefaultValue(apnDefaults.getMmsc());
|
|
||||||
|
|
||||||
((CustomDefaultPreference)findPreference(TextSecurePreferences.MMSC_PROXY_HOST_PREF))
|
|
||||||
.setValidator(new CustomDefaultPreference.CustomDefaultPreferenceDialogFragmentCompat.HostnameValidator())
|
|
||||||
.setDefaultValue(apnDefaults.getProxy());
|
|
||||||
|
|
||||||
((CustomDefaultPreference)findPreference(TextSecurePreferences.MMSC_PROXY_PORT_PREF))
|
|
||||||
.setValidator(new CustomDefaultPreference.CustomDefaultPreferenceDialogFragmentCompat.PortValidator())
|
|
||||||
.setDefaultValue(apnDefaults.getPort());
|
|
||||||
|
|
||||||
((CustomDefaultPreference)findPreference(TextSecurePreferences.MMSC_USERNAME_PREF))
|
|
||||||
.setDefaultValue(apnDefaults.getPort());
|
|
||||||
|
|
||||||
((CustomDefaultPreference)findPreference(TextSecurePreferences.MMSC_PASSWORD_PREF))
|
|
||||||
.setDefaultValue(apnDefaults.getPassword());
|
|
||||||
|
|
||||||
((CustomDefaultPreference)findPreference(TextSecurePreferences.MMS_USER_AGENT))
|
|
||||||
.setDefaultValue(LegacyMmsConnection.USER_AGENT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -64,10 +64,6 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
|||||||
.setOnPreferenceChangeListener(new NotificationPrivacyListener());
|
.setOnPreferenceChangeListener(new NotificationPrivacyListener());
|
||||||
this.findPreference(TextSecurePreferences.NOTIFICATION_PRIORITY_PREF)
|
this.findPreference(TextSecurePreferences.NOTIFICATION_PRIORITY_PREF)
|
||||||
.setOnPreferenceChangeListener(new ListSummaryListener());
|
.setOnPreferenceChangeListener(new ListSummaryListener());
|
||||||
/*
|
|
||||||
this.findPreference(TextSecurePreferences.CALL_RINGTONE_PREF)
|
|
||||||
.setOnPreferenceChangeListener(new RingtoneSummaryListener());
|
|
||||||
*/
|
|
||||||
this.findPreference(TextSecurePreferences.VIBRATE_PREF)
|
this.findPreference(TextSecurePreferences.VIBRATE_PREF)
|
||||||
.setOnPreferenceChangeListener((preference, newValue) -> {
|
.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
NotificationChannels.updateMessageVibrate(getContext(), (boolean) newValue);
|
NotificationChannels.updateMessageVibrate(getContext(), (boolean) newValue);
|
||||||
@ -90,24 +86,6 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
this.findPreference(TextSecurePreferences.CALL_RINGTONE_PREF)
|
|
||||||
.setOnPreferenceClickListener(preference -> {
|
|
||||||
Uri current = TextSecurePreferences.getCallNotificationRingtone(getContext());
|
|
||||||
|
|
||||||
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
|
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
|
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
|
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
|
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Settings.System.DEFAULT_RINGTONE_URI);
|
|
||||||
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, current);
|
|
||||||
|
|
||||||
startActivityForResult(intent, 2);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.LED_COLOR_PREF));
|
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.LED_COLOR_PREF));
|
||||||
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.REPEAT_ALERTS_PREF));
|
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.REPEAT_ALERTS_PREF));
|
||||||
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF));
|
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF));
|
||||||
@ -126,9 +104,7 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
|||||||
}
|
}
|
||||||
|
|
||||||
initializeRingtoneSummary(findPreference(TextSecurePreferences.RINGTONE_PREF));
|
initializeRingtoneSummary(findPreference(TextSecurePreferences.RINGTONE_PREF));
|
||||||
// initializeCallRingtoneSummary(findPreference(TextSecurePreferences.CALL_RINGTONE_PREF));
|
|
||||||
initializeMessageVibrateSummary((SwitchPreferenceCompat)findPreference(TextSecurePreferences.VIBRATE_PREF));
|
initializeMessageVibrateSummary((SwitchPreferenceCompat)findPreference(TextSecurePreferences.VIBRATE_PREF));
|
||||||
// initializeCallVibrateSummary((SwitchPreferenceCompat)findPreference(TextSecurePreferences.CALL_VIBRATE_PREF));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -154,12 +130,6 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
|||||||
} else if (requestCode == 2 && resultCode == RESULT_OK && data != null) {
|
} else if (requestCode == 2 && resultCode == RESULT_OK && data != null) {
|
||||||
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
||||||
|
|
||||||
if (Settings.System.DEFAULT_RINGTONE_URI.equals(uri)) {
|
|
||||||
TextSecurePreferences.removeCallNotificationRingtone(getContext());
|
|
||||||
} else {
|
|
||||||
TextSecurePreferences.setCallNotificationRingtone(getContext(), uri != null ? uri.toString() : Uri.EMPTY.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// initializeCallRingtoneSummary(findPreference(TextSecurePreferences.CALL_RINGTONE_PREF));
|
// initializeCallRingtoneSummary(findPreference(TextSecurePreferences.CALL_RINGTONE_PREF));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,21 +160,10 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
|
|||||||
listener.onPreferenceChange(pref, uri);
|
listener.onPreferenceChange(pref, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeCallRingtoneSummary(Preference pref) {
|
|
||||||
RingtoneSummaryListener listener = (RingtoneSummaryListener) pref.getOnPreferenceChangeListener();
|
|
||||||
Uri uri = TextSecurePreferences.getCallNotificationRingtone(getContext());
|
|
||||||
|
|
||||||
listener.onPreferenceChange(pref, uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeMessageVibrateSummary(SwitchPreferenceCompat pref) {
|
private void initializeMessageVibrateSummary(SwitchPreferenceCompat pref) {
|
||||||
pref.setChecked(TextSecurePreferences.isNotificationVibrateEnabled(getContext()));
|
pref.setChecked(TextSecurePreferences.isNotificationVibrateEnabled(getContext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeCallVibrateSummary(SwitchPreferenceCompat pref) {
|
|
||||||
pref.setChecked(TextSecurePreferences.isCallNotificationVibrateEnabled(getContext()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CharSequence getSummary(Context context) {
|
public static CharSequence getSummary(Context context) {
|
||||||
final int onCapsResId = R.string.ApplicationPreferencesActivity_On;
|
final int onCapsResId = R.string.ApplicationPreferencesActivity_On;
|
||||||
final int offCapsResId = R.string.ApplicationPreferencesActivity_Off;
|
final int offCapsResId = R.string.ApplicationPreferencesActivity_Off;
|
||||||
|
@ -1,118 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms.preferences;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Build.VERSION;
|
|
||||||
import android.os.Build.VERSION_CODES;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.provider.Settings;
|
|
||||||
import android.provider.Telephony;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
|
|
||||||
import network.loki.messenger.R;
|
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
|
||||||
|
|
||||||
public class SmsMmsPreferenceFragment extends CorrectedPreferenceFragment {
|
|
||||||
private static final String KITKAT_DEFAULT_PREF = "pref_set_default";
|
|
||||||
private static final String MMS_PREF = "pref_mms_preferences";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle paramBundle) {
|
|
||||||
super.onCreate(paramBundle);
|
|
||||||
|
|
||||||
|
|
||||||
this.findPreference(MMS_PREF)
|
|
||||||
.setOnPreferenceClickListener(new ApnPreferencesClickListener());
|
|
||||||
|
|
||||||
initializePlatformSpecificOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
|
|
||||||
addPreferencesFromResource(R.xml.preferences_sms_mms);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
((ApplicationPreferencesActivity) getActivity()).getSupportActionBar().setTitle(R.string.preferences__sms_mms);
|
|
||||||
|
|
||||||
initializeDefaultPreference();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializePlatformSpecificOptions() {
|
|
||||||
PreferenceScreen preferenceScreen = getPreferenceScreen();
|
|
||||||
Preference defaultPreference = findPreference(KITKAT_DEFAULT_PREF);
|
|
||||||
Preference allSmsPreference = findPreference(TextSecurePreferences.ALL_SMS_PREF);
|
|
||||||
Preference allMmsPreference = findPreference(TextSecurePreferences.ALL_MMS_PREF);
|
|
||||||
Preference manualMmsPreference = findPreference(MMS_PREF);
|
|
||||||
|
|
||||||
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
|
|
||||||
if (allSmsPreference != null) preferenceScreen.removePreference(allSmsPreference);
|
|
||||||
if (allMmsPreference != null) preferenceScreen.removePreference(allMmsPreference);
|
|
||||||
} else if (defaultPreference != null) {
|
|
||||||
preferenceScreen.removePreference(defaultPreference);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP && manualMmsPreference != null) {
|
|
||||||
preferenceScreen.removePreference(manualMmsPreference);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeDefaultPreference() {
|
|
||||||
if (VERSION.SDK_INT < VERSION_CODES.KITKAT) return;
|
|
||||||
|
|
||||||
Preference defaultPreference = findPreference(KITKAT_DEFAULT_PREF);
|
|
||||||
if (Util.isDefaultSmsProvider(getActivity())) {
|
|
||||||
if (VERSION.SDK_INT < VERSION_CODES.M) defaultPreference.setIntent(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
|
|
||||||
if (VERSION.SDK_INT < VERSION_CODES.N) defaultPreference.setIntent(new Intent(Settings.ACTION_SETTINGS));
|
|
||||||
else defaultPreference.setIntent(new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS));
|
|
||||||
|
|
||||||
defaultPreference.setTitle(getString(R.string.ApplicationPreferencesActivity_sms_enabled));
|
|
||||||
defaultPreference.setSummary(getString(R.string.ApplicationPreferencesActivity_touch_to_change_your_default_sms_app));
|
|
||||||
} else {
|
|
||||||
Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
|
|
||||||
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getActivity().getPackageName());
|
|
||||||
defaultPreference.setIntent(intent);
|
|
||||||
defaultPreference.setTitle(getString(R.string.ApplicationPreferencesActivity_sms_disabled));
|
|
||||||
defaultPreference.setSummary(getString(R.string.ApplicationPreferencesActivity_touch_to_make_signal_your_default_sms_app));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ApnPreferencesClickListener implements Preference.OnPreferenceClickListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
Fragment fragment = new MmsPreferencesFragment();
|
|
||||||
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
|
|
||||||
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
|
||||||
fragmentTransaction.replace(android.R.id.content, fragment);
|
|
||||||
fragmentTransaction.addToBackStack(null);
|
|
||||||
fragmentTransaction.commit();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CharSequence getSummary(Context context) {
|
|
||||||
final String on = context.getString(R.string.ApplicationPreferencesActivity_on);
|
|
||||||
final String onCaps = context.getString(R.string.ApplicationPreferencesActivity_On);
|
|
||||||
final String off = context.getString(R.string.ApplicationPreferencesActivity_off);
|
|
||||||
final String offCaps = context.getString(R.string.ApplicationPreferencesActivity_Off);
|
|
||||||
final int smsMmsSummaryResId = R.string.ApplicationPreferencesActivity_sms_mms_summary;
|
|
||||||
|
|
||||||
boolean postKitkatSMS = Util.isDefaultSmsProvider(context);
|
|
||||||
boolean preKitkatSMS = TextSecurePreferences.isInterceptAllSmsEnabled(context);
|
|
||||||
boolean preKitkatMMS = TextSecurePreferences.isInterceptAllMmsEnabled(context);
|
|
||||||
|
|
||||||
if (postKitkatSMS) return onCaps;
|
|
||||||
else return offCaps;
|
|
||||||
}
|
|
||||||
}
|
|
@ -139,10 +139,6 @@ public class TextSecurePreferences {
|
|||||||
private static final String ATTACHMENT_UNENCRYPTED_SECRET = "pref_attachment_unencrypted_secret";
|
private static final String ATTACHMENT_UNENCRYPTED_SECRET = "pref_attachment_unencrypted_secret";
|
||||||
private static final String NEEDS_SQLCIPHER_MIGRATION = "pref_needs_sql_cipher_migration";
|
private static final String NEEDS_SQLCIPHER_MIGRATION = "pref_needs_sql_cipher_migration";
|
||||||
|
|
||||||
public static final String CALL_NOTIFICATIONS_PREF = "pref_call_notifications";
|
|
||||||
public static final String CALL_RINGTONE_PREF = "pref_call_ringtone";
|
|
||||||
public static final String CALL_VIBRATE_PREF = "pref_call_vibrate";
|
|
||||||
|
|
||||||
private static final String NEXT_PRE_KEY_ID = "pref_next_pre_key_id";
|
private static final String NEXT_PRE_KEY_ID = "pref_next_pre_key_id";
|
||||||
private static final String ACTIVE_SIGNED_PRE_KEY_ID = "pref_active_signed_pre_key_id";
|
private static final String ACTIVE_SIGNED_PRE_KEY_ID = "pref_active_signed_pre_key_id";
|
||||||
private static final String NEXT_SIGNED_PRE_KEY_ID = "pref_next_signed_pre_key_id";
|
private static final String NEXT_SIGNED_PRE_KEY_ID = "pref_next_signed_pre_key_id";
|
||||||
@ -972,10 +968,6 @@ public class TextSecurePreferences {
|
|||||||
return getBooleanPreference(context, NOTIFICATION_PREF, true);
|
return getBooleanPreference(context, NOTIFICATION_PREF, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCallNotificationsEnabled(Context context) {
|
|
||||||
return getBooleanPreference(context, CALL_NOTIFICATIONS_PREF, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static @NonNull Uri getNotificationRingtone(Context context) {
|
public static @NonNull Uri getNotificationRingtone(Context context) {
|
||||||
String result = getStringPreference(context, RINGTONE_PREF, Settings.System.DEFAULT_NOTIFICATION_URI.toString());
|
String result = getStringPreference(context, RINGTONE_PREF, Settings.System.DEFAULT_NOTIFICATION_URI.toString());
|
||||||
|
|
||||||
@ -986,32 +978,14 @@ public class TextSecurePreferences {
|
|||||||
return Uri.parse(result);
|
return Uri.parse(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static @NonNull Uri getCallNotificationRingtone(Context context) {
|
|
||||||
String result = getStringPreference(context, CALL_RINGTONE_PREF, Settings.System.DEFAULT_RINGTONE_URI.toString());
|
|
||||||
|
|
||||||
if (result != null && result.startsWith("file:")) {
|
|
||||||
result = Settings.System.DEFAULT_RINGTONE_URI.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Uri.parse(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void removeNotificationRingtone(Context context) {
|
public static void removeNotificationRingtone(Context context) {
|
||||||
removePreference(context, RINGTONE_PREF);
|
removePreference(context, RINGTONE_PREF);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeCallNotificationRingtone(Context context) {
|
|
||||||
removePreference(context, CALL_RINGTONE_PREF);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setNotificationRingtone(Context context, String ringtone) {
|
public static void setNotificationRingtone(Context context, String ringtone) {
|
||||||
setStringPreference(context, RINGTONE_PREF, ringtone);
|
setStringPreference(context, RINGTONE_PREF, ringtone);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setCallNotificationRingtone(Context context, String ringtone) {
|
|
||||||
setStringPreference(context, CALL_RINGTONE_PREF, ringtone);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setNotificationVibrateEnabled(Context context, boolean enabled) {
|
public static void setNotificationVibrateEnabled(Context context, boolean enabled) {
|
||||||
setBooleanPreference(context, VIBRATE_PREF, enabled);
|
setBooleanPreference(context, VIBRATE_PREF, enabled);
|
||||||
}
|
}
|
||||||
@ -1020,16 +994,6 @@ public class TextSecurePreferences {
|
|||||||
return getBooleanPreference(context, VIBRATE_PREF, true);
|
return getBooleanPreference(context, VIBRATE_PREF, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCallNotificationVibrateEnabled(Context context) {
|
|
||||||
boolean defaultValue = true;
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
||||||
defaultValue = (Settings.System.getInt(context.getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 1) == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return getBooleanPreference(context, CALL_VIBRATE_PREF, defaultValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getNotificationLedColor(Context context) {
|
public static String getNotificationLedColor(Context context) {
|
||||||
return getStringPreference(context, LED_COLOR_PREF, "blue");
|
return getStringPreference(context, LED_COLOR_PREF, "blue");
|
||||||
}
|
}
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.preferences.BlockedContactListItem
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?android:attr/listPreferredItemHeight"
|
|
||||||
android:paddingEnd="25dip">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.AvatarImageView
|
|
||||||
android:id="@+id/contact_photo_image"
|
|
||||||
android:layout_width="@dimen/contact_selection_photo_size"
|
|
||||||
android:layout_height="@dimen/contact_selection_photo_size"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_marginStart="10dp"
|
|
||||||
android:cropToPadding="true"
|
|
||||||
android:scaleType="centerCrop"
|
|
||||||
android:contentDescription="@string/SingleContactSelectionActivity_contact_photo" />
|
|
||||||
|
|
||||||
<TextView android:id="@+id/name"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_marginStart="14dip"
|
|
||||||
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="marquee"
|
|
||||||
android:layout_toEndOf="@id/contact_photo_image"
|
|
||||||
android:gravity="center_vertical|start"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
|
||||||
|
|
||||||
</org.thoughtcrime.securesms.preferences.BlockedContactListItem>
|
|
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:paddingStart="16dip"
|
|
||||||
android:paddingEnd="16dip">
|
|
||||||
|
|
||||||
<ListView android:id="@id/android:list"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:drawSelectorOnTop="false"/>
|
|
||||||
|
|
||||||
<TextView android:id="@id/android:empty"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_gravity="center|center_vertical"
|
|
||||||
android:gravity="center|center_vertical"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:text="@string/blocked_contacts_fragment__no_blocked_contacts"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,74 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<LinearLayout android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<LinearLayout android:id="@+id/toggle_container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<EditText android:id="@+id/search_view"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_width="0px"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:hint="@string/activity_contact_selection_search_bar_placeholder"
|
|
||||||
android:inputType="textPersonName"
|
|
||||||
style="@style/TextSecure.TitleTextStyle"
|
|
||||||
android:background="@android:color/transparent"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:textCursorDrawable="@null"
|
|
||||||
android:textSize="18sp"
|
|
||||||
android:fontFamily="sans-serif"/>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.AnimatingToggle
|
|
||||||
android:id="@+id/button_toggle"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:paddingStart="10dp"
|
|
||||||
android:paddingEnd="10dp"
|
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<!--<ImageView android:id="@+id/search_dialpad"-->
|
|
||||||
<!--android:layout_width="wrap_content"-->
|
|
||||||
<!--android:layout_height="wrap_content"-->
|
|
||||||
<!--android:layout_gravity="center_vertical"-->
|
|
||||||
<!--android:gravity="center_vertical"-->
|
|
||||||
<!--android:clickable="true"-->
|
|
||||||
<!--android:focusable="true"-->
|
|
||||||
<!--android:background="@drawable/circle_touch_highlight_background"-->
|
|
||||||
<!--android:src="@drawable/ic_dialpad_white_24dp" />-->
|
|
||||||
|
|
||||||
<!--<ImageView android:id="@+id/search_keyboard"-->
|
|
||||||
<!--android:layout_width="wrap_content"-->
|
|
||||||
<!--android:layout_height="wrap_content"-->
|
|
||||||
<!--android:layout_gravity="center_vertical"-->
|
|
||||||
<!--android:gravity="center_vertical"-->
|
|
||||||
<!--android:clickable="true"-->
|
|
||||||
<!--android:visibility="gone"-->
|
|
||||||
<!--android:focusable="true"-->
|
|
||||||
<!--android:background="@drawable/circle_touch_highlight_background"-->
|
|
||||||
<!--android:src="@drawable/ic_keyboard_white_24dp" />-->
|
|
||||||
|
|
||||||
<ImageView android:id="@+id/search_clear"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:clickable="true"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:focusable="true"
|
|
||||||
android:background="@drawable/circle_touch_highlight_background"
|
|
||||||
android:src="@drawable/ic_clear_white_24dp" />
|
|
||||||
|
|
||||||
</org.thoughtcrime.securesms.components.AnimatingToggle>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</merge>
|
|
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout android:layout_gravity="center"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:orientation="vertical"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.ContactFilterToolbar
|
|
||||||
android:id="@+id/toolbar"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:minHeight="?attr/actionBarSize"
|
|
||||||
android:background="?attr/colorPrimary"
|
|
||||||
android:elevation="4dp"
|
|
||||||
android:theme="?attr/actionBarStyle"
|
|
||||||
app:contentInsetStartWithNavigation="0dp"/>
|
|
||||||
|
|
||||||
<fragment android:id="@+id/contact_selection_list_fragment"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:name="org.thoughtcrime.securesms.loki.fragments.ContactSelectionListFragment" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,102 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<LinearLayout 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"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="20dp"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
|
|
||||||
<LinearLayout android:id="@+id/group_details_layout"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="106dp"
|
|
||||||
android:paddingStart="14dp"
|
|
||||||
android:paddingEnd="18dp"
|
|
||||||
android:paddingTop="14dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.ImageDivet android:id="@+id/avatar"
|
|
||||||
android:layout_width="70dp"
|
|
||||||
android:layout_height="70dp"
|
|
||||||
position="bottom_right"
|
|
||||||
android:layout_marginEnd="10dp"
|
|
||||||
android:contentDescription="@string/GroupCreateActivity_avatar_content_description" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiEditText
|
|
||||||
android:id="@+id/group_name"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:lines="1"
|
|
||||||
android:maxLength="255"
|
|
||||||
android:inputType="textAutoCorrect"
|
|
||||||
android:hint="@string/GroupCreateActivity_group_name_hint" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout android:id="@+id/creating_group_layout"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="106dp"
|
|
||||||
android:paddingStart="18dp"
|
|
||||||
android:paddingEnd="18dp"
|
|
||||||
android:paddingTop="18dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<ProgressBar android:id="@+id/creating_progress_bar"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginEnd="10dp"
|
|
||||||
style="@android:style/Widget.ProgressBar"
|
|
||||||
android:indeterminate="true" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
|
||||||
android:id="@+id/creating_group_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<RelativeLayout android:id="@+id/push_disabled"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="106dp"
|
|
||||||
android:padding="15dp"
|
|
||||||
android:gravity="center_vertical|center_horizontal"
|
|
||||||
android:background="#aa000000"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<TextView android:id="@+id/push_disabled_reason"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:padding="8dp"
|
|
||||||
android:background="#dd222222"
|
|
||||||
android:textColor="#ffeeeeee"
|
|
||||||
android:fontFamily="sans-serif-light"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:text="@string/GroupCreateActivity_contacts_dont_support_push" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.PushRecipientsPanel android:id="@+id/recipients"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingStart="15dp"
|
|
||||||
android:paddingEnd="15dp" />
|
|
||||||
|
|
||||||
<ListView android:id="@+id/selected_contacts_list"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
@ -1,121 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<ScrollView android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:fillViewport="true"
|
|
||||||
android:clickable="false">
|
|
||||||
|
|
||||||
<LinearLayout android:layout_gravity="center"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:padding="10dp">
|
|
||||||
|
|
||||||
<ImageView android:id="@+id/heart"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:contentDescription="@string/InviteActivity_heart_content_description"
|
|
||||||
android:src="@drawable/love_heart" />
|
|
||||||
|
|
||||||
<TextView android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textColor="@color/white"
|
|
||||||
android:textSize="20sp"
|
|
||||||
android:text="@string/InviteActivity_friends_dont_let_friends_text_unencrypted"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:layout_marginBottom="30dp"
|
|
||||||
android:layout_marginTop="18dp"
|
|
||||||
android:fontFamily="sans-serif-light"
|
|
||||||
android:paddingStart="10dp"/>
|
|
||||||
|
|
||||||
<EditText android:id="@+id/invite_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minLines="2"
|
|
||||||
tools:text="Let's switch to Signal: https://sgnl.link/asdfdfsa"
|
|
||||||
android:background="@drawable/message_bubble_background"
|
|
||||||
android:paddingTop="10dp"
|
|
||||||
android:paddingBottom="10dp"
|
|
||||||
android:paddingStart="10dp"
|
|
||||||
android:paddingEnd="20dp"
|
|
||||||
android:gravity="top"
|
|
||||||
android:inputType="textShortMessage|textMultiLine"
|
|
||||||
android:textColor="#ff333333"/>
|
|
||||||
|
|
||||||
<LinearLayout android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<Button android:id="@+id/share_button"
|
|
||||||
android:drawablePadding="10dp"
|
|
||||||
android:drawableStart="@drawable/ic_share_black_18dp"
|
|
||||||
android:text="@string/InviteActivity_share"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
tools:ignore="ButtonStyle" />
|
|
||||||
|
|
||||||
<Button android:id="@+id/sms_button"
|
|
||||||
android:drawableStart="@drawable/ic_message_black_18dp"
|
|
||||||
android:drawablePadding="10dp"
|
|
||||||
android:text="@string/InviteActivity_choose_contacts"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
tools:ignore="ButtonStyle" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
</ScrollView>
|
|
||||||
|
|
||||||
<LinearLayout android:id="@+id/sms_send_frame"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@color/white"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.ContactFilterToolbar
|
|
||||||
android:id="@+id/contact_filter"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:minHeight="?attr/actionBarSize"
|
|
||||||
android:background="?attr/colorPrimary"
|
|
||||||
android:elevation="4dp"
|
|
||||||
android:theme="@style/TextSecure.LightActionBar" />
|
|
||||||
|
|
||||||
<fragment android:id="@+id/contact_selection_list_fragment"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:name="org.thoughtcrime.securesms.loki.fragments.ContactSelectionListFragment"
|
|
||||||
tools:layout="@layout/contact_selection_list_fragment"/>
|
|
||||||
|
|
||||||
<LinearLayout android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="end"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<Button android:id="@+id/cancel_sms_button"
|
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/InviteActivity_cancel" />
|
|
||||||
|
|
||||||
<Button android:id="@+id/send_sms_button"
|
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
|
||||||
android:textColor="@color/signal_primary"
|
|
||||||
android:enabled="false"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
tools:text="Send to 0 friends"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
</FrameLayout>
|
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
@ -11,6 +11,7 @@
|
|||||||
android:layout_gravity="right|center_vertical"
|
android:layout_gravity="right|center_vertical"
|
||||||
android:gravity="right|center_vertical"
|
android:gravity="right|center_vertical"
|
||||||
android:textSize="@dimen/medium_font_size"
|
android:textSize="@dimen/medium_font_size"
|
||||||
android:textColor="@color/accent" />
|
android:textColor="@color/accent"
|
||||||
|
tools:text="Preference Summary"/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
@ -1,58 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:fillViewport="true"
|
|
||||||
android:background="@drawable/background_pattern_repeat">
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:gravity="center" >
|
|
||||||
|
|
||||||
<LinearLayout android:paddingEnd="16dip"
|
|
||||||
android:paddingStart="16dip"
|
|
||||||
android:paddingTop="10dip"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<TextView style="@style/Registration.Description"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="16dip"
|
|
||||||
android:text="@string/prompt_mms_activity__signal_requires_mms_settings_to_deliver_media_and_group_messages"/>
|
|
||||||
|
|
||||||
<TextView style="@style/Registration.Description"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="16dip"
|
|
||||||
android:text="@string/prompt_mms_activity__to_send_media_and_group_messages_tap_ok"/>
|
|
||||||
|
|
||||||
<LinearLayout android:orientation="horizontal"
|
|
||||||
android:gravity="center"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="10dip"
|
|
||||||
android:layout_marginBottom="20dip">
|
|
||||||
|
|
||||||
<Button android:id="@+id/cancel_button"
|
|
||||||
android:text="@android:string/cancel"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginEnd="7dip"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
|
||||||
|
|
||||||
<Button android:id="@+id/ok_button"
|
|
||||||
android:text="@android:string/ok"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"/>
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
</FrameLayout>
|
|
||||||
</ScrollView>
|
|
@ -1,42 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.CustomDefaultPreference
|
|
||||||
app:custom_pref_toggle="pref_apn_mmsc_custom_host"
|
|
||||||
android:key="pref_apn_mmsc_host"
|
|
||||||
android:title="@string/preferences__mmsc_url"
|
|
||||||
android:inputType="textUri" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.CustomDefaultPreference
|
|
||||||
app:custom_pref_toggle="pref_apn_mms_custom_proxy"
|
|
||||||
android:key="pref_apn_mms_proxy"
|
|
||||||
android:title="@string/preferences__mms_proxy_host"
|
|
||||||
android:inputType="textUri" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.CustomDefaultPreference
|
|
||||||
app:custom_pref_toggle="pref_apn_mms_custom_proxy_port"
|
|
||||||
android:key="pref_apn_mms_proxy_port"
|
|
||||||
android:title="@string/preferences__mms_proxy_port"
|
|
||||||
android:inputType="number"/>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.CustomDefaultPreference
|
|
||||||
app:custom_pref_toggle="pref_apn_mmsc_custom_username"
|
|
||||||
android:key="pref_apn_mmsc_username"
|
|
||||||
android:title="@string/preferences__mmsc_username"
|
|
||||||
android:inputType="textNoSuggestions"/>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.CustomDefaultPreference
|
|
||||||
app:custom_pref_toggle="pref_apn_mmsc_custom_password"
|
|
||||||
android:key="pref_apn_mmsc_password"
|
|
||||||
android:title="@string/preferences__mmsc_password"
|
|
||||||
android:inputType="textVisiblePassword"/>
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.CustomDefaultPreference
|
|
||||||
app:custom_pref_toggle="pref_custom_mms_user_agent"
|
|
||||||
android:key="pref_mms_user_agent"
|
|
||||||
android:title="@string/preferences__mms_user_agent"
|
|
||||||
android:inputType="textNoSuggestions"/>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="pref_all_sms"
|
|
||||||
android:summary="@string/preferences__use_signal_for_viewing_and_storing_all_incoming_text_messages"
|
|
||||||
android:title="@string/preferences__pref_all_sms_title" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="pref_all_mms"
|
|
||||||
android:summary="@string/preferences__use_signal_for_viewing_and_storing_all_incoming_multimedia_messages"
|
|
||||||
android:title="@string/preferences__pref_all_mms_title" />
|
|
||||||
|
|
||||||
<Preference android:key="pref_set_default"
|
|
||||||
android:title="@string/ApplicationPreferencesActivity_sms_disabled"
|
|
||||||
android:summary="@string/ApplicationPreferencesActivity_touch_to_make_signal_your_default_sms_app" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="pref_delivery_report_sms"
|
|
||||||
android:summary="@string/preferences__request_a_delivery_report_for_each_sms_message_you_send"
|
|
||||||
android:title="@string/preferences__sms_delivery_reports" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="pref_wifi_sms"
|
|
||||||
android:title="@string/preferences__support_wifi_calling"
|
|
||||||
android:summary="@string/preferences__enable_if_your_device_supports_sms_mms_delivery_over_wifi"/>
|
|
||||||
|
|
||||||
<Preference android:key="pref_mms_preferences"
|
|
||||||
android:title="@string/preferences__advanced_mms_access_point_names"/>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
Loading…
x
Reference in New Issue
Block a user