Compare commits

..

31 Commits

Author SHA1 Message Date
copilot-swe-agent[bot] 0bc34daf35 move ConversationListRelayingActivity.finishActivity into completion callback
Agent-Logs-Url: https://github.com/ArcaneChat/android/sessions/97d2da3a-a390-4296-9c53-970922fe75f1

Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com>
2026-05-12 22:16:48 +00:00
copilot-swe-agent[bot] c47482851b guard recoding progress dialog creation
Agent-Logs-Url: https://github.com/ArcaneChat/android/sessions/b8e9e663-8e3c-4ea7-bed3-67efe44ad239

Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com>
2026-05-12 17:55:43 +00:00
copilot-swe-agent[bot] e2fb3968ca delay finishing until relay completion
Agent-Logs-Url: https://github.com/ArcaneChat/android/sessions/b8e9e663-8e3c-4ea7-bed3-67efe44ad239

Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com>
2026-05-12 17:53:40 +00:00
copilot-swe-agent[bot] ceffc5df1c address code review: use AtomicReference, remove redundant null check, log failed videos
Agent-Logs-Url: https://github.com/ArcaneChat/android/sessions/46f23f6d-d5a5-48b9-8b1d-4aa5cfdda115

Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com>
2026-04-29 15:00:18 +00:00
copilot-swe-agent[bot] e6fd96bf35 recode videos when multiple are shared/attached, show progress dialog
Agent-Logs-Url: https://github.com/ArcaneChat/android/sessions/46f23f6d-d5a5-48b9-8b1d-4aa5cfdda115

Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com>
2026-04-29 14:57:53 +00:00
adbenitez 60ab7f2826 Merge remote-tracking branch 'upstream/main' 2026-04-29 16:48:31 +02:00
adb e511237e5e Merge pull request #4384 from deltachat/adb/issue-4345
add highlight to input panel buttons for keyboard navigation
2026-04-28 17:17:27 +02:00
adb f249fd6174 Merge pull request #4386 from deltachat/adb/issue-4342
add mapping.txt to symbols zip
2026-04-28 17:16:29 +02:00
B. Petersen 6db45c1911 add translator hints for new call strings 2026-04-28 17:01:47 +02:00
adb 06a1114744 Merge pull request #4388 from deltachat/adb/issue-4328
fix migration while upgrading from 1.10.1 and similar old versions
2026-04-28 16:54:19 +02:00
adb 3afff5625b Merge branch 'main' into adb/issue-4328 2026-04-28 16:40:53 +02:00
adbenitez cef8ddeedb update changelog 2026-04-28 16:32:33 +02:00
adbenitez 2f0ac973c0 fix migration from 1.10.1 and similar old versions 2026-04-28 16:28:25 +02:00
adbenitez 9465776715 add mapping.txt to symbols zip 2026-04-28 16:04:07 +02:00
B. Petersen 39685a575d feat: better wording for "Media Quality" option
this changes "Worse quality, small size" to "Worse quality, save data".

this makes it more clearer, what the advantage of that option is.

also, the recently added hint about sending as original also speaks about "data"
(https://github.com/deltachat/deltachat-android/pull/4259)
which is more known to the average user, knowing that of "mobile data" etc.
2026-04-28 15:51:37 +02:00
B. Petersen 8601736387 update translations 2026-04-28 15:49:37 +02:00
adbenitez 98d8572baf add highlight to input panel buttons for keyboard navigation 2026-04-28 15:16:36 +02:00
wchen342 917e764b6f Promote call FGS asap (#4377)
* Promote call FGS as soon as possible

* Add resource strings for call notification

* Launch with only phone call type on 14+
2026-04-27 20:34:51 +02:00
adb 52263150c8 Merge pull request #4374 from deltachat/adb/location-streaming-time-tweaks
allow to share location for 24 hours, remove 5 minutes
2026-04-27 17:27:12 +02:00
B. Petersen c2aba94b34 mark deprecated strings as such 2026-04-25 02:07:46 +02:00
adbenitez 1278dfd395 Merge remote-tracking branch 'upstream/main' 2026-04-24 19:55:16 +02:00
wchen342 44a688470f Merge pull request #4370 from deltachat/wch423/change-tag-names
Remove usages of `class.getSimpleName()`
2026-04-24 12:18:37 -04:00
wch423 e9a09d9c72 Correct tag name 2026-04-24 15:59:37 +02:00
wchen342 abc49a3b95 Update src/main/java/com/b44t/messenger/DcMsg.java
Co-authored-by: adb <adb@merlinux.eu>
2026-04-23 17:55:20 +02:00
wch423 cdd4e5eccd Code formatting 2026-04-23 17:55:18 +02:00
wch423 fa8ed2b881 Remove usages of class.getSimpleName() 2026-04-23 17:55:16 +02:00
B. Petersen 0731fe9447 fix warning string, make reuse of new explicit button strings 2026-04-23 15:57:42 +02:00
adbenitez d3567d9f0c fix arrays.xml 2026-04-23 14:51:48 +02:00
adbenitez 66ab1f8051 update changelog 2026-04-23 14:51:04 +02:00
adbenitez 872fd17f5e allow to share location for 24 hours, remove 5 minutes 2026-04-23 14:49:18 +02:00
B. Petersen af49018911 add strings from desktop, add some missing strings 2026-04-23 00:43:12 +02:00
159 changed files with 966 additions and 341 deletions
+2 -1
View File
@@ -244,7 +244,8 @@ $ANDROID_NDK_ROOT/ndk-stack --sym obj/local/armeabi-v7a --dump crash.txt > decod
Replace `armeabi-v7a` by the correct architecture the logs come from (can be guessed by trial and error) Replace `armeabi-v7a` by the correct architecture the logs come from (can be guessed by trial and error)
### Deobfuscating Java/Kotlin Stack Traces
### Deobfuscating Java Stack Traces
Because the app uses code minification (ProGuard/R8), Java stack traces in crash reports are obfuscated. Because the app uses code minification (ProGuard/R8), Java stack traces in crash reports are obfuscated.
To decode them, use `retrace` with the `mapping.txt` file that is included in the symbols zip: To decode them, use `retrace` with the `mapping.txt` file that is included in the symbols zip:
+2
View File
@@ -5,8 +5,10 @@
* Better incoming call system integration * Better incoming call system integration
* Calls are not experimental anymore and don't need to be manually enabled * Calls are not experimental anymore and don't need to be manually enabled
* Display a permanent notification when doing location streaming and get rid of dangerous "Access Location in Background" permission * Display a permanent notification when doing location streaming and get rid of dangerous "Access Location in Background" permission
* Allow to share location for 24 hours
* Allow mini-apps to play audio without user interaction * Allow mini-apps to play audio without user interaction
* Mark chats as unread (long tap a chat and select the corresponding option from the three-dot-menu) * Mark chats as unread (long tap a chat and select the corresponding option from the three-dot-menu)
* Fix process of upgrading from a very old version of the app
## v2.49.0 ## v2.49.0
2026-04 2026-04
@@ -39,7 +39,7 @@ public class EnterChatsBenchmark {
// PLEASE BACKUP YOUR ACCOUNT BEFORE RUNNING THIS! // PLEASE BACKUP YOUR ACCOUNT BEFORE RUNNING THIS!
// ============================================================================================== // ==============================================================================================
private static final String TAG = EnterChatsBenchmark.class.getSimpleName(); private static final String TAG = "EnterChatsBenchmark";
@Rule @Rule
public ActivityScenarioRule<ConversationListActivity> activityRule = public ActivityScenarioRule<ConversationListActivity> activityRule =
@@ -6,7 +6,7 @@ import android.util.Log;
/** Non-GMS, always uses the platform LocationManager. */ /** Non-GMS, always uses the platform LocationManager. */
public final class LocationSourceFactory { public final class LocationSourceFactory {
private static final String TAG = LocationSourceFactory.class.getSimpleName(); private static final String TAG = "LocationSourceFactory";
private LocationSourceFactory() {} private LocationSourceFactory() {}
@@ -14,7 +14,7 @@ import com.google.android.gms.location.Priority;
public class GmsLocationSource implements LocationSource { public class GmsLocationSource implements LocationSource {
private static final String TAG = GmsLocationSource.class.getSimpleName(); private static final String TAG = "GmsLocationSource";
private static final long UPDATE_INTERVAL_MS = 3_000; private static final long UPDATE_INTERVAL_MS = 3_000;
private static final long FASTEST_INTERVAL_MS = 1_000; private static final long FASTEST_INTERVAL_MS = 1_000;
@@ -11,7 +11,7 @@ import com.google.android.gms.common.GoogleApiAvailability;
*/ */
public final class LocationSourceFactory { public final class LocationSourceFactory {
private static final String TAG = LocationSourceFactory.class.getSimpleName(); private static final String TAG = "LocationSourceFactory";
private LocationSourceFactory() {} private LocationSourceFactory() {}
@@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.service.FetchForegroundService;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public class FcmReceiveService extends FirebaseMessagingService { public class FcmReceiveService extends FirebaseMessagingService {
private static final String TAG = FcmReceiveService.class.getSimpleName(); private static final String TAG = "FcmReceiveService";
private static final Object INIT_LOCK = new Object(); private static final Object INIT_LOCK = new Object();
private static boolean initialized; private static boolean initialized;
private static volatile boolean triedRegistering; private static volatile boolean triedRegistering;
+2 -1
View File
@@ -71,6 +71,7 @@
android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" /> android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" /> <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
@@ -490,7 +491,7 @@
android:name=".calls.CallService" android:name=".calls.CallService"
android:enabled="true" android:enabled="true"
android:exported="false" android:exported="false"
android:foregroundServiceType="camera|microphone" /> android:foregroundServiceType="camera|microphone|phoneCall" />
<receiver <receiver
android:name=".notifications.MarkReadReceiver" android:name=".notifications.MarkReadReceiver"
@@ -59,8 +59,6 @@ public class DcMsg {
public static final int DC_VIDEOCHATTYPE_UNKNOWN = 0; public static final int DC_VIDEOCHATTYPE_UNKNOWN = 0;
public static final int DC_VIDEOCHATTYPE_BASICWEBRTC = 1; public static final int DC_VIDEOCHATTYPE_BASICWEBRTC = 1;
private static final String TAG = DcMsg.class.getSimpleName();
public DcMsg(DcContext context, int viewtype) { public DcMsg(DcContext context, int viewtype) {
msgCPtr = context.createMsgCPtr(viewtype); msgCPtr = context.createMsgCPtr(viewtype);
} }
@@ -35,7 +35,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class AllMediaActivity extends PassphraseRequiredActionBarActivity public class AllMediaActivity extends PassphraseRequiredActionBarActivity
implements DcEventCenter.DcEventDelegate { implements DcEventCenter.DcEventDelegate {
private static final String TAG = AllMediaActivity.class.getSimpleName(); private static final String TAG = "AllMediaActivity";
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
public static final String CONTACT_ID_EXTRA = "contact_id"; public static final String CONTACT_ID_EXTRA = "contact_id";
@@ -52,7 +52,7 @@ import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.webxdc.WebxdcGarbageCollectionWorker; import org.thoughtcrime.securesms.webxdc.WebxdcGarbageCollectionWorker;
public class ApplicationContext extends MultiDexApplication { public class ApplicationContext extends MultiDexApplication {
private static final String TAG = ApplicationContext.class.getSimpleName(); private static final String TAG = "ApplicationContext";
private static final Object initLock = new Object(); private static final Object initLock = new Object();
private static volatile boolean isInitialized = false; private static volatile boolean isInitialized = false;
@@ -218,7 +218,7 @@ public class ApplicationContext extends MultiDexApplication {
Log.i(TAG, "DcAccounts created"); Log.i(TAG, "DcAccounts created");
rpc = new Rpc(new FFITransport(dcAccounts.getJsonrpcInstance())); rpc = new Rpc(new FFITransport(dcAccounts.getJsonrpcInstance()));
Log.i(TAG, "Rpc created"); Log.i(TAG, "Rpc created");
AccountManager.getInstance().migrateToDcAccounts(this); AccountManager.getInstance().migrateToDcAccounts(this, dcAccounts);
int[] allAccounts = dcAccounts.getAll(); int[] allAccounts = dcAccounts.getAll();
Log.i(TAG, "Number of profiles: " + allAccounts.length); Log.i(TAG, "Number of profiles: " + allAccounts.length);
@@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public abstract class BaseActionBarActivity extends AppCompatActivity { public abstract class BaseActionBarActivity extends AppCompatActivity {
private static final String TAG = BaseActionBarActivity.class.getSimpleName(); private static final String TAG = "BaseActionBarActivity";
protected DynamicTheme dynamicTheme = new DynamicTheme(); protected DynamicTheme dynamicTheme = new DynamicTheme();
protected void onPreCreate() { protected void onPreCreate() {
@@ -47,7 +47,7 @@ import org.thoughtcrime.securesms.util.task.SnackbarAsyncTask;
import org.thoughtcrime.securesms.util.views.ProgressDialog; import org.thoughtcrime.securesms.util.views.ProgressDialog;
public abstract class BaseConversationListFragment extends Fragment implements ActionMode.Callback { public abstract class BaseConversationListFragment extends Fragment implements ActionMode.Callback {
private static final String TAG = BaseConversationListFragment.class.getSimpleName(); private static final String TAG = "BaseConversationListFragment";
protected ActionMode actionMode; protected ActionMode actionMode;
protected PulsingFloatingActionButton fab; protected PulsingFloatingActionButton fab;
@@ -122,9 +122,6 @@ public abstract class BaseConversationListFragment extends Fragment implements A
Context context = getContext(); Context context = getContext();
if (context != null) { if (context != null) {
if (SendRelayedMessageUtil.containsVideoType(context, uris)) {
message += "\n\n" + getString(R.string.videos_sent_without_recoding);
}
new AlertDialog.Builder(context) new AlertDialog.Builder(context)
.setMessage(message) .setMessage(message)
.setCancelable(false) .setCancelable(false)
@@ -132,11 +129,16 @@ public abstract class BaseConversationListFragment extends Fragment implements A
.setPositiveButton( .setPositiveButton(
R.string.menu_send, R.string.menu_send,
(dialog, which) -> { (dialog, which) -> {
Activity activity = getActivity();
if (activity == null) {
return;
}
SendRelayedMessageUtil.immediatelyRelay( SendRelayedMessageUtil.immediatelyRelay(
getActivity(), selectedChats.toArray(new Long[selectedChats.size()])); activity,
selectedChats.toArray(new Long[selectedChats.size()]),
() -> activity.finish());
actionMode.finish(); actionMode.finish();
actionMode = null; actionMode = null;
getActivity().finish();
}) })
.show(); .show();
} }
@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
*/ */
public abstract class ContactSelectionActivity extends PassphraseRequiredActionBarActivity public abstract class ContactSelectionActivity extends PassphraseRequiredActionBarActivity
implements ContactSelectionListFragment.OnContactSelectedListener { implements ContactSelectionListFragment.OnContactSelectedListener {
private static final String TAG = ContactSelectionActivity.class.getSimpleName(); private static final String TAG = "ContactSelectionActivity";
protected ContactSelectionListFragment contactsFragment; protected ContactSelectionListFragment contactsFragment;
@@ -67,7 +67,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
*/ */
public class ContactSelectionListFragment extends Fragment public class ContactSelectionListFragment extends Fragment
implements LoaderManager.LoaderCallbacks<DcContactsLoader.Ret>, DcEventCenter.DcEventDelegate { implements LoaderManager.LoaderCallbacks<DcContactsLoader.Ret>, DcEventCenter.DcEventDelegate {
private static final String TAG = ContactSelectionListFragment.class.getSimpleName(); private static final String TAG = "ContactSelectionListFragment";
public static final String MULTI_SELECT = "multi_select"; public static final String MULTI_SELECT = "multi_select";
public static final String SELECT_UNENCRYPTED_EXTRA = "select_unencrypted_extra"; public static final String SELECT_UNENCRYPTED_EXTRA = "select_unencrypted_extra";
@@ -148,7 +148,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
InputPanel.Listener, InputPanel.Listener,
InputPanel.MediaListener, InputPanel.MediaListener,
AudioView.OnActionListener { AudioView.OnActionListener {
private static final String TAG = ConversationActivity.class.getSimpleName(); private static final String TAG = "ConversationActivity";
public static final String ACCOUNT_ID_EXTRA = "account_id"; public static final String ACCOUNT_ID_EXTRA = "account_id";
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
@@ -860,9 +860,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
private void askSendingFiles(ArrayList<Uri> uriList, Runnable onConfirm) { private void askSendingFiles(ArrayList<Uri> uriList, Runnable onConfirm) {
String message = String message =
String.format(getString(R.string.ask_send_files_to_chat), uriList.size(), dcChat.getName()); String.format(getString(R.string.ask_send_files_to_chat), uriList.size(), dcChat.getName());
if (SendRelayedMessageUtil.containsVideoType(context, uriList)) {
message += "\n\n" + getString(R.string.videos_sent_without_recoding);
}
new AlertDialog.Builder(this) new AlertDialog.Builder(this)
.setMessage(message) .setMessage(message)
.setCancelable(false) .setCancelable(false)
@@ -80,7 +80,7 @@ import org.thoughtcrime.securesms.util.views.ConversationAdaptiveActionsToolbar;
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
public class ConversationFragment extends MessageSelectorFragment { public class ConversationFragment extends MessageSelectorFragment {
private static final String TAG = ConversationFragment.class.getSimpleName(); private static final String TAG = "ConversationFragment";
private static final int SCROLL_ANIMATION_THRESHOLD = 50; private static final int SCROLL_ANIMATION_THRESHOLD = 50;
@@ -86,7 +86,7 @@ import org.thoughtcrime.securesms.util.views.Stub;
* @author Moxie Marlinspike * @author Moxie Marlinspike
*/ */
public class ConversationItem extends BaseConversationItem { public class ConversationItem extends BaseConversationItem {
private static final String TAG = ConversationItem.class.getSimpleName(); private static final String TAG = "ConversationItem";
private static final Rect SWIPE_RECT = new Rect(); private static final Rect SWIPE_RECT = new Rect();
@@ -91,7 +91,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class ConversationListActivity extends PassphraseRequiredActionBarActivity public class ConversationListActivity extends PassphraseRequiredActionBarActivity
implements ConversationListFragment.ConversationSelectedListener { implements ConversationListFragment.ConversationSelectedListener {
private static final String TAG = ConversationListActivity.class.getSimpleName(); private static final String TAG = "ConversationListActivity";
private static final String OPENPGP4FPR = "openpgp4fpr"; private static final String OPENPGP4FPR = "openpgp4fpr";
private static final String NDK_ARCH_WARNED = "ndk_arch_warned"; private static final String NDK_ARCH_WARNED = "ndk_arch_warned";
public static final String CLEAR_NOTIFICATIONS = "clear_notifications"; public static final String CLEAR_NOTIFICATIONS = "clear_notifications";
@@ -626,14 +626,18 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
final DcContext dcContext = DcHelper.getContext(this); final DcContext dcContext = DcHelper.getContext(this);
int fwdAccId = getForwardedMessageAccountId(this); int fwdAccId = getForwardedMessageAccountId(this);
if (fwdAccId == dcContext.getAccountId() && dcContext.getChat(chatId).isSelfTalk()) { if (fwdAccId == dcContext.getAccountId() && dcContext.getChat(chatId).isSelfTalk()) {
SendRelayedMessageUtil.immediatelyRelay(this, chatId); SendRelayedMessageUtil.immediatelyRelay(
Toast.makeText( this,
this, chatId,
DynamicTheme.getCheckmarkEmoji(this) + " " + getString(R.string.saved), () -> {
Toast.LENGTH_SHORT) Toast.makeText(
.show(); this,
handleResetRelaying(); DynamicTheme.getCheckmarkEmoji(this) + " " + getString(R.string.saved),
finish(); Toast.LENGTH_SHORT)
.show();
handleResetRelaying();
finish();
});
} else { } else {
Intent intent = new Intent(this, ConversationActivity.class); Intent intent = new Intent(this, ConversationActivity.class);
intent.putExtra(ConversationActivity.ACCOUNT_ID_EXTRA, dcContext.getAccountId()); intent.putExtra(ConversationActivity.ACCOUNT_ID_EXTRA, dcContext.getAccountId());
@@ -56,7 +56,7 @@ public class ConversationListFragment extends BaseConversationListFragment
public static final String ARCHIVE = "archive"; public static final String ARCHIVE = "archive";
public static final String RELOAD_LIST = "reload_list"; public static final String RELOAD_LIST = "reload_list";
private static final String TAG = ConversationListFragment.class.getSimpleName(); private static final String TAG = "ConversationListFragment";
private RecyclerView list; private RecyclerView list;
private View emptyState; private View emptyState;
@@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
public class CreateProfileActivity extends BaseActionBarActivity { public class CreateProfileActivity extends BaseActionBarActivity {
private static final String TAG = CreateProfileActivity.class.getSimpleName(); private static final String TAG = "CreateProfileActivity";
private static final int REQUEST_CODE_AVATAR = 1; private static final int REQUEST_CODE_AVATAR = 1;
@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class EphemeralMessagesDialog { public class EphemeralMessagesDialog {
private static final String TAG = EphemeralMessagesDialog.class.getSimpleName(); private static final String TAG = "EphemeralMessagesDialog";
public static void show( public static void show(
final Context context, final Context context,
@@ -46,7 +46,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class GroupCreateActivity extends PassphraseRequiredActionBarActivity public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
implements ItemClickListener { implements ItemClickListener {
private static final String TAG = GroupCreateActivity.class.getSimpleName(); private static final String TAG = "GroupCreateActivity";
public static final String EDIT_GROUP_CHAT_ID = "edit_group_chat_id"; public static final String EDIT_GROUP_CHAT_ID = "edit_group_chat_id";
public static final String CREATE_BROADCAST = "create_broadcast"; public static final String CREATE_BROADCAST = "create_broadcast";
public static final String UNENCRYPTED = "unencrypted"; public static final String UNENCRYPTED = "unencrypted";
@@ -307,8 +307,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
private boolean showGroupNameEmptyToast(String groupName) { private boolean showGroupNameEmptyToast(String groupName) {
if (groupName == null) { if (groupName == null) {
Toast.makeText(this, getString(R.string.group_please_enter_group_name), Toast.LENGTH_LONG) Toast.makeText(this, getString(R.string.please_enter_chat_name), Toast.LENGTH_LONG).show();
.show();
return true; return true;
} }
return false; return false;
@@ -65,7 +65,7 @@ import org.thoughtcrime.securesms.util.views.ProgressDialog;
public class InstantOnboardingActivity extends BaseActionBarActivity public class InstantOnboardingActivity extends BaseActionBarActivity
implements DcEventCenter.DcEventDelegate { implements DcEventCenter.DcEventDelegate {
private static final String TAG = InstantOnboardingActivity.class.getSimpleName(); private static final String TAG = "InstantOnboardingActivity";
private static final String DCACCOUNT = "dcaccount"; private static final String DCACCOUNT = "dcaccount";
private static final String DCLOGIN = "dclogin"; private static final String DCLOGIN = "dclogin";
private static final String INSTANCES_URL = "https://chatmail.at/relays"; private static final String INSTANCES_URL = "https://chatmail.at/relays";
@@ -18,7 +18,7 @@ import org.thoughtcrime.securesms.util.FileProviderUtil;
public class LogViewActivity extends BaseActionBarActivity { public class LogViewActivity extends BaseActionBarActivity {
private static final String TAG = LogViewActivity.class.getSimpleName(); private static final String TAG = "LogViewActivity";
LogViewFragment logViewFragment; LogViewFragment logViewFragment;
@@ -69,7 +69,7 @@ import org.thoughtcrime.securesms.util.Util;
public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
implements RecipientModifiedListener, LoaderManager.LoaderCallbacks<DcMediaGalleryElement> { implements RecipientModifiedListener, LoaderManager.LoaderCallbacks<DcMediaGalleryElement> {
private static final String TAG = MediaPreviewActivity.class.getSimpleName(); private static final String TAG = "MediaPreviewActivity";
public static final String ACTIVITY_TITLE_EXTRA = "activity_title"; public static final String ACTIVITY_TITLE_EXTRA = "activity_title";
public static final String EDIT_AVATAR_CHAT_ID = "avatar_for_chat_id"; public static final String EDIT_AVATAR_CHAT_ID = "avatar_for_chat_id";
@@ -41,7 +41,7 @@ import org.thoughtcrime.securesms.qr.QrCodeHandler;
*/ */
public class NewConversationActivity extends ContactSelectionActivity { public class NewConversationActivity extends ContactSelectionActivity {
private static final String TAG = NewConversationActivity.class.getSimpleName(); private static final String TAG = "NewConversationActivity";
@Override @Override
public void onCreate(Bundle bundle, boolean ready) { public void onCreate(Bundle bundle, boolean ready) {
@@ -7,7 +7,7 @@ import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.service.GenericForegroundService; import org.thoughtcrime.securesms.service.GenericForegroundService;
public abstract class PassphraseRequiredActionBarActivity extends BaseActionBarActivity { public abstract class PassphraseRequiredActionBarActivity extends BaseActionBarActivity {
private static final String TAG = PassphraseRequiredActionBarActivity.class.getSimpleName(); private static final String TAG = "PassphraseRequiredActionBarActivity";
@Override @Override
protected final void onCreate(Bundle savedInstanceState) { protected final void onCreate(Bundle savedInstanceState) {
@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public class ProfileAdapter extends RecyclerView.Adapter { public class ProfileAdapter extends RecyclerView.Adapter {
private static final String TAG = ProfileAdapter.class.getSimpleName(); private static final String TAG = "ProfileAdapter";
public static final int ITEM_AVATAR = 10; public static final int ITEM_AVATAR = 10;
public static final int ITEM_DIVIDER = 20; public static final int ITEM_DIVIDER = 20;
@@ -38,7 +38,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class ProfileFragment extends Fragment public class ProfileFragment extends Fragment
implements ProfileAdapter.ItemClickListener, DcEventCenter.DcEventDelegate { implements ProfileAdapter.ItemClickListener, DcEventCenter.DcEventDelegate {
private static final String TAG = ProfileFragment.class.getSimpleName(); private static final String TAG = "ProfileFragment";
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
public static final String CONTACT_ID_EXTRA = "contact_id"; public static final String CONTACT_ID_EXTRA = "contact_id";
@@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
public class ResolveMediaTask extends AsyncTask<Uri, Void, Uri> { public class ResolveMediaTask extends AsyncTask<Uri, Void, Uri> {
private static final String TAG = ResolveMediaTask.class.getSimpleName(); private static final String TAG = "ResolveMediaTask";
interface OnMediaResolvedListener { interface OnMediaResolvedListener {
void onMediaResolved(Uri uri); void onMediaResolved(Uri uri);
@@ -47,7 +47,7 @@ import org.thoughtcrime.securesms.util.ShareUtil;
*/ */
public class ShareActivity extends PassphraseRequiredActionBarActivity public class ShareActivity extends PassphraseRequiredActionBarActivity
implements ResolveMediaTask.OnMediaResolvedListener { implements ResolveMediaTask.OnMediaResolvedListener {
private static final String TAG = ShareActivity.class.getSimpleName(); private static final String TAG = "ShareActivity";
public static final String EXTRA_ACC_ID = "acc_id"; public static final String EXTRA_ACC_ID = "acc_id";
public static final String EXTRA_CHAT_ID = "chat_id"; public static final String EXTRA_CHAT_ID = "chat_id";
@@ -18,21 +18,18 @@ public class ShareLocationDialog {
switch (which) { switch (which) {
default: default:
case 0: case 0:
shareLocationUnit = 5 * 60;
break;
case 1:
shareLocationUnit = 30 * 60; shareLocationUnit = 30 * 60;
break; break;
case 2: case 1:
shareLocationUnit = 60 * 60; shareLocationUnit = 60 * 60;
break; break;
case 3: case 2:
shareLocationUnit = 2 * 60 * 60; shareLocationUnit = 2 * 60 * 60;
break; break;
case 4: case 3:
shareLocationUnit = 6 * 60 * 60; shareLocationUnit = 6 * 60 * 60;
break; break;
case 5: case 4:
shareLocationUnit = 24 * 60 * 60; shareLocationUnit = 24 * 60 * 60;
break; break;
} }
@@ -32,7 +32,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class WebViewActivity extends PassphraseRequiredActionBarActivity public class WebViewActivity extends PassphraseRequiredActionBarActivity
implements SearchView.OnQueryTextListener, WebView.FindListener { implements SearchView.OnQueryTextListener, WebView.FindListener {
private static final String TAG = WebViewActivity.class.getSimpleName(); private static final String TAG = "WebViewActivity";
// Regex to extract the host from a URL for IDN conversion. // Regex to extract the host from a URL for IDN conversion.
private static final Pattern URL_PATTERN = private static final Pattern URL_PATTERN =
Pattern.compile("^((?:[a-zA-Z0-9]+://)?)([^/?#]+)(.*)$"); Pattern.compile("^((?:[a-zA-Z0-9]+://)?)([^/?#]+)(.*)$");
@@ -59,7 +59,7 @@ import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcEventDelegate { public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcEventDelegate {
private static final String TAG = WebxdcActivity.class.getSimpleName(); private static final String TAG = "WebxdcActivity";
private static final String EXTRA_ACCOUNT_ID = "accountId"; private static final String EXTRA_ACCOUNT_ID = "accountId";
private static final String EXTRA_APP_MSG_ID = "appMessageId"; private static final String EXTRA_APP_MSG_ID = "appMessageId";
private static final String EXTRA_HIDE_ACTION_BAR = "hideActionBar"; private static final String EXTRA_HIDE_ACTION_BAR = "hideActionBar";
@@ -30,7 +30,7 @@ import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
public class WebxdcStoreActivity extends PassphraseRequiredActionBarActivity { public class WebxdcStoreActivity extends PassphraseRequiredActionBarActivity {
private static final String TAG = WebxdcStoreActivity.class.getSimpleName(); private static final String TAG = "WebxdcStoreActivity";
private DcContext dcContext; private DcContext dcContext;
private Rpc rpc; private Rpc rpc;
@@ -48,7 +48,7 @@ public class WelcomeActivity extends BaseActionBarActivity
implements DcEventCenter.DcEventDelegate { implements DcEventCenter.DcEventDelegate {
public static final String BACKUP_QR_EXTRA = "backup_qr_extra"; public static final String BACKUP_QR_EXTRA = "backup_qr_extra";
public static final int PICK_BACKUP = 20574; public static final int PICK_BACKUP = 20574;
private static final String TAG = WelcomeActivity.class.getSimpleName(); private static final String TAG = "WelcomeActivity";
public static final String TMP_BACKUP_FILE = "tmp-backup-file"; public static final String TMP_BACKUP_FILE = "tmp-backup-file";
private ProgressDialog progressDialog = null; private ProgressDialog progressDialog = null;
@@ -41,7 +41,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class AccountSelectionListFragment extends DialogFragment public class AccountSelectionListFragment extends DialogFragment
implements DcEventCenter.DcEventDelegate { implements DcEventCenter.DcEventDelegate {
private static final String TAG = AccountSelectionListFragment.class.getSimpleName(); private static final String TAG = "AccountSelectionListFragment";
private static final String ARG_SELECT_ONLY = "select_only"; private static final String ARG_SELECT_ONLY = "select_only";
private RecyclerView recyclerView; private RecyclerView recyclerView;
private AccountSelectionListAdapter adapter; private AccountSelectionListAdapter adapter;
@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.util.Prefs;
public class AudioCodec { public class AudioCodec {
private static final String TAG = AudioCodec.class.getSimpleName(); private static final String TAG = "AudioCodec";
private static final int SAMPLE_RATE_BALANCED = 44100; private static final int SAMPLE_RATE_BALANCED = 44100;
private static final int BIT_RATE_BALANCED = 32000; private static final int BIT_RATE_BALANCED = 32000;
@@ -196,7 +196,7 @@ public class AudioCodec {
setFinished(); setFinished();
} }
}, },
AudioCodec.class.getSimpleName()) "AudioCodec")
.start(); .start();
} }
@@ -18,7 +18,7 @@ import org.thoughtcrime.securesms.util.Util;
public class AudioRecorder { public class AudioRecorder {
private static final String TAG = AudioRecorder.class.getSimpleName(); private static final String TAG = "AudioRecorder";
private static final ExecutorService executor = ThreadUtil.newDynamicSingleThreadedExecutor(); private static final ExecutorService executor = ThreadUtil.newDynamicSingleThreadedExecutor();
@@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.R;
/** Bottom sheet dialog for selecting audio output device */ /** Bottom sheet dialog for selecting audio output device */
@RequiresApi(Build.VERSION_CODES.O) @RequiresApi(Build.VERSION_CODES.O)
public class AudioDevicePickerDialog extends BottomSheetDialog { public class AudioDevicePickerDialog extends BottomSheetDialog {
private static final String TAG = AudioDevicePickerDialog.class.getSimpleName(); private static final String TAG = "AudioDevicePickerDialog";
public interface OnDeviceSelectedListener { public interface OnDeviceSelectedListener {
void onDeviceSelected(CallEndpointCompat endpoint); void onDeviceSelected(CallEndpointCompat endpoint);
@@ -51,7 +51,7 @@ import org.webrtc.VideoTrack;
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
public class CallActivity extends AppCompatActivity { public class CallActivity extends AppCompatActivity {
private static final String TAG = CallActivity.class.getSimpleName(); private static final String TAG = "CallActivity";
private static final int MIC_PERMISSION_REQUEST_CODE = 1001; private static final int MIC_PERMISSION_REQUEST_CODE = 1001;
private static final int CAMERA_PERMISSION_REQUEST_CODE = 1002; private static final int CAMERA_PERMISSION_REQUEST_CODE = 1002;
@@ -63,7 +63,7 @@ import org.webrtc.VideoTrack;
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
public class CallCoordinator implements DcEventCenter.DcEventDelegate { public class CallCoordinator implements DcEventCenter.DcEventDelegate {
private static final String TAG = CallCoordinator.class.getSimpleName(); private static final String TAG = "CallCoordinator";
// Notification channels // Notification channels
private static final String CHANNEL_ID_INCOMING = "voip_incoming_calls"; private static final String CHANNEL_ID_INCOMING = "voip_incoming_calls";
@@ -215,7 +215,8 @@ public class CallCoordinator implements DcEventCenter.DcEventDelegate {
calleeName = "Unknown"; calleeName = "Unknown";
} }
showOrUpdateOngoingNotification("Calling " + calleeName + "..."); showOrUpdateOngoingNotification(
appContext.getString(R.string.calling_person, calleeName));
} }
// Initialize call // Initialize call
@@ -402,6 +403,15 @@ public class CallCoordinator implements DcEventCenter.DcEventDelegate {
callService.stopRingtone(); callService.stopRingtone();
} }
// Promote the service to foreground immediately. Waiting until onIncomingCallAccepted
// on executor pool thread is too late on stricter OEM.
//
// Do not cancel() but use showOrUpdateOngoingNotification to replace incoming
// notification without a gap.
String callerName = displayName.getValue();
if (callerName == null) callerName = "Unknown";
showOrUpdateOngoingNotification(appContext.getString(R.string.call_with, callerName));
// Notify Android system with CallControlScope // Notify Android system with CallControlScope
CallControlScope scope = activeCallControlScope; CallControlScope scope = activeCallControlScope;
if (scope != null) { if (scope != null) {
@@ -425,8 +435,6 @@ public class CallCoordinator implements DcEventCenter.DcEventDelegate {
} }
}); });
} }
notificationManager.cancel(NOTIFICATION_ID_CALL);
} }
public void answerWebRTC() { public void answerWebRTC() {
@@ -921,7 +929,7 @@ public class CallCoordinator implements DcEventCenter.DcEventDelegate {
callerName = "Unknown"; callerName = "Unknown";
} }
showOrUpdateOngoingNotification("Call with " + callerName); showOrUpdateOngoingNotification(appContext.getString(R.string.call_with, callerName));
} }
private synchronized void onCallAnsweredOnOtherDevice() { private synchronized void onCallAnsweredOnOtherDevice() {
@@ -1008,7 +1016,7 @@ public class CallCoordinator implements DcEventCenter.DcEventDelegate {
if (calleeName == null) { if (calleeName == null) {
calleeName = "Unknown"; calleeName = "Unknown";
} }
showOrUpdateOngoingNotification("Call with " + calleeName); showOrUpdateOngoingNotification(appContext.getString(R.string.call_with, calleeName));
} }
private synchronized void onCallEnded(int accId, int callId) { private synchronized void onCallEnded(int accId, int callId) {
@@ -1101,6 +1109,14 @@ public class CallCoordinator implements DcEventCenter.DcEventDelegate {
return; return;
} }
if (callService != null) {
try {
callService.stopForegroundAndDismiss();
} catch (Exception e) {
Log.w(TAG, "stopForegroundAndDismiss failed", e);
}
}
// Clear state // Clear state
this.activeAccId = null; this.activeAccId = null;
this.activeCallId = null; this.activeCallId = null;
@@ -4,6 +4,7 @@ import android.app.Notification;
import android.app.Service; import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ServiceInfo;
import android.media.AudioAttributes; import android.media.AudioAttributes;
import android.media.AudioFocusRequest; import android.media.AudioFocusRequest;
import android.media.AudioManager; import android.media.AudioManager;
@@ -13,7 +14,9 @@ import android.media.ToneGenerator;
import android.net.Uri; import android.net.Uri;
import android.os.Binder; import android.os.Binder;
import android.os.Build; import android.os.Build;
import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Looper;
import android.util.Log; import android.util.Log;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
@@ -33,7 +36,7 @@ import org.webrtc.VideoTrack;
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
public class CallService extends Service implements WebRTCClient.Callbacks { public class CallService extends Service implements WebRTCClient.Callbacks {
private static final String TAG = CallService.class.getSimpleName(); private static final String TAG = "CallService";
private final IBinder binder = new LocalBinder(); private final IBinder binder = new LocalBinder();
@@ -432,6 +435,12 @@ public class CallService extends Service implements WebRTCClient.Callbacks {
disposeWebRTC(); disposeWebRTC();
try {
stopForeground(STOP_FOREGROUND_REMOVE);
} catch (Exception e) {
Log.w(TAG, "stopForeground failed", e);
}
stopService(); stopService();
} }
@@ -494,13 +503,44 @@ public class CallService extends Service implements WebRTCClient.Callbacks {
// Foreground Notification // Foreground Notification
public void startForegroundWithNotification(int id, Notification notification) { public void startForegroundWithNotification(int id, Notification notification) {
Log.d(TAG, "Starting foreground with notification id: " + id); // Always run on main thread
startForeground(id, notification); if (Looper.myLooper() != Looper.getMainLooper()) {
new Handler(Looper.getMainLooper())
.post(() -> startForegroundWithNotification(id, notification));
return;
}
Log.d(TAG, "Starting call FGS with notification id: " + id);
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
startForeground(id, notification, ServiceInfo.FOREGROUND_SERVICE_TYPE_PHONE_CALL);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
int types =
ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE
| ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA;
startForeground(id, notification, types);
} else {
startForeground(id, notification);
}
} catch (Exception e) {
Log.e(TAG, "startForeground failed", e);
if (callCoordinator != null) {
callCoordinator.reportError("Failed to activate call FGS: " + e.getMessage());
}
}
} }
public void stopForegroundAndDismiss() { public void stopForegroundAndDismiss() {
Log.d(TAG, "Stopping foreground and dismissing notification"); if (Looper.myLooper() != Looper.getMainLooper()) {
stopForeground(STOP_FOREGROUND_REMOVE); new Handler(Looper.getMainLooper()).post(this::stopForegroundAndDismiss);
return;
}
Log.d(TAG, "Stopping call FGS and dismissing notification");
try {
stopForeground(STOP_FOREGROUND_REMOVE);
} catch (Exception e) {
Log.w(TAG, "stopForeground failed", e);
}
} }
// Cleanup // Cleanup
@@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.BitmapUtil;
public class CallUtil { public class CallUtil {
private static final String TAG = CallUtil.class.getSimpleName(); private static final String TAG = "CallUtil";
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
public static void startAudioCall(Context context, int chatId) { public static void startAudioCall(Context context, int chatId) {
@@ -20,7 +20,7 @@ import org.webrtc.VideoTrack;
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
public class CallViewModel extends AndroidViewModel { public class CallViewModel extends AndroidViewModel {
private static final String TAG = CallViewModel.class.getSimpleName(); private static final String TAG = "CallViewModel";
private final CallCoordinator callCoordinator; private final CallCoordinator callCoordinator;
@@ -24,7 +24,7 @@ import org.webrtc.VideoTrack;
public class MediaStreamManager { public class MediaStreamManager {
private static final String TAG = MediaStreamManager.class.getSimpleName(); private static final String TAG = "MediaStreamManager";
private static final String STREAM_ID = "local_stream"; private static final String STREAM_ID = "local_stream";
private static final String AUDIO_TRACK_ID = "audio_track"; private static final String AUDIO_TRACK_ID = "audio_track";
private static final String VIDEO_TRACK_ID = "video_track"; private static final String VIDEO_TRACK_ID = "video_track";
@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
public class CallItemView extends FrameLayout { public class CallItemView extends FrameLayout {
private static final String TAG = CallItemView.class.getSimpleName(); private static final String TAG = "CallItemView";
private final @NonNull ImageView icon; private final @NonNull ImageView icon;
private final @NonNull TextView title; private final @NonNull TextView title;
@@ -43,7 +43,7 @@ public class InputPanel extends ConstraintLayout
KeyboardAwareLinearLayout.OnKeyboardShownListener, KeyboardAwareLinearLayout.OnKeyboardShownListener,
MediaKeyboard.MediaKeyboardListener { MediaKeyboard.MediaKeyboardListener {
private static final String TAG = InputPanel.class.getSimpleName(); private static final String TAG = "InputPanel";
private static final int FADE_TIME = 150; private static final int FADE_TIME = 150;
@@ -38,7 +38,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
* been opened and what its height would be. * been opened and what its height would be.
*/ */
public class KeyboardAwareLinearLayout extends LinearLayoutCompat { public class KeyboardAwareLinearLayout extends LinearLayoutCompat {
private static final String TAG = KeyboardAwareLinearLayout.class.getSimpleName(); private static final String TAG = "KeyboardAwareLinearLayout";
private static final long KEYBOARD_DEBOUNCE = 150; private static final long KEYBOARD_DEBOUNCE = 150;
@@ -38,7 +38,7 @@ import org.thoughtcrime.securesms.util.Util;
public class QuoteView extends FrameLayout implements RecipientForeverObserver { public class QuoteView extends FrameLayout implements RecipientForeverObserver {
private static final String TAG = QuoteView.class.getSimpleName(); private static final String TAG = "QuoteView";
private static final int MESSAGE_TYPE_PREVIEW = 0; private static final int MESSAGE_TYPE_PREVIEW = 0;
@@ -30,7 +30,7 @@ public class ScaleStableImageView extends AppCompatImageView
implements KeyboardAwareLinearLayout.OnKeyboardShownListener, implements KeyboardAwareLinearLayout.OnKeyboardShownListener,
KeyboardAwareLinearLayout.OnKeyboardHiddenListener { KeyboardAwareLinearLayout.OnKeyboardHiddenListener {
private static final String TAG = ScaleStableImageView.class.getSimpleName(); private static final String TAG = "ScaleStableImageView";
private Drawable defaultDrawable; private Drawable defaultDrawable;
private Drawable currentDrawable; private Drawable currentDrawable;
@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.animation.AnimationCompleteListener;
public class SearchToolbar extends LinearLayout { public class SearchToolbar extends LinearLayout {
private static final String TAG = SearchToolbar.class.getSimpleName(); private static final String TAG = "SearchToolbar";
private float x, y; private float x, y;
private MenuItem searchItem; private MenuItem searchItem;
private EditText searchText; private EditText searchText;
@@ -30,7 +30,7 @@ import org.thoughtcrime.securesms.util.Util;
public class ThumbnailView extends FrameLayout { public class ThumbnailView extends FrameLayout {
private static final String TAG = ThumbnailView.class.getSimpleName(); private static final String TAG = "ThumbnailView";
private static final int WIDTH = 0; private static final int WIDTH = 0;
private static final int HEIGHT = 1; private static final int HEIGHT = 1;
private static final int MIN_WIDTH = 0; private static final int MIN_WIDTH = 0;
@@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.mms.VcardSlide;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
public class VcardView extends FrameLayout { public class VcardView extends FrameLayout {
private static final String TAG = VcardView.class.getSimpleName(); private static final String TAG = "VcardView";
private final @NonNull AvatarView avatar; private final @NonNull AvatarView avatar;
private final @NonNull TextView name; private final @NonNull TextView name;
@@ -21,7 +21,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
public class AudioPlaybackViewModel extends ViewModel { public class AudioPlaybackViewModel extends ViewModel {
private static final String TAG = AudioPlaybackViewModel.class.getSimpleName(); private static final String TAG = "AudioPlaybackViewModel";
private static final int NON_MESSAGE_AUDIO_MSG_ID = private static final int NON_MESSAGE_AUDIO_MSG_ID =
0; // Audios not attached to a message doesn't have message id. 0; // Audios not attached to a message doesn't have message id.
@@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.util.DateUtils;
public class AudioView extends FrameLayout { public class AudioView extends FrameLayout {
private static final String TAG = AudioView.class.getSimpleName(); private static final String TAG = "AudioView";
private final @NonNull ImageView playPauseButton; private final @NonNull ImageView playPauseButton;
private final AnimatedVectorDrawableCompat playToPauseDrawable; private final AnimatedVectorDrawableCompat playToPauseDrawable;
@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.util.ResUtil;
public class MediaKeyboard extends LinearLayout public class MediaKeyboard extends LinearLayout
implements InputView, Consumer<EmojiViewItem>, StickerPickerView.StickerPickerListener { implements InputView, Consumer<EmojiViewItem>, StickerPickerView.StickerPickerListener {
private static final String TAG = MediaKeyboard.class.getSimpleName(); private static final String TAG = "MediaKeyboard";
@Nullable private MediaKeyboardListener keyboardListener; @Nullable private MediaKeyboardListener keyboardListener;
private EmojiPickerView emojiPicker; private EmojiPickerView emojiPicker;
@@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.util.Prefs;
@SuppressLint("BatteryLife") @SuppressLint("BatteryLife")
public class DozeReminder { public class DozeReminder {
private static final String TAG = DozeReminder.class.getSimpleName(); private static final String TAG = "DozeReminder";
public static boolean isEligible(Context context) { public static boolean isEligible(Context context) {
if (context == null) { if (context == null) {
@@ -19,7 +19,7 @@ import androidx.viewpager.widget.ViewPager;
*/ */
public class HackyViewPager extends ViewPager { public class HackyViewPager extends ViewPager {
private static final String TAG = HackyViewPager.class.getSimpleName(); private static final String TAG = "HackyViewPager";
public HackyViewPager(Context context) { public HackyViewPager(Context context) {
super(context); super(context);
@@ -18,7 +18,7 @@ import org.thoughtcrime.securesms.accounts.AccountSelectionListFragment;
public class AccountManager { public class AccountManager {
private static final String TAG = AccountManager.class.getSimpleName(); private static final String TAG = "AccountManager";
private static final String LAST_ACCOUNT_ID = "last_account_id"; private static final String LAST_ACCOUNT_ID = "last_account_id";
private static AccountManager self; private static AccountManager self;
@@ -38,7 +38,7 @@ public class AccountManager {
return self; return self;
} }
public void migrateToDcAccounts(ApplicationContext context) { public void migrateToDcAccounts(Context context, DcAccounts dcAccounts) {
try { try {
int selectAccountId = 0; int selectAccountId = 0;
@@ -49,8 +49,7 @@ public class AccountManager {
if (!file.isDirectory() if (!file.isDirectory()
&& file.getName().startsWith("messenger") && file.getName().startsWith("messenger")
&& file.getName().endsWith(".db")) { && file.getName().endsWith(".db")) {
int accountId = int accountId = dcAccounts.migrateAccount(file.getAbsolutePath());
ApplicationContext.getDcAccounts().migrateAccount(file.getAbsolutePath());
if (accountId != 0) { if (accountId != 0) {
String selName = String selName =
PreferenceManager.getDefaultSharedPreferences(context) PreferenceManager.getDefaultSharedPreferences(context)
@@ -67,7 +66,7 @@ public class AccountManager {
} }
if (selectAccountId != 0) { if (selectAccountId != 0) {
ApplicationContext.getDcAccounts().selectAccount(selectAccountId); dcAccounts.selectAccount(selectAccountId);
} }
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Error in migrateToDcAccounts()", e); Log.e(TAG, "Error in migrateToDcAccounts()", e);
@@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.service.FetchForegroundService;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public class DcEventCenter { public class DcEventCenter {
private static final String TAG = DcEventCenter.class.getSimpleName(); private static final String TAG = "DcEventCenter";
private @NonNull final Hashtable<Integer, ArrayList<DcEventDelegate>> currentAccountObservers = private @NonNull final Hashtable<Integer, ArrayList<DcEventDelegate>> currentAccountObservers =
new Hashtable<>(); new Hashtable<>();
private @NonNull final Hashtable<Integer, ArrayList<DcEventDelegate>> multiAccountObservers = private @NonNull final Hashtable<Integer, ArrayList<DcEventDelegate>> multiAccountObservers =
@@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.util.Util;
public class DcHelper { public class DcHelper {
private static final String TAG = DcHelper.class.getSimpleName(); private static final String TAG = "DcHelper";
public static final String CONFIG_CONFIGURED_ADDRESS = "configured_addr"; public static final String CONFIG_CONFIGURED_ADDRESS = "configured_addr";
public static final String CONFIG_DISPLAY_NAME = "displayname"; public static final String CONFIG_DISPLAY_NAME = "displayname";
@@ -225,6 +225,8 @@ public class DcHelper {
dcContext.setStockTranslation(201, context.getString(R.string.qrshow_join_channel_hint)); dcContext.setStockTranslation(201, context.getString(R.string.qrshow_join_channel_hint));
dcContext.setStockTranslation(202, context.getString(R.string.you_joined_the_channel)); dcContext.setStockTranslation(202, context.getString(R.string.you_joined_the_channel));
dcContext.setStockTranslation(203, context.getString(R.string.secure_join_channel_started)); dcContext.setStockTranslation(203, context.getString(R.string.secure_join_channel_started));
dcContext.setStockTranslation(204, context.getString(R.string.channel_name_changed));
dcContext.setStockTranslation(205, context.getString(R.string.channel_image_changed));
dcContext.setStockTranslation(210, context.getString(R.string.stats_msg_body)); dcContext.setStockTranslation(210, context.getString(R.string.stats_msg_body));
dcContext.setStockTranslation(220, context.getString(R.string.proxy_enabled)); dcContext.setStockTranslation(220, context.getString(R.string.proxy_enabled));
dcContext.setStockTranslation(221, context.getString(R.string.proxy_enabled_hint)); dcContext.setStockTranslation(221, context.getString(R.string.proxy_enabled_hint));
@@ -40,7 +40,7 @@ import org.thoughtcrime.securesms.util.Util;
*/ */
public class DirectShareUtil { public class DirectShareUtil {
private static final String TAG = DirectShareUtil.class.getSimpleName(); private static final String TAG = "DirectShareUtil";
private static final String SHORTCUT_CATEGORY = "android.shortcut.conversation"; private static final String SHORTCUT_CATEGORY = "android.shortcut.conversation";
public static void clearShortcut(@NonNull Context context, int chatId) { public static void clearShortcut(@NonNull Context context, int chatId) {
@@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.util.Prefs;
public class KeepAliveService extends Service { public class KeepAliveService extends Service {
private static final String TAG = KeepAliveService.class.getSimpleName(); private static final String TAG = "KeepAliveService";
static KeepAliveService s_this = null; static KeepAliveService s_this = null;
@@ -10,7 +10,7 @@ import android.util.Log;
public class NetworkStateReceiver extends BroadcastReceiver { public class NetworkStateReceiver extends BroadcastReceiver {
private static final String TAG = NetworkStateReceiver.class.getSimpleName(); private static final String TAG = "NetworkStateReceiver";
private int debugConnectedCount; private int debugConnectedCount;
@Override @Override
@@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.thoughtcrime.securesms.ContactSelectionListFragment;
import org.thoughtcrime.securesms.util.Hash; import org.thoughtcrime.securesms.util.Hash;
import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.Prefs;
@@ -37,7 +36,7 @@ import org.thoughtcrime.securesms.util.Prefs;
* @author Moxie Marlinspike * @author Moxie Marlinspike
*/ */
public class ContactAccessor { public class ContactAccessor {
private static final String TAG = ContactSelectionListFragment.class.getSimpleName(); private static final String TAG = "ContactAccessor";
private static final int CONTACT_CURSOR_NAME = 0; private static final int CONTACT_CURSOR_NAME = 0;
@@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.util.AsyncLoader;
public class PagingMediaLoader extends AsyncLoader<DcMediaGalleryElement> { public class PagingMediaLoader extends AsyncLoader<DcMediaGalleryElement> {
private static final String TAG = PagingMediaLoader.class.getSimpleName(); private static final String TAG = "PagingMediaLoader";
private final DcMsg msg; private final DcMsg msg;
private final boolean leftIsRecent; private final boolean leftIsRecent;
@@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.connect.DcHelper;
public class LocationStreamingService extends Service { public class LocationStreamingService extends Service {
private static final String TAG = LocationStreamingService.class.getSimpleName(); private static final String TAG = "LocationStreamingService";
private static final String ACTION_STOP = "org.thoughtcrime.securesms.geolocation.STOP_STREAMING"; private static final String ACTION_STOP = "org.thoughtcrime.securesms.geolocation.STOP_STREAMING";
private static final int NOTIFICATION_ID = 8801; private static final int NOTIFICATION_ID = 8801;
private static final String CHANNEL_ID = "location_streaming"; private static final String CHANNEL_ID = "location_streaming";
@@ -15,7 +15,7 @@ import java.util.concurrent.Executor;
public class PlatformLocationSource implements LocationSource { public class PlatformLocationSource implements LocationSource {
private static final String TAG = PlatformLocationSource.class.getSimpleName(); private static final String TAG = "PlatformLocationSource";
private static final long UPDATE_INTERVAL_MS = 0; private static final long UPDATE_INTERVAL_MS = 0;
private LocationManager locationManager; private LocationManager locationManager;
@@ -19,7 +19,7 @@ import androidx.annotation.NonNull;
class JobConsumer extends Thread { class JobConsumer extends Thread {
private static final String TAG = JobConsumer.class.getSimpleName(); private static final String TAG = "JobConsumer";
enum JobResult { enum JobResult {
SUCCESS, SUCCESS,
@@ -75,7 +75,7 @@ import org.thoughtcrime.securesms.util.views.Stub;
public class AttachmentManager { public class AttachmentManager {
private static final String TAG = AttachmentManager.class.getSimpleName(); private static final String TAG = "AttachmentManager";
private final @NonNull Context context; private final @NonNull Context context;
private final @NonNull Stub<View> attachmentViewStub; private final @NonNull Stub<View> attachmentViewStub;
@@ -11,7 +11,7 @@ import java.io.InputStream;
class DecryptableStreamLocalUriFetcher extends StreamLocalUriFetcher { class DecryptableStreamLocalUriFetcher extends StreamLocalUriFetcher {
private static final String TAG = DecryptableStreamLocalUriFetcher.class.getSimpleName(); private static final String TAG = "DecryptableStreamLocalUriFetcher";
private final Context context; private final Context context;
@@ -7,7 +7,7 @@ import android.util.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
public class InChatSounds { public class InChatSounds {
private static final String TAG = InChatSounds.class.getSimpleName(); private static final String TAG = "InChatSounds";
private static volatile InChatSounds instance; private static volatile InChatSounds instance;
private SoundPool soundPool = null; private SoundPool soundPool = null;
@@ -54,7 +54,7 @@ import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public class NotificationCenter { public class NotificationCenter {
private static final String TAG = NotificationCenter.class.getSimpleName(); private static final String TAG = "NotificationCenter";
@NonNull private final ApplicationContext context; @NonNull private final ApplicationContext context;
private volatile ChatData visibleChat = null; private volatile ChatData visibleChat = null;
private volatile Pair<Integer, Integer> visibleWebxdc = null; private volatile Pair<Integer, Integer> visibleWebxdc = null;
@@ -33,7 +33,7 @@ import org.thoughtcrime.securesms.util.Util;
/** Get the response text from the Wearable Device and sends an message as a reply */ /** Get the response text from the Wearable Device and sends an message as a reply */
public class RemoteReplyReceiver extends BroadcastReceiver { public class RemoteReplyReceiver extends BroadcastReceiver {
public static final String TAG = RemoteReplyReceiver.class.getSimpleName(); public static final String TAG = "RemoteReplyReceiver";
public static final String REPLY_ACTION = "org.thoughtcrime.securesms.notifications.WEAR_REPLY"; public static final String REPLY_ACTION = "org.thoughtcrime.securesms.notifications.WEAR_REPLY";
public static final String ACCOUNT_ID_EXTRA = "account_id"; public static final String ACCOUNT_ID_EXTRA = "account_id";
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
@@ -44,7 +44,7 @@ import org.thoughtcrime.securesms.util.Util;
public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
implements DcEventCenter.DcEventDelegate { implements DcEventCenter.DcEventDelegate {
private static final String TAG = AdvancedPreferenceFragment.class.getSimpleName(); private static final String TAG = "AdvancedPreferenceFragment";
private ListPreference showEmails; private ListPreference showEmails;
CheckBoxPreference selfReportingCheckbox; CheckBoxPreference selfReportingCheckbox;
@@ -34,7 +34,7 @@ import org.thoughtcrime.securesms.util.Prefs;
public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragment public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragment
implements Preference.OnPreferenceChangeListener { implements Preference.OnPreferenceChangeListener {
private static final String TAG = NotificationsPreferenceFragment.class.getSimpleName(); private static final String TAG = "NotificationsPreferenceFragment";
private CheckBoxPreference ignoreBattery; private CheckBoxPreference ignoreBattery;
private CheckBoxPreference notificationsEnabled; private CheckBoxPreference notificationsEnabled;
@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.util.Util;
public class PersistentBlobProvider { public class PersistentBlobProvider {
private static final String TAG = PersistentBlobProvider.class.getSimpleName(); private static final String TAG = "PersistentBlobProvider";
private static final String URI_STRING = "content://org.thoughtcrime.securesms/capture-new"; private static final String URI_STRING = "content://org.thoughtcrime.securesms/capture-new";
public static final Uri CONTENT_URI = Uri.parse(URI_STRING); public static final Uri CONTENT_URI = Uri.parse(URI_STRING);
@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.util.Util;
public class BackupProviderFragment extends Fragment implements DcEventCenter.DcEventDelegate { public class BackupProviderFragment extends Fragment implements DcEventCenter.DcEventDelegate {
private static final String TAG = BackupProviderFragment.class.getSimpleName(); private static final String TAG = "BackupProviderFragment";
private DcContext dcContext; private DcContext dcContext;
private DcBackupProvider dcBackupProvider; private DcBackupProvider dcBackupProvider;
@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.util.Util;
public class BackupReceiverFragment extends Fragment implements DcEventCenter.DcEventDelegate { public class BackupReceiverFragment extends Fragment implements DcEventCenter.DcEventDelegate {
private static final String TAG = BackupProviderFragment.class.getSimpleName(); private static final String TAG = "BackupProviderFragment";
private DcContext dcContext; private DcContext dcContext;
private TextView statusLine; private TextView statusLine;
@@ -27,7 +27,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class BackupTransferActivity extends BaseActionBarActivity { public class BackupTransferActivity extends BaseActionBarActivity {
private static final String TAG = BackupTransferActivity.class.getSimpleName(); private static final String TAG = "BackupTransferActivity";
public enum TransferMode { public enum TransferMode {
INVALID(0), INVALID(0),
@@ -40,7 +40,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class QrActivity extends BaseActionBarActivity implements View.OnClickListener { public class QrActivity extends BaseActionBarActivity implements View.OnClickListener {
private static final String TAG = QrActivity.class.getSimpleName(); private static final String TAG = "QrActivity";
public static final String EXTRA_SCAN_RELAY = "scan_relay"; public static final String EXTRA_SCAN_RELAY = "scan_relay";
private static final int REQUEST_CODE_IMAGE = 46243; private static final int REQUEST_CODE_IMAGE = 46243;
@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.views.ProgressDialog; import org.thoughtcrime.securesms.util.views.ProgressDialog;
public class QrCodeHandler { public class QrCodeHandler {
private static final String TAG = QrCodeHandler.class.getSimpleName(); private static final String TAG = "QrCodeHandler";
public static int SECUREJOIN_SOURCE_EXTERNAL_LINK = 1; public static int SECUREJOIN_SOURCE_EXTERNAL_LINK = 1;
public static int SECUREJOIN_SOURCE_INTERNAL_LINK = 2; public static int SECUREJOIN_SOURCE_INTERNAL_LINK = 2;
@@ -363,20 +363,24 @@ public class QrCodeHandler {
SecurejoinSource source, SecurejoinSource source,
SecurejoinUiPath uipath) { SecurejoinUiPath uipath) {
String msg; String msg;
int positiveButton;
switch (qrParsed.getState()) { switch (qrParsed.getState()) {
case DcContext.DC_QR_ASK_VERIFYGROUP: case DcContext.DC_QR_ASK_VERIFYGROUP:
msg = activity.getString(R.string.qrscan_ask_join_group, qrParsed.getText1()); msg = activity.getString(R.string.qrscan_ask_join_group, qrParsed.getText1());
positiveButton = R.string.join_group;
break; break;
case DcContext.DC_QR_ASK_JOIN_BROADCAST: case DcContext.DC_QR_ASK_JOIN_BROADCAST:
msg = activity.getString(R.string.qrscan_ask_join_channel, qrParsed.getText1()); msg = activity.getString(R.string.qrscan_ask_join_channel, qrParsed.getText1());
positiveButton = R.string.join_channel;
break; break;
default: default:
msg = activity.getString(R.string.ask_start_chat_with, name); msg = activity.getString(R.string.ask_start_chat_with, name);
positiveButton = R.string.ok;
break; break;
} }
builder.setMessage(msg); builder.setMessage(msg);
builder.setPositiveButton( builder.setPositiveButton(
android.R.string.ok, positiveButton,
(dialogInterface, i) -> { (dialogInterface, i) -> {
secureJoinByQr(qrRawString, source, uipath); secureJoinByQr(qrRawString, source, uipath);
}); });
@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class QrScanFragment extends Fragment { public class QrScanFragment extends Fragment {
private static final String TAG = QrScanFragment.class.getSimpleName(); private static final String TAG = "QrScanFragment";
private CompoundBarcodeView barcodeScannerView; private CompoundBarcodeView barcodeScannerView;
private MyCaptureManager capture; private MyCaptureManager capture;
@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.util.Util;
public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDelegate { public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDelegate {
private static final String TAG = QrShowFragment.class.getSimpleName(); private static final String TAG = "QrShowFragment";
public static final int WHITE = 0xFFFFFFFF; public static final int WHITE = 0xFFFFFFFF;
private static final int BLACK = 0xFF000000; private static final int BLACK = 0xFF000000;
private static final int WIDTH = 400; private static final int WIDTH = 400;
@@ -31,7 +31,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class ReactionsDetailsFragment extends DialogFragment public class ReactionsDetailsFragment extends DialogFragment
implements DcEventCenter.DcEventDelegate { implements DcEventCenter.DcEventDelegate {
private static final String TAG = ReactionsDetailsFragment.class.getSimpleName(); private static final String TAG = "ReactionsDetailsFragment";
private static final String ARG_MSG_ID = "msg_id"; private static final String ARG_MSG_ID = "msg_id";
private RecyclerView recyclerView; private RecyclerView recyclerView;
@@ -56,7 +56,7 @@ public class EditRelayActivity extends BaseActionBarActivity
PORT, PORT,
} }
private static final String TAG = EditRelayActivity.class.getSimpleName(); private static final String TAG = "EditRelayActivity";
public static final String EXTRA_ADDR = "extra_addr"; public static final String EXTRA_ADDR = "extra_addr";
private TextInputEditText emailInput; private TextInputEditText emailInput;
@@ -37,7 +37,7 @@ import org.thoughtcrime.securesms.util.ViewUtil;
public class RelayListActivity extends BaseActionBarActivity public class RelayListActivity extends BaseActionBarActivity
implements RelayListAdapter.OnRelayClickListener, DcEventCenter.DcEventDelegate { implements RelayListAdapter.OnRelayClickListener, DcEventCenter.DcEventDelegate {
private static final String TAG = RelayListActivity.class.getSimpleName(); private static final String TAG = "RelayListActivity";
public static final String EXTRA_QR_DATA = "qr_data"; public static final String EXTRA_QR_DATA = "qr_data";
private RelayListAdapter adapter; private RelayListAdapter adapter;
@@ -37,7 +37,7 @@ import org.thoughtcrime.securesms.util.Util;
public final class ImageEditorFragment extends Fragment public final class ImageEditorFragment extends Fragment
implements ImageEditorHud.EventListener, VerticalSlideColorPicker.OnColorChangeListener { implements ImageEditorHud.EventListener, VerticalSlideColorPicker.OnColorChangeListener {
private static final String TAG = ImageEditorFragment.class.getSimpleName(); private static final String TAG = "ImageEditorFragment";
private static final String KEY_IMAGE_URI = "image_uri"; private static final String KEY_IMAGE_URI = "image_uri";
@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.R;
public class StickerSelectActivity extends FragmentActivity public class StickerSelectActivity extends FragmentActivity
implements StickerSelectFragment.StickerSelectionListener { implements StickerSelectFragment.StickerSelectionListener {
private static final String TAG = StickerSelectActivity.class.getSimpleName(); private static final String TAG = "StickerSelectActivity";
public static final String EXTRA_STICKER_FILE = "extra_sticker_file"; public static final String EXTRA_STICKER_FILE = "extra_sticker_file";
@@ -40,7 +40,7 @@ import org.thoughtcrime.securesms.util.BitmapUtil;
*/ */
final class UriGlideRenderer implements Renderer { final class UriGlideRenderer implements Renderer {
private static final String TAG = UriGlideRenderer.class.getSimpleName(); private static final String TAG = "UriGlideRenderer";
private static final int PREVIEW_DIMENSION_LIMIT = 2048; private static final int PREVIEW_DIMENSION_LIMIT = 2048;
private static final int MAX_BLUR_DIMENSION = 300; private static final int MAX_BLUR_DIMENSION = 300;
@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.search.model.SearchResult;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
class SearchViewModel extends ViewModel { class SearchViewModel extends ViewModel {
private static final String TAG = SearchViewModel.class.getSimpleName(); private static final String TAG = "SearchViewModel";
private final ObservingLiveData searchResult; private final ObservingLiveData searchResult;
private String lastQuery; private String lastQuery;
private final DcContext dcContext; private final DcContext dcContext;
@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.ConversationListActivity;
public class AudioPlaybackService extends MediaSessionService { public class AudioPlaybackService extends MediaSessionService {
private static final String TAG = AudioPlaybackService.class.getSimpleName(); private static final String TAG = "AudioPlaybackService";
private ExoPlayer player; private ExoPlayer player;
private MediaSession session; private MediaSession session;
@@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.notifications.NotificationCenter;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public final class FetchForegroundService extends Service { public final class FetchForegroundService extends Service {
private static final String TAG = FetchForegroundService.class.getSimpleName(); private static final String TAG = "FetchForegroundService";
private static final Object SERVICE_LOCK = new Object(); private static final Object SERVICE_LOCK = new Object();
private static final Object STOP_NOTIFIER = new Object(); private static final Object STOP_NOTIFIER = new Object();
private static volatile boolean fetchingSynchronously = false; private static volatile boolean fetchingSynchronously = false;
@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.util.IntentUtils;
public final class GenericForegroundService extends Service { public final class GenericForegroundService extends Service {
private static final String TAG = GenericForegroundService.class.getSimpleName(); private static final String TAG = "GenericForegroundService";
private final IBinder binder = new LocalBinder(); private final IBinder binder = new LocalBinder();
@@ -26,7 +26,7 @@ import javax.microedition.khronos.egl.EGLDisplay;
public class BitmapUtil { public class BitmapUtil {
private static final String TAG = BitmapUtil.class.getSimpleName(); private static final String TAG = "BitmapUtil";
@WorkerThread @WorkerThread
public static Bitmap createScaledBitmap(Bitmap bitmap, int maxWidth, int maxHeight) { public static Bitmap createScaledBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {
@@ -35,7 +35,7 @@ import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
public class MediaUtil { public class MediaUtil {
private static final String TAG = MediaUtil.class.getSimpleName(); private static final String TAG = "MediaUtil";
public static final String IMAGE_WEBP = "image/webp"; public static final String IMAGE_WEBP = "image/webp";
public static final String IMAGE_JPEG = "image/jpeg"; public static final String IMAGE_JPEG = "image/jpeg";
@@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPrefere
public class Prefs { public class Prefs {
private static final String TAG = Prefs.class.getSimpleName(); private static final String TAG = "Prefs";
public static final String RELIABLE_SERVICE_PREF = "pref_reliable_service"; public static final String RELIABLE_SERVICE_PREF = "pref_reliable_service";
public static final String DISABLE_PASSPHRASE_PREF = "pref_disable_passphrase"; public static final String DISABLE_PASSPHRASE_PREF = "pref_disable_passphrase";
@@ -34,7 +34,7 @@ import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask;
public class SaveAttachmentTask public class SaveAttachmentTask
extends ProgressDialogAsyncTask<SaveAttachmentTask.Attachment, Void, Pair<Integer, Uri>> { extends ProgressDialogAsyncTask<SaveAttachmentTask.Attachment, Void, Pair<Integer, Uri>> {
private static final String TAG = SaveAttachmentTask.class.getSimpleName(); private static final String TAG = "SaveAttachmentTask";
static final int SUCCESS = 0; static final int SUCCESS = 0;
private static final int FAILURE = 1; private static final int FAILURE = 1;

Some files were not shown because too many files have changed in this diff Show More