From 1914db5ea4d0cbec949c48682e33af6bc20a65bb Mon Sep 17 00:00:00 2001 From: Michael W Date: Mon, 16 Dec 2024 15:49:00 +0100 Subject: [PATCH] Messaging: Convert further parts to androidx CursorLoader, LoaderManager, Preferences, Fragments, ... Change-Id: I8787b2db365249839547c6d5c21ab7cd5ff42082 --- Android.bp | 1 + .../datamodel/BoundCursorLoader.java | 5 +- .../data/BlockedParticipantsData.java | 7 +- .../datamodel/data/ContactPickerData.java | 10 ++- .../datamodel/data/ConversationData.java | 28 +++++--- .../datamodel/data/ConversationListData.java | 11 +-- .../datamodel/data/MediaPickerData.java | 12 ++-- .../datamodel/data/PeopleAndOptionsData.java | 12 ++-- .../datamodel/data/SettingsData.java | 10 ++- .../messaging/ui/BaseBugleActivity.java | 6 +- .../ui/BaseBugleFragmentActivity.java | 5 +- .../ui/BlockedParticipantsFragment.java | 9 ++- .../messaging/ui/CursorRecyclerAdapter.java | 4 +- .../messaging/ui/CustomHeaderViewPager.java | 3 +- src/com/android/messaging/ui/UIIntents.java | 3 +- .../android/messaging/ui/UIIntentsImpl.java | 2 +- .../messaging/ui/VCardDetailActivity.java | 11 ++- .../messaging/ui/VCardDetailFragment.java | 7 +- .../ui/WidgetPickConversationActivity.java | 18 +++-- .../ApplicationSettingsActivity.java | 33 ++++----- .../PerSubscriptionSettingsActivity.java | 29 +++----- .../ui/appsettings/PhoneNumberPreference.java | 70 +++++++------------ .../ui/appsettings/SettingsActivity.java | 13 ++-- .../AttachmentChooserActivity.java | 14 +++- .../AttachmentChooserFragment.java | 12 ++-- .../ui/contact/ContactPickerFragment.java | 24 +++---- .../ui/conversation/ConversationActivity.java | 14 ++-- .../ConversationFastScroller.java | 1 + .../ui/conversation/ConversationFragment.java | 40 ++++++----- .../ConversationInputManager.java | 6 +- .../EnterSelfPhoneNumberDialog.java | 7 +- .../AbstractConversationListActivity.java | 20 ++---- .../ArchivedConversationListActivity.java | 20 +++++- .../ConversationListActivity.java | 21 ++++-- .../ConversationListFragment.java | 27 +++---- .../ForwardMessageActivity.java | 16 +++-- .../conversationlist/ShareIntentActivity.java | 14 ++-- .../conversationlist/ShareIntentFragment.java | 21 +++--- .../PeopleAndOptionsActivity.java | 4 +- .../PeopleAndOptionsFragment.java | 5 +- .../ui/mediapicker/DocumentImagePicker.java | 4 +- .../ui/mediapicker/MediaChooser.java | 4 +- .../messaging/ui/mediapicker/MediaPicker.java | 20 +++--- .../util/ChangeDefaultSmsAppHelper.java | 4 +- 44 files changed, 341 insertions(+), 266 deletions(-) diff --git a/Android.bp b/Android.bp index 75e887a..604eb60 100644 --- a/Android.bp +++ b/Android.bp @@ -68,6 +68,7 @@ android_app { "androidx.legacy_legacy-support-core-utils", "androidx.legacy_legacy-support-core-ui", "androidx.palette_palette", + "androidx.preference_preference", "androidx.recyclerview_recyclerview", "androidx.viewpager_viewpager", "androidx.legacy_legacy-support-v13", diff --git a/src/com/android/messaging/datamodel/BoundCursorLoader.java b/src/com/android/messaging/datamodel/BoundCursorLoader.java index 84d38e6..a094891 100644 --- a/src/com/android/messaging/datamodel/BoundCursorLoader.java +++ b/src/com/android/messaging/datamodel/BoundCursorLoader.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,9 +18,10 @@ package com.android.messaging.datamodel; import android.content.Context; -import android.content.CursorLoader; import android.net.Uri; +import androidx.loader.content.CursorLoader; + /** * Extension to basic cursor loader that has an attached binding id */ @@ -38,7 +40,6 @@ public class BoundCursorLoader extends CursorLoader { /** * Binding id associated with this loader - consume can check to verify data still valid - * @return */ public String getBindingId() { return mBindingId; diff --git a/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java b/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java index fb6877f..6bb348c 100644 --- a/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java +++ b/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java @@ -17,13 +17,15 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; + import com.android.messaging.datamodel.BoundCursorLoader; import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns; import com.android.messaging.datamodel.MessagingContentProvider; @@ -51,6 +53,7 @@ public class BlockedParticipantsData extends BindableData implements mListener = listener; } + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { Assert.isTrue(id == BLOCKED_PARTICIPANTS_LOADER); diff --git a/src/com/android/messaging/datamodel/data/ContactPickerData.java b/src/com/android/messaging/datamodel/data/ContactPickerData.java index bf057db..068c34d 100644 --- a/src/com/android/messaging/datamodel/data/ContactPickerData.java +++ b/src/com/android/messaging/datamodel/data/ContactPickerData.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,12 +17,14 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; + import com.android.messaging.datamodel.BoundCursorLoader; import com.android.messaging.datamodel.FrequentContactsCursorBuilder; import com.android.messaging.datamodel.MessagingContentProvider; @@ -61,6 +64,7 @@ public class ContactPickerData extends BindableData implements private static final int FREQUENT_CONTACTS_LOADER = 2; private static final int PARTICIPANT_LOADER = 3; + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { final String bindingId = args.getString(BINDING_ID); @@ -91,7 +95,7 @@ public class ContactPickerData extends BindableData implements * {@inheritDoc} */ @Override - public void onLoadFinished(final Loader loader, final Cursor data) { + public void onLoadFinished(@NonNull final Loader loader, final Cursor data) { final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader; if (isBound(cursorLoader.getBindingId())) { switch (loader.getId()) { diff --git a/src/com/android/messaging/datamodel/data/ConversationData.java b/src/com/android/messaging/datamodel/data/ConversationData.java index 07c32c6..9545ed3 100644 --- a/src/com/android/messaging/datamodel/data/ConversationData.java +++ b/src/com/android/messaging/datamodel/data/ConversationData.java @@ -17,17 +17,19 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.database.CursorWrapper; import android.database.sqlite.SQLiteFullException; import android.net.Uri; import android.os.Bundle; -import androidx.annotation.Nullable; import android.text.TextUtils; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; + import com.android.common.contacts.DataUsageStatUpdater; import com.android.messaging.Factory; import com.android.messaging.R; @@ -180,6 +182,7 @@ public class ConversationData extends BindableData { * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times. */ private class MetadataLoaderCallbacks implements LoaderManager.LoaderCallbacks { + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { Assert.equals(CONVERSATION_META_DATA_LOADER, id); @@ -200,7 +203,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoadFinished(final Loader generic, final Cursor data) { + public void onLoadFinished(@NonNull final Loader generic, final Cursor data) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -227,7 +230,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoaderReset(final Loader generic) { + public void onLoaderReset(@NonNull final Loader generic) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -246,6 +249,7 @@ public class ConversationData extends BindableData { * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times. */ private class MessagesLoaderCallbacks implements LoaderManager.LoaderCallbacks { + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { Assert.equals(CONVERSATION_MESSAGES_LOADER, id); @@ -268,7 +272,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoadFinished(final Loader generic, final Cursor rawData) { + public void onLoadFinished(@NonNull final Loader generic, final Cursor rawData) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -316,7 +320,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoaderReset(final Loader generic) { + public void onLoaderReset(@NonNull final Loader generic) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -349,6 +353,7 @@ public class ConversationData extends BindableData { * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times. */ private class ParticipantLoaderCallbacks implements LoaderManager.LoaderCallbacks { + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { Assert.equals(PARTICIPANT_LOADER, id); @@ -369,7 +374,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoadFinished(final Loader generic, final Cursor data) { + public void onLoadFinished(@NonNull final Loader generic, final Cursor data) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -383,7 +388,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoaderReset(final Loader generic) { + public void onLoaderReset(@NonNull final Loader generic) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -400,6 +405,7 @@ public class ConversationData extends BindableData { * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times. */ private class SelfParticipantLoaderCallbacks implements LoaderManager.LoaderCallbacks { + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { Assert.equals(SELF_PARTICIPANT_LOADER, id); @@ -422,7 +428,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoadFinished(final Loader generic, final Cursor data) { + public void onLoadFinished(@NonNull final Loader generic, final Cursor data) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element @@ -437,7 +443,7 @@ public class ConversationData extends BindableData { } @Override - public void onLoaderReset(final Loader generic) { + public void onLoaderReset(@NonNull final Loader generic) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element diff --git a/src/com/android/messaging/datamodel/data/ConversationListData.java b/src/com/android/messaging/datamodel/data/ConversationListData.java index 41744be..ace2595 100644 --- a/src/com/android/messaging/datamodel/data/ConversationListData.java +++ b/src/com/android/messaging/datamodel/data/ConversationListData.java @@ -17,12 +17,14 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; + import com.android.messaging.datamodel.BoundCursorLoader; import com.android.messaging.datamodel.BugleNotifications; import com.android.messaging.datamodel.DataModel; @@ -81,6 +83,7 @@ public class ConversationListData extends BindableData // all blocked participants private final HashSet mBlockedParticipants = new HashSet(); + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { final String bindingId = args.getString(BINDING_ID); @@ -116,7 +119,7 @@ public class ConversationListData extends BindableData * {@inheritDoc} */ @Override - public void onLoadFinished(final Loader generic, final Cursor data) { + public void onLoadFinished(@NonNull final Loader generic, final Cursor data) { final BoundCursorLoader loader = (BoundCursorLoader) generic; if (isBound(loader.getBindingId())) { switch (loader.getId()) { @@ -145,7 +148,7 @@ public class ConversationListData extends BindableData * {@inheritDoc} */ @Override - public void onLoaderReset(final Loader generic) { + public void onLoaderReset(@NonNull final Loader generic) { final BoundCursorLoader loader = (BoundCursorLoader) generic; if (isBound(loader.getBindingId())) { switch (loader.getId()) { diff --git a/src/com/android/messaging/datamodel/data/MediaPickerData.java b/src/com/android/messaging/datamodel/data/MediaPickerData.java index 5a2ef33..ef94751 100644 --- a/src/com/android/messaging/datamodel/data/MediaPickerData.java +++ b/src/com/android/messaging/datamodel/data/MediaPickerData.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,12 +17,14 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.os.Bundle; + +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; import com.android.messaging.datamodel.BoundCursorLoader; import com.android.messaging.datamodel.GalleryBoundCursorLoader; @@ -57,6 +60,7 @@ public class MediaPickerData extends BindableData { * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times. */ private class GalleryLoaderCallbacks implements LoaderManager.LoaderCallbacks { + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { final String bindingId = args.getString(BINDING_ID); @@ -80,7 +84,7 @@ public class MediaPickerData extends BindableData { * {@inheritDoc} */ @Override - public void onLoadFinished(final Loader loader, final Cursor data) { + public void onLoadFinished(@NonNull final Loader loader, final Cursor data) { final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader; if (isBound(cursorLoader.getBindingId())) { switch (loader.getId()) { @@ -102,7 +106,7 @@ public class MediaPickerData extends BindableData { * {@inheritDoc} */ @Override - public void onLoaderReset(final Loader loader) { + public void onLoaderReset(@NonNull final Loader loader) { final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader; if (isBound(cursorLoader.getBindingId())) { switch (loader.getId()) { diff --git a/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java b/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java index b8b4a41..1dbdb7c 100644 --- a/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java +++ b/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +17,15 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; + import com.android.messaging.datamodel.BoundCursorLoader; import com.android.messaging.datamodel.MessagingContentProvider; import com.android.messaging.datamodel.action.BugleActionToasts; @@ -63,6 +66,7 @@ public class PeopleAndOptionsData extends BindableData implements private static final int CONVERSATION_OPTIONS_LOADER = 1; private static final int PARTICIPANT_LOADER = 2; + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { final String bindingId = args.getString(BINDING_ID); @@ -98,7 +102,7 @@ public class PeopleAndOptionsData extends BindableData implements * {@inheritDoc} */ @Override - public void onLoadFinished(final Loader loader, final Cursor data) { + public void onLoadFinished(@NonNull final Loader loader, final Cursor data) { final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader; if (isBound(cursorLoader.getBindingId())) { switch (loader.getId()) { @@ -126,7 +130,7 @@ public class PeopleAndOptionsData extends BindableData implements * {@inheritDoc} */ @Override - public void onLoaderReset(final Loader loader) { + public void onLoaderReset(@NonNull final Loader loader) { final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader; if (isBound(cursorLoader.getBindingId())) { switch (loader.getId()) { diff --git a/src/com/android/messaging/datamodel/data/SettingsData.java b/src/com/android/messaging/datamodel/data/SettingsData.java index 07b9451..88f8af0 100644 --- a/src/com/android/messaging/datamodel/data/SettingsData.java +++ b/src/com/android/messaging/datamodel/data/SettingsData.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +17,15 @@ package com.android.messaging.datamodel.data; -import android.app.LoaderManager; import android.content.Context; -import android.content.Loader; import android.database.Cursor; import android.os.Bundle; import android.text.TextUtils; +import androidx.annotation.NonNull; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; + import com.android.messaging.R; import com.android.messaging.datamodel.BoundCursorLoader; import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns; @@ -126,6 +129,7 @@ public class SettingsData extends BindableData implements private static final int SELF_PARTICIPANT_LOADER = 1; + @NonNull @Override public Loader onCreateLoader(final int id, final Bundle args) { Assert.equals(SELF_PARTICIPANT_LOADER, id); @@ -147,7 +151,7 @@ public class SettingsData extends BindableData implements } @Override - public void onLoadFinished(final Loader generic, final Cursor data) { + public void onLoadFinished(@NonNull final Loader generic, final Cursor data) { final BoundCursorLoader loader = (BoundCursorLoader) generic; // Check if data still bound to the requesting ui element diff --git a/src/com/android/messaging/ui/BaseBugleActivity.java b/src/com/android/messaging/ui/BaseBugleActivity.java index 1236282..da7d63b 100644 --- a/src/com/android/messaging/ui/BaseBugleActivity.java +++ b/src/com/android/messaging/ui/BaseBugleActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,9 +17,10 @@ package com.android.messaging.ui; -import android.app.Activity; import android.os.Bundle; +import androidx.fragment.app.FragmentActivity; + import com.android.messaging.util.BugleActivityUtil; import com.android.messaging.util.LogUtil; import com.android.messaging.util.UiUtils; @@ -27,7 +29,7 @@ import com.android.messaging.util.UiUtils; * Base class for app activities that would normally derive from Activity. Responsible for * ensuring app requirements are met during onResume() */ -public class BaseBugleActivity extends Activity { +public class BaseBugleActivity extends FragmentActivity { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/src/com/android/messaging/ui/BaseBugleFragmentActivity.java b/src/com/android/messaging/ui/BaseBugleFragmentActivity.java index 947970f..5d7fc6d 100644 --- a/src/com/android/messaging/ui/BaseBugleFragmentActivity.java +++ b/src/com/android/messaging/ui/BaseBugleFragmentActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +17,7 @@ package com.android.messaging.ui; -import android.app.Activity; +import androidx.fragment.app.FragmentActivity; import com.android.messaging.util.BugleActivityUtil; import com.android.messaging.util.LogUtil; @@ -25,7 +26,7 @@ import com.android.messaging.util.LogUtil; * Base class for app activities that would normally derive from FragmentActivity. Responsible for * ensuring app requirements are met during onResume() */ -public class BaseBugleFragmentActivity extends Activity { +public class BaseBugleFragmentActivity extends FragmentActivity { @Override protected void onResume() { super.onResume(); diff --git a/src/com/android/messaging/ui/BlockedParticipantsFragment.java b/src/com/android/messaging/ui/BlockedParticipantsFragment.java index 14ec9d8..ccddbf4 100644 --- a/src/com/android/messaging/ui/BlockedParticipantsFragment.java +++ b/src/com/android/messaging/ui/BlockedParticipantsFragment.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,17 +16,19 @@ */ package com.android.messaging.ui; -import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; -import androidx.cursoradapter.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; +import androidx.cursoradapter.widget.CursorAdapter; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; + import com.android.messaging.R; import com.android.messaging.datamodel.binding.Binding; import com.android.messaging.datamodel.binding.BindingBase; @@ -58,7 +61,7 @@ public class BlockedParticipantsFragment extends Fragment mAdapter = new BlockedParticipantListAdapter(getActivity(), null); mListView.setAdapter(mAdapter); mBinding.bind(DataModel.get().createBlockedParticipantsData(getActivity(), this)); - mBinding.getData().init(getLoaderManager(), mBinding); + mBinding.getData().init(LoaderManager.getInstance(this), mBinding); return view; } diff --git a/src/com/android/messaging/ui/CursorRecyclerAdapter.java b/src/com/android/messaging/ui/CursorRecyclerAdapter.java index 502743a..e426679 100644 --- a/src/com/android/messaging/ui/CursorRecyclerAdapter.java +++ b/src/com/android/messaging/ui/CursorRecyclerAdapter.java @@ -25,6 +25,7 @@ import android.os.Handler; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; + import android.util.Log; import android.view.ViewGroup; import android.widget.FilterQueryProvider; @@ -85,7 +86,8 @@ public abstract class CursorRecyclerAdapter * @deprecated This option is discouraged, as it results in Cursor queries * being performed on the application's UI thread and thus can cause poor * responsiveness or even Application Not Responding errors. As an alternative, - * use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}. + * use {@link androidx.loader.app.LoaderManager} with a + * {@link androidx.loader.content.CursorLoader}. */ @Deprecated public static final int FLAG_AUTO_REQUERY = 0x01; diff --git a/src/com/android/messaging/ui/CustomHeaderViewPager.java b/src/com/android/messaging/ui/CustomHeaderViewPager.java index 064518c..ead254c 100644 --- a/src/com/android/messaging/ui/CustomHeaderViewPager.java +++ b/src/com/android/messaging/ui/CustomHeaderViewPager.java @@ -17,6 +17,7 @@ package com.android.messaging.ui; import android.content.Context; + import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager.OnPageChangeListener; @@ -66,7 +67,7 @@ public class CustomHeaderViewPager extends LinearLayout { final PagerAdapter adapter = new CustomHeaderViewPagerAdapter(viewHolders); mViewPager.setAdapter(adapter); mTabstrip.setViewPager(mViewPager); - mViewPager.setOnPageChangeListener(new OnPageChangeListener() { + mViewPager.addOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int state) { diff --git a/src/com/android/messaging/ui/UIIntents.java b/src/com/android/messaging/ui/UIIntents.java index 7dcc813..ee55ac2 100644 --- a/src/com/android/messaging/ui/UIIntents.java +++ b/src/com/android/messaging/ui/UIIntents.java @@ -17,7 +17,6 @@ package com.android.messaging.ui; import android.app.Activity; -import android.app.Fragment; import android.app.PendingIntent; import android.content.ContentValues; import android.content.Context; @@ -27,6 +26,8 @@ import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; +import androidx.fragment.app.Fragment; + import com.android.messaging.Factory; import com.android.messaging.datamodel.data.MessageData; import com.android.messaging.util.ConversationIdSet; diff --git a/src/com/android/messaging/ui/UIIntentsImpl.java b/src/com/android/messaging/ui/UIIntentsImpl.java index 12a037a..d3b55c5 100644 --- a/src/com/android/messaging/ui/UIIntentsImpl.java +++ b/src/com/android/messaging/ui/UIIntentsImpl.java @@ -17,7 +17,6 @@ package com.android.messaging.ui; import android.app.Activity; -import android.app.Fragment; import android.app.PendingIntent; import android.app.role.RoleManager; import android.appwidget.AppWidgetManager; @@ -36,6 +35,7 @@ import android.provider.MediaStore; import androidx.annotation.Nullable; import androidx.core.app.TaskStackBuilder; +import androidx.fragment.app.Fragment; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import android.text.TextUtils; diff --git a/src/com/android/messaging/ui/VCardDetailActivity.java b/src/com/android/messaging/ui/VCardDetailActivity.java index cef9060..277cbfa 100644 --- a/src/com/android/messaging/ui/VCardDetailActivity.java +++ b/src/com/android/messaging/ui/VCardDetailActivity.java @@ -16,12 +16,14 @@ */ package com.android.messaging.ui; -import android.app.Fragment; import android.net.Uri; import android.os.Bundle; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; import com.android.messaging.R; import com.android.messaging.util.Assert; @@ -30,16 +32,19 @@ import com.android.messaging.util.Assert; * An activity that hosts VCardDetailFragment that shows the content of a VCard that contains one * or more contacts. */ -public class VCardDetailActivity extends BugleActionBarActivity { +public class VCardDetailActivity extends BugleActionBarActivity + implements FragmentOnAttachListener { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getSupportFragmentManager().addFragmentOnAttachListener(this); setContentView(R.layout.vcard_detail_activity); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override - public void onAttachFragment(final Fragment fragment) { + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull final Fragment fragment) { if (fragment instanceof VCardDetailFragment) { final Uri vCardUri = getIntent().getParcelableExtra(UIIntents.UI_INTENT_EXTRA_VCARD_URI); diff --git a/src/com/android/messaging/ui/VCardDetailFragment.java b/src/com/android/messaging/ui/VCardDetailFragment.java index 61ef347..5323849 100644 --- a/src/com/android/messaging/ui/VCardDetailFragment.java +++ b/src/com/android/messaging/ui/VCardDetailFragment.java @@ -16,7 +16,6 @@ */ package com.android.messaging.ui; -import android.app.Fragment; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; @@ -30,6 +29,9 @@ import android.view.ViewGroup; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; + import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; import com.android.messaging.datamodel.MediaScratchFileProvider; @@ -113,7 +115,8 @@ public class VCardDetailFragment extends Fragment implements PersonItemDataListe } @Override - public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { + public void onCreateOptionsMenu(@NonNull final Menu menu, + @NonNull final MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.vcard_detail_fragment_menu, menu); final MenuItem addToContactsItem = menu.findItem(R.id.action_add_contact); diff --git a/src/com/android/messaging/ui/WidgetPickConversationActivity.java b/src/com/android/messaging/ui/WidgetPickConversationActivity.java index 60e1318..957e3a6 100644 --- a/src/com/android/messaging/ui/WidgetPickConversationActivity.java +++ b/src/com/android/messaging/ui/WidgetPickConversationActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +17,15 @@ package com.android.messaging.ui; -import android.app.Fragment; import android.appwidget.AppWidgetManager; import android.content.Intent; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; + import com.android.messaging.Factory; import com.android.messaging.datamodel.data.ConversationListItemData; import com.android.messaging.ui.conversationlist.ShareIntentFragment; @@ -29,7 +34,7 @@ import com.android.messaging.util.BuglePrefs; import com.android.messaging.widget.WidgetConversationProvider; public class WidgetPickConversationActivity extends BaseBugleActivity implements - ShareIntentFragment.HostInterface { + ShareIntentFragment.HostInterface, FragmentOnAttachListener { private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; @@ -37,7 +42,6 @@ public class WidgetPickConversationActivity extends BaseBugleActivity implements protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // Set the result to CANCELED. This will cause the widget host to cancel // out of the widget placement if they press the back button. setResult(RESULT_CANCELED); @@ -55,15 +59,18 @@ public class WidgetPickConversationActivity extends BaseBugleActivity implements finish(); } + getSupportFragmentManager().addFragmentOnAttachListener(this); + final ShareIntentFragment convPicker = new ShareIntentFragment(); final Bundle bundle = new Bundle(); bundle.putBoolean(ShareIntentFragment.HIDE_NEW_CONVERSATION_BUTTON_KEY, true); convPicker.setArguments(bundle); - convPicker.show(getFragmentManager(), "ShareIntentFragment"); + convPicker.show(getSupportFragmentManager(), "ShareIntentFragment"); } @Override - public void onAttachFragment(final Fragment fragment) { + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull Fragment fragment) { final Intent intent = getIntent(); final String action = intent.getAction(); if (!AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)) { @@ -110,5 +117,4 @@ public class WidgetPickConversationActivity extends BaseBugleActivity implements final BuglePrefs prefs = Factory.get().getWidgetPrefs(); prefs.remove(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID + appWidgetId); } - } diff --git a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java index 8ae7e5e..03c94be 100644 --- a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java +++ b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java @@ -17,22 +17,21 @@ package com.android.messaging.ui.appsettings; -import android.app.FragmentTransaction; import android.content.Intent; -import android.net.Uri; import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceFragment; -import android.preference.PreferenceScreen; -import android.preference.SwitchPreference; import android.provider.Settings; - -import androidx.annotation.NonNull; -import androidx.core.app.NavUtils; -import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.NavUtils; +import androidx.fragment.app.FragmentTransaction; +import androidx.preference.Preference; +import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; + import com.android.messaging.R; import com.android.messaging.ui.BugleActionBarActivity; import com.android.messaging.ui.LicenseActivity; @@ -52,7 +51,7 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity { getSupportActionBar().setTitle(getString(R.string.settings_activity_title)); } - FragmentTransaction ft = getFragmentManager().beginTransaction(); + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(android.R.id.content, new ApplicationSettingsFragment()); ft.commit(); } @@ -80,7 +79,7 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity { return super.onOptionsItemSelected(item); } - public static class ApplicationSettingsFragment extends PreferenceFragment { + public static class ApplicationSettingsFragment extends PreferenceFragmentCompat { private String mNotificationsPreferenceKey; private Preference mNotificationsPreference; @@ -97,9 +96,8 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity { } @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - + public void onCreatePreferences(@Nullable Bundle savedInstanceState, + @Nullable String rootKey) { getPreferenceManager().setSharedPreferencesName(BuglePrefs.SHARED_PREFERENCES_NAME); addPreferencesFromResource(R.xml.preferences_application); @@ -131,8 +129,7 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity { } @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, - Preference preference) { + public boolean onPreferenceTreeClick(@NonNull Preference preference) { if (preference.getKey() == mNotificationsPreferenceKey) { Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName()); @@ -142,7 +139,7 @@ public class ApplicationSettingsActivity extends BugleActionBarActivity { preference.getKey() == mSmsEnabledPrefKey) { mIsSmsPreferenceClicked = true; } - return super.onPreferenceTreeClick(preferenceScreen, preference); + return super.onPreferenceTreeClick(preference); } private void updateSmsEnabledPreferences() { diff --git a/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java b/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java index 4988060..486902e 100644 --- a/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java +++ b/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java @@ -17,37 +17,29 @@ package com.android.messaging.ui.appsettings; -import android.app.FragmentTransaction; -import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; -import android.content.pm.PackageManager; import android.os.Bundle; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceClickListener; -import android.preference.PreferenceCategory; -import android.preference.PreferenceFragment; -import android.preference.PreferenceScreen; -import android.support.v7.mms.MmsManager; import android.text.TextUtils; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.app.NavUtils; +import androidx.fragment.app.FragmentTransaction; +import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceFragmentCompat; import com.android.messaging.Factory; import com.android.messaging.R; import com.android.messaging.datamodel.ParticipantRefresh; import com.android.messaging.datamodel.data.ParticipantData; -import com.android.messaging.sms.ApnDatabase; import com.android.messaging.sms.MmsConfig; -import com.android.messaging.sms.MmsUtils; import com.android.messaging.ui.BugleActionBarActivity; import com.android.messaging.ui.UIIntents; -import com.android.messaging.util.Assert; import com.android.messaging.util.BuglePrefs; -import com.android.messaging.util.LogUtil; import com.android.messaging.util.PhoneUtils; public class PerSubscriptionSettingsActivity extends BugleActionBarActivity { @@ -64,7 +56,7 @@ public class PerSubscriptionSettingsActivity extends BugleActionBarActivity { // This will fall back to the default title, i.e. "Messaging settings," so No-op. } - final FragmentTransaction ft = getFragmentManager().beginTransaction(); + final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); final PerSubscriptionSettingsFragment fragment = new PerSubscriptionSettingsFragment(); ft.replace(android.R.id.content, fragment); ft.commit(); @@ -80,7 +72,7 @@ public class PerSubscriptionSettingsActivity extends BugleActionBarActivity { return super.onOptionsItemSelected(item); } - public static class PerSubscriptionSettingsFragment extends PreferenceFragment + public static class PerSubscriptionSettingsFragment extends PreferenceFragmentCompat implements OnSharedPreferenceChangeListener { private PhoneNumberPreference mPhoneNumberPreference; private Preference mGroupMmsPreference; @@ -93,12 +85,9 @@ public class PerSubscriptionSettingsActivity extends BugleActionBarActivity { } @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - + public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) { // Get sub id from launch intent - final Intent intent = getActivity().getIntent(); - Assert.notNull(intent); + final Intent intent = requireActivity().getIntent(); mSubId = (intent != null) ? intent.getIntExtra(UIIntents.UI_INTENT_EXTRA_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID) : ParticipantData.DEFAULT_SELF_SUB_ID; diff --git a/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java b/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java index 42ef606..75fd8e5 100644 --- a/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java +++ b/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,13 +18,16 @@ package com.android.messaging.ui.appsettings; import android.content.Context; -import android.preference.EditTextPreference; -import androidx.core.text.BidiFormatter; -import androidx.core.text.TextDirectionHeuristicsCompat; import android.text.InputType; import android.text.TextUtils; import android.util.AttributeSet; -import android.view.View; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.text.BidiFormatter; +import androidx.core.text.TextDirectionHeuristicsCompat; +import androidx.preference.EditTextPreference; +import androidx.preference.PreferenceViewHolder; import com.android.messaging.R; import com.android.messaging.util.PhoneUtils; @@ -52,65 +56,41 @@ public class PhoneNumberPreference extends EditTextPreference { } @Override - protected void onBindView(final View view) { - // Show the preference value if it's set, or the default number if not. - // If we don't have a default, fall back to a static string (e.g. Unknown). + public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { + setOnBindEditTextListener(editText -> editText.setInputType(InputType.TYPE_CLASS_PHONE)); + super.onBindViewHolder(holder); + } + + @Nullable + @Override + public CharSequence getSummary() { String value = getText(); if (TextUtils.isEmpty(value)) { - value = mDefaultPhoneNumber; + value = mDefaultPhoneNumber; } final String displayValue = (!TextUtils.isEmpty(value)) ? PhoneUtils.get(mSubId).formatForDisplay(value) : getContext().getString(R.string.unknown_phone_number_pref_display_value); final BidiFormatter bidiFormatter = BidiFormatter.getInstance(); - final String phoneNumber = bidiFormatter.unicodeWrap - (displayValue, TextDirectionHeuristicsCompat.LTR); - // Set the value as the summary and let the superclass populate the views - setSummary(phoneNumber); - super.onBindView(view); + return bidiFormatter.unicodeWrap + (displayValue, TextDirectionHeuristicsCompat.LTR); } @Override - protected void onBindDialogView(final View view) { - super.onBindDialogView(view); - - final String value = getText(); - - // If the preference is empty, populate the EditText with the default number instead. - if (TextUtils.isEmpty(value) && !TextUtils.isEmpty(mDefaultPhoneNumber)) { - final BidiFormatter bidiFormatter = BidiFormatter.getInstance(); - final String phoneNumber = bidiFormatter.unicodeWrap - (PhoneUtils.get(mSubId).getCanonicalBySystemLocale(mDefaultPhoneNumber), - TextDirectionHeuristicsCompat.LTR); - getEditText().setText(phoneNumber); - } - getEditText().setInputType(InputType.TYPE_CLASS_PHONE); - } - - @Override - protected void onDialogClosed(final boolean positiveResult) { - if (positiveResult && mDefaultPhoneNumber != null) { - final String value = getEditText().getText().toString(); + public void setText(final String text) { + String newText = text; + if (mDefaultPhoneNumber != null) { final PhoneUtils phoneUtils = PhoneUtils.get(mSubId); - final String phoneNumber = phoneUtils.getCanonicalBySystemLocale(value); + final String phoneNumber = phoneUtils.getCanonicalBySystemLocale(text); final String defaultPhoneNumber = phoneUtils.getCanonicalBySystemLocale( mDefaultPhoneNumber); // If the new value is the default, clear the preference. if (phoneNumber.equals(defaultPhoneNumber)) { - setText(""); - return; + newText = ""; } } - super.onDialogClosed(positiveResult); - } - @Override - public void setText(final String text) { - super.setText(text); - - // EditTextPreference doesn't show the value on the preference view, but we do. - // We thus need to force a rebind of the view when a new value is set. - notifyChanged(); + super.setText(newText); } } diff --git a/src/com/android/messaging/ui/appsettings/SettingsActivity.java b/src/com/android/messaging/ui/appsettings/SettingsActivity.java index 3cc688f..bc97748 100644 --- a/src/com/android/messaging/ui/appsettings/SettingsActivity.java +++ b/src/com/android/messaging/ui/appsettings/SettingsActivity.java @@ -17,12 +17,8 @@ package com.android.messaging.ui.appsettings; -import android.app.Fragment; import android.content.Context; import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.core.app.NavUtils; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MenuItem; @@ -32,6 +28,11 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.core.app.NavUtils; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; + import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; import com.android.messaging.datamodel.binding.Binding; @@ -66,7 +67,7 @@ public class SettingsActivity extends BugleActionBarActivity { UIIntents.get().launchApplicationSettingsActivity(this, true /* topLevel */); finish(); } else { - getFragmentManager().beginTransaction() + getSupportFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()) .commit(); } @@ -91,7 +92,7 @@ public class SettingsActivity extends BugleActionBarActivity { public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding.bind(DataModel.get().createSettingsData(getActivity(), this)); - mBinding.getData().init(getLoaderManager(), mBinding); + mBinding.getData().init(LoaderManager.getInstance(this), mBinding); } @Override diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java index a540597..10dd213 100644 --- a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java +++ b/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,9 +17,13 @@ package com.android.messaging.ui.attachmentchooser; -import android.app.Fragment; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; + import com.android.messaging.R; import com.android.messaging.ui.BugleActionBarActivity; import com.android.messaging.ui.UIIntents; @@ -26,17 +31,19 @@ import com.android.messaging.ui.attachmentchooser.AttachmentChooserFragment.Atta import com.android.messaging.util.Assert; public class AttachmentChooserActivity extends BugleActionBarActivity implements - AttachmentChooserFragmentHost { + AttachmentChooserFragmentHost, FragmentOnAttachListener { @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getSupportFragmentManager().addFragmentOnAttachListener(this); setContentView(R.layout.attachment_chooser_activity); getSupportActionBar().setDisplayHomeAsUpEnabled(false); } @Override - public void onAttachFragment(final Fragment fragment) { + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull Fragment fragment) { if (fragment instanceof AttachmentChooserFragment) { final String conversationId = getIntent().getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID); @@ -53,4 +60,5 @@ public class AttachmentChooserActivity extends BugleActionBarActivity implements setResult(RESULT_OK); finish(); } + } diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java index 20bf72c..9117e43 100644 --- a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java +++ b/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java @@ -16,14 +16,10 @@ */ package com.android.messaging.ui.attachmentchooser; -import android.app.Fragment; import android.content.Context; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -32,6 +28,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.Fragment; + import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; import com.android.messaging.datamodel.MessagingContentProvider; @@ -80,7 +80,7 @@ public class AttachmentChooserFragment extends Fragment implements DraftMessageD } @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.attachment_chooser_menu, menu); } @@ -158,7 +158,7 @@ public class AttachmentChooserFragment extends Fragment implements DraftMessageD class AttachmentGridAdapter extends ArrayAdapter { public AttachmentGridAdapter(final Context context) { - super(context, R.layout.attachment_grid_item_view, new ArrayList()); + super(context, R.layout.attachment_grid_item_view, new ArrayList<>()); } public void onAttachmentsLoaded(final List attachments) { diff --git a/src/com/android/messaging/ui/contact/ContactPickerFragment.java b/src/com/android/messaging/ui/contact/ContactPickerFragment.java index b57edcb..f6dd62f 100644 --- a/src/com/android/messaging/ui/contact/ContactPickerFragment.java +++ b/src/com/android/messaging/ui/contact/ContactPickerFragment.java @@ -18,13 +18,9 @@ package com.android.messaging.ui.contact; import android.app.Activity; -import android.app.Fragment; import android.database.Cursor; import android.graphics.Rect; import android.os.Bundle; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.widget.Toolbar; -import androidx.appcompat.widget.Toolbar.OnMenuItemClickListener; import android.text.Editable; import android.text.InputType; import android.text.TextUtils; @@ -39,6 +35,14 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; +import androidx.appcompat.widget.Toolbar.OnMenuItemClickListener; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; + import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; import com.android.messaging.datamodel.action.ActionMonitor; @@ -129,7 +133,7 @@ public class ContactPickerFragment extends Fragment implements ContactPickerData if (ContactUtil.hasReadContactsPermission()) { mBinding.bind(DataModel.get().createContactPickerData(getActivity(), this)); - mBinding.getData().init(getLoaderManager(), mBinding); + mBinding.getData().init(LoaderManager.getInstance(this), mBinding); } } @@ -192,15 +196,9 @@ public class ContactPickerFragment extends Fragment implements ContactPickerData return view; } - /** - * {@inheritDoc} - * - * Called when the host activity has been created. At this point, the host activity should - * have set the contact picking mode for us so that we may update our visuals. - */ @Override - public void onActivityCreated(final Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); Assert.isTrue(mContactPickingMode != MODE_UNDEFINED); updateVisualsForContactPickingMode(false /* animate */); mHost.invalidateActionBar(); diff --git a/src/com/android/messaging/ui/conversation/ConversationActivity.java b/src/com/android/messaging/ui/conversation/ConversationActivity.java index dc95075..0934692 100644 --- a/src/com/android/messaging/ui/conversation/ConversationActivity.java +++ b/src/com/android/messaging/ui/conversation/ConversationActivity.java @@ -17,17 +17,17 @@ package com.android.messaging.ui.conversation; -import android.app.FragmentManager; -import android.app.FragmentTransaction; import android.content.Intent; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; +import android.text.TextUtils; +import android.view.MenuItem; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; -import android.text.TextUtils; -import android.view.MenuItem; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import com.android.messaging.R; import com.android.messaging.datamodel.MessagingContentProvider; @@ -227,12 +227,12 @@ public class ConversationActivity extends BugleActionBarActivity } private ContactPickerFragment getContactPicker() { - return (ContactPickerFragment) getFragmentManager().findFragmentByTag( + return (ContactPickerFragment) getSupportFragmentManager().findFragmentByTag( ContactPickerFragment.FRAGMENT_TAG); } private ConversationFragment getConversationFragment() { - return (ConversationFragment) getFragmentManager().findFragmentByTag( + return (ConversationFragment) getSupportFragmentManager().findFragmentByTag( ConversationFragment.FRAGMENT_TAG); } @@ -296,7 +296,7 @@ public class ConversationActivity extends BugleActionBarActivity final Intent intent = getIntent(); final String conversationId = mUiState.getConversationId(); - final FragmentManager fragmentManager = getFragmentManager(); + final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); final boolean needConversationFragment = mUiState.shouldShowConversationFragment(); diff --git a/src/com/android/messaging/ui/conversation/ConversationFastScroller.java b/src/com/android/messaging/ui/conversation/ConversationFastScroller.java index b60dff3..c785635 100644 --- a/src/com/android/messaging/ui/conversation/ConversationFastScroller.java +++ b/src/com/android/messaging/ui/conversation/ConversationFastScroller.java @@ -40,6 +40,7 @@ import android.view.ViewGroupOverlay; import android.widget.ImageView; import android.widget.TextView; + import com.android.messaging.R; import com.android.messaging.datamodel.data.ConversationMessageData; import com.android.messaging.ui.ConversationDrawables; diff --git a/src/com/android/messaging/ui/conversation/ConversationFragment.java b/src/com/android/messaging/ui/conversation/ConversationFragment.java index b6f8820..496b42d 100644 --- a/src/com/android/messaging/ui/conversation/ConversationFragment.java +++ b/src/com/android/messaging/ui/conversation/ConversationFragment.java @@ -19,11 +19,7 @@ package com.android.messaging.ui.conversation; import android.Manifest; import android.app.Activity; -import android.app.AlertDialog; import android.app.DownloadManager; -import android.app.Fragment; -import android.app.FragmentManager; -import android.app.FragmentTransaction; import android.content.BroadcastReceiver; import android.content.ClipData; import android.content.ClipboardManager; @@ -40,16 +36,6 @@ import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Parcelable; - -import androidx.annotation.NonNull; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.core.text.BidiFormatter; -import androidx.core.text.TextDirectionHeuristicsCompat; -import androidx.appcompat.app.ActionBar; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.RecyclerView.ViewHolder; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.view.ActionMode; @@ -63,6 +49,21 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.core.text.BidiFormatter; +import androidx.core.text.TextDirectionHeuristicsCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import androidx.loader.app.LoaderManager; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.ViewHolder; + import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; import com.android.messaging.datamodel.MessagingContentProvider; @@ -442,7 +443,7 @@ public class ConversationFragment extends Fragment implements ConversationDataLi // Delay showing the message list until the participant list is loaded. mRecyclerView.setVisibility(View.INVISIBLE); mBinding.ensureBound(); - mBinding.getData().init(getLoaderManager(), mBinding); + mBinding.getData().init(LoaderManager.getInstance(this), mBinding); // Build the input manager with all its required dependencies and pass it along to the // compose message view. @@ -678,7 +679,7 @@ public class ConversationFragment extends Fragment implements ConversationDataLi } @Override - public void onSaveInstanceState(final Bundle outState) { + public void onSaveInstanceState(@NonNull final Bundle outState) { super.onSaveInstanceState(outState); if (mListState != null) { outState.putParcelable(SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY, mListState); @@ -722,7 +723,8 @@ public class ConversationFragment extends Fragment implements ConversationDataLi } @Override - public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { + public void onCreateOptionsMenu(@NonNull final Menu menu, + @NonNull final MenuInflater inflater) { if (mHost.getActionMode() != null) { return; } @@ -979,7 +981,7 @@ public class ConversationFragment extends Fragment implements ConversationDataLi } @Override - public void onConfigurationChanged(final Configuration newConfig) { + public void onConfigurationChanged(@NonNull final Configuration newConfig) { super.onConfigurationChanged(newConfig); mRecyclerView.getItemAnimator().endAnimations(); } @@ -1178,7 +1180,7 @@ public class ConversationFragment extends Fragment implements ConversationDataLi ImeUtil.hideSoftInput(getActivity(), mComposeMessageView); } - final FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); + final FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); final EnterSelfPhoneNumberDialog dialog = EnterSelfPhoneNumberDialog .newInstance(getConversationSelfSubId()); dialog.setTargetFragment(this, 0/*requestCode*/); diff --git a/src/com/android/messaging/ui/conversation/ConversationInputManager.java b/src/com/android/messaging/ui/conversation/ConversationInputManager.java index 3d42d78..c5dd958 100644 --- a/src/com/android/messaging/ui/conversation/ConversationInputManager.java +++ b/src/com/android/messaging/ui/conversation/ConversationInputManager.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +16,13 @@ */ package com.android.messaging.ui.conversation; -import android.app.FragmentManager; import android.content.Context; import android.os.Bundle; -import androidx.appcompat.app.ActionBar; import android.widget.EditText; +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.FragmentManager; + import com.android.messaging.R; import com.android.messaging.datamodel.binding.BindingBase; import com.android.messaging.datamodel.binding.ImmutableBindingRef; diff --git a/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java b/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java index 4cf4d88..8404c1c 100644 --- a/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java +++ b/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java @@ -16,15 +16,17 @@ */ package com.android.messaging.ui.conversation; -import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.widget.EditText; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; + import com.android.messaging.R; import com.android.messaging.datamodel.ParticipantRefresh; import com.android.messaging.util.BuglePrefs; @@ -43,6 +45,7 @@ public class EnterSelfPhoneNumberDialog extends DialogFragment { return dialog; } + @NonNull @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final Context context = getActivity(); diff --git a/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java index fdf0d5a..25d0f89 100644 --- a/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java +++ b/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java @@ -18,15 +18,16 @@ package com.android.messaging.ui.conversationlist; import android.app.Activity; import android.app.AlertDialog; -import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; -import androidx.annotation.NonNull; import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.android.messaging.R; import com.android.messaging.datamodel.action.DeleteConversationAction; import com.android.messaging.datamodel.action.UpdateConversationArchiveStatusAction; @@ -48,30 +49,17 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import javax.annotation.Nullable; - /** * Base class for many Conversation List activities. This will handle the common actions of multi * select and common launching of intents. */ -public abstract class AbstractConversationListActivity extends BugleActionBarActivity +public abstract class AbstractConversationListActivity extends BugleActionBarActivity implements ConversationListFragmentHost, MultiSelectActionModeCallback.Listener { private static final int REQUEST_SET_DEFAULT_SMS_APP = 1; protected ConversationListFragment mConversationListFragment; - @Override - public void onAttachFragment(final Fragment fragment) { - Trace.beginSection("AbstractConversationListActivity.onAttachFragment"); - // Fragment could be debug dialog - if (fragment instanceof ConversationListFragment) { - mConversationListFragment = (ConversationListFragment) fragment; - mConversationListFragment.setHost(this); - } - Trace.endSection(); - } - @Override public void onBackPressed() { // If action mode is active dismiss it diff --git a/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java index 31ad047..bfc8476 100644 --- a/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java +++ b/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java @@ -18,14 +18,18 @@ package com.android.messaging.ui.conversationlist; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; +import android.view.MenuItem; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; -import android.view.MenuItem; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; import com.android.messaging.R; -public class ArchivedConversationListActivity extends AbstractConversationListActivity { +public class ArchivedConversationListActivity extends AbstractConversationListActivity + implements FragmentOnAttachListener { @Override protected void onCreate(final Bundle savedInstanceState) { @@ -33,7 +37,8 @@ public class ArchivedConversationListActivity extends AbstractConversationListAc final ConversationListFragment fragment = ConversationListFragment.createArchivedConversationListFragment(); - getFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); + getSupportFragmentManager().addFragmentOnAttachListener(this); + getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); invalidateActionBar(); } @@ -77,4 +82,13 @@ public class ArchivedConversationListActivity extends AbstractConversationListAc public boolean isSwipeAnimatable() { return false; } + + @Override + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull Fragment fragment) { + if (fragment instanceof ConversationListFragment) { + mConversationListFragment = (ConversationListFragment) fragment; + mConversationListFragment.setHost(this); + } + } } diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java index 5ea0204..f15b4b3 100644 --- a/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java +++ b/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java @@ -19,22 +19,26 @@ package com.android.messaging.ui.conversationlist; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; -import android.view.Menu; -import android.view.MenuItem; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; import com.android.messaging.R; import com.android.messaging.ui.UIIntents; import com.android.messaging.util.Trace; -public class ConversationListActivity extends AbstractConversationListActivity { +public class ConversationListActivity extends AbstractConversationListActivity implements FragmentOnAttachListener { @Override protected void onCreate(final Bundle savedInstanceState) { Trace.beginSection("ConversationListActivity.onCreate"); setTheme(R.style.BugleTheme_ConversationListActivity); super.onCreate(savedInstanceState); + getSupportFragmentManager().addFragmentOnAttachListener(this); setContentView(R.layout.conversation_list_activity); Trace.endSection(); invalidateActionBar(); @@ -128,7 +132,7 @@ public class ConversationListActivity extends AbstractConversationListActivity { public void onWindowFocusChanged(final boolean hasFocus) { super.onWindowFocusChanged(hasFocus); final ConversationListFragment conversationListFragment = - (ConversationListFragment) getFragmentManager().findFragmentById( + (ConversationListFragment) getSupportFragmentManager().findFragmentById( R.id.conversation_list_fragment); // When the screen is turned on, the last used activity gets resumed, but it gets // window focus only after the lock screen is unlocked. @@ -136,4 +140,13 @@ public class ConversationListActivity extends AbstractConversationListActivity { conversationListFragment.setScrolledToNewestConversationIfNeeded(); } } + + @Override + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull Fragment fragment) { + if (fragment instanceof ConversationListFragment) { + mConversationListFragment = (ConversationListFragment) fragment; + mConversationListFragment.setHost(this); + } + } } diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java b/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java index 89d05f0..4e3a9c6 100644 --- a/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java +++ b/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java @@ -17,19 +17,12 @@ package com.android.messaging.ui.conversationlist; import android.app.Activity; -import android.app.Fragment; import android.content.Context; import android.database.Cursor; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; - -import androidx.annotation.NonNull; -import androidx.core.view.ViewCompat; -import androidx.core.view.ViewGroupCompat; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -42,6 +35,14 @@ import android.view.accessibility.AccessibilityManager; import android.widget.AbsListView; import android.widget.ImageView; +import androidx.annotation.NonNull; +import androidx.core.view.ViewCompat; +import androidx.core.view.ViewGroupCompat; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.android.messaging.R; import com.android.messaging.annotation.VisibleForAnimation; import com.android.messaging.datamodel.DataModel; @@ -127,7 +128,7 @@ public class ConversationListFragment extends Fragment implements ConversationLi @Override public void onCreate(final Bundle bundle) { super.onCreate(bundle); - mListBinding.getData().init(getLoaderManager(), mListBinding); + mListBinding.getData().init(LoaderManager.getInstance(this), mListBinding); mAdapter = new ConversationListAdapter(getActivity(), null, this); } @@ -244,8 +245,8 @@ public class ConversationListFragment extends Fragment implements ConversationLi } @Override - public void onAttach(final Activity activity) { - super.onAttach(activity); + public void onAttach(@NonNull final Context context) { + super.onAttach(context); if (VERBOSE) { LogUtil.v(LogUtil.BUGLE_TAG, "Attaching List"); } @@ -254,12 +255,12 @@ public class ConversationListFragment extends Fragment implements ConversationLi mArchiveMode = arguments.getBoolean(BUNDLE_ARCHIVED_MODE, false); mForwardMessageMode = arguments.getBoolean(BUNDLE_FORWARD_MESSAGE_MODE, false); } - mListBinding.bind(DataModel.get().createConversationListData(activity, this, mArchiveMode)); + mListBinding.bind(DataModel.get().createConversationListData(context, this, mArchiveMode)); } @Override - public void onSaveInstanceState(final Bundle outState) { + public void onSaveInstanceState(@NonNull final Bundle outState) { super.onSaveInstanceState(outState); if (mListState != null) { outState.putParcelable(SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY, mListState); @@ -305,7 +306,7 @@ public class ConversationListFragment extends Fragment implements ConversationLi } @Override - public void onPrepareOptionsMenu(final Menu menu) { + public void onPrepareOptionsMenu(@NonNull final Menu menu) { super.onPrepareOptionsMenu(menu); final MenuItem startNewConversationMenuItem = menu.findItem(R.id.action_start_new_conversation); diff --git a/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java b/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java index 96ca085..477d72b 100644 --- a/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java +++ b/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,36 +17,41 @@ package com.android.messaging.ui.conversationlist; -import android.app.Fragment; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; + import com.android.messaging.datamodel.data.ConversationListData; import com.android.messaging.datamodel.data.ConversationListItemData; import com.android.messaging.datamodel.data.MessageData; import com.android.messaging.ui.BaseBugleActivity; import com.android.messaging.ui.UIIntents; import com.android.messaging.ui.conversationlist.ConversationListFragment.ConversationListFragmentHost; -import com.android.messaging.util.Assert; /** * An activity that lets the user forward a SMS/MMS message by picking from a conversation in the * conversation list. */ public class ForwardMessageActivity extends BaseBugleActivity - implements ConversationListFragmentHost { + implements ConversationListFragmentHost, FragmentOnAttachListener { private MessageData mDraftMessage; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getSupportFragmentManager().addFragmentOnAttachListener(this); final ConversationListFragment fragment = ConversationListFragment.createForwardMessageConversationListFragment(); - getFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); + getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit(); mDraftMessage = getIntent().getParcelableExtra(UIIntents.UI_INTENT_EXTRA_DRAFT_DATA); } @Override - public void onAttachFragment(final Fragment fragment) { + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull Fragment fragment) { if (fragment instanceof ConversationListFragment) { final ConversationListFragment clf = (ConversationListFragment) fragment; clf.setHost(this); diff --git a/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java b/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java index 9ac6e6b..1cc0c15 100644 --- a/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java +++ b/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +17,6 @@ package com.android.messaging.ui.conversationlist; -import android.app.Fragment; import android.content.ContentResolver; import android.content.Intent; import android.media.MediaMetadataRetriever; @@ -24,7 +24,11 @@ import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; +import androidx.annotation.NonNull; import androidx.collection.ArrayMap; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentOnAttachListener; import com.android.messaging.Factory; import com.android.messaging.datamodel.data.ConversationListItemData; @@ -48,7 +52,7 @@ import java.util.ArrayList; import java.util.Map; public class ShareIntentActivity extends BaseBugleActivity implements - ShareIntentFragment.HostInterface { + ShareIntentFragment.HostInterface, FragmentOnAttachListener { private MessageData mDraftMessage; @@ -74,11 +78,13 @@ public class ShareIntentActivity extends BaseBugleActivity implements finish(); return; } - new ShareIntentFragment().show(getFragmentManager(), "ShareIntentFragment"); + getSupportFragmentManager().addFragmentOnAttachListener(this); + new ShareIntentFragment().show(getSupportFragmentManager(), "ShareIntentFragment"); } @Override - public void onAttachFragment(final Fragment fragment) { + public void onAttachFragment(@NonNull FragmentManager fragmentManager, + @NonNull Fragment fragment) { final Intent intent = getIntent(); final String action = intent.getAction(); diff --git a/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java b/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java index a99e46f..62ce642 100644 --- a/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java +++ b/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java @@ -20,10 +20,14 @@ import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; -import android.app.DialogFragment; +import android.content.Context; import android.content.DialogInterface; import android.database.Cursor; import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import androidx.loader.app.LoaderManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; @@ -61,6 +65,7 @@ public class ShareIntentFragment extends DialogFragment implements ConversationL /** * {@inheritDoc} from Fragment */ + @NonNull @Override public Dialog onCreateDialog(final Bundle bundle) { final Activity activity = getActivity(); @@ -79,7 +84,7 @@ public class ShareIntentFragment extends DialogFragment implements ConversationL ViewGroup.LayoutParams.WRAP_CONTENT); } }; - mListBinding.getData().init(getLoaderManager(), mListBinding); + mListBinding.getData().init(LoaderManager.getInstance(this), mListBinding); mAdapter = new ShareIntentAdapter(activity, null, this); mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list); mRecyclerView.setLayoutManager(manager); @@ -101,7 +106,7 @@ public class ShareIntentFragment extends DialogFragment implements ConversationL } @Override - public void onDismiss(DialogInterface dialog) { + public void onDismiss(@NonNull DialogInterface dialog) { if (!mDismissed) { final Activity activity = getActivity(); if (activity != null) { @@ -120,12 +125,12 @@ public class ShareIntentFragment extends DialogFragment implements ConversationL } @Override - public void onAttach(final Activity activity) { - super.onAttach(activity); - if (activity instanceof HostInterface) { - mHost = (HostInterface) activity; + public void onAttach(@NonNull final Context context) { + super.onAttach(context); + if (context instanceof HostInterface) { + mHost = (HostInterface) context; } - mListBinding.bind(DataModel.get().createConversationListData(activity, this, false)); + mListBinding.bind(DataModel.get().createConversationListData(context, this, false)); } @Override diff --git a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java b/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java index 460c3c1..b086c21 100644 --- a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java +++ b/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java @@ -17,11 +17,11 @@ package com.android.messaging.ui.conversationsettings; -import android.app.Fragment; import android.os.Bundle; import android.view.MenuItem; import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import com.android.messaging.R; import com.android.messaging.ui.BugleActionBarActivity; @@ -42,7 +42,7 @@ public class PeopleAndOptionsActivity extends BugleActionBarActivity { } @Override - public void onAttachFragment(final Fragment fragment) { + public void onAttachFragment(@NonNull final Fragment fragment) { if (fragment instanceof PeopleAndOptionsFragment) { final String conversationId = getIntent().getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID); diff --git a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java b/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java index 8ec63fb..e6c59cc 100644 --- a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java +++ b/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java @@ -18,7 +18,6 @@ package com.android.messaging.ui.conversationsettings; import android.app.Activity; import android.app.AlertDialog; -import android.app.Fragment; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; @@ -36,6 +35,8 @@ import android.widget.ListView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; @@ -72,7 +73,7 @@ public class PeopleAndOptionsFragment extends Fragment @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mBinding.getData().init(getLoaderManager(), mBinding); + mBinding.getData().init(LoaderManager.getInstance(this), mBinding); } @Override diff --git a/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java b/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java index c36467c..a8083bc 100644 --- a/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java +++ b/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,11 +16,12 @@ */ package com.android.messaging.ui.mediapicker; -import android.app.Fragment; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import androidx.fragment.app.Fragment; + import com.android.messaging.Factory; import com.android.messaging.datamodel.data.PendingAttachmentData; import com.android.messaging.ui.UIIntents; diff --git a/src/com/android/messaging/ui/mediapicker/MediaChooser.java b/src/com/android/messaging/ui/mediapicker/MediaChooser.java index d78760d..9209b98 100644 --- a/src/com/android/messaging/ui/mediapicker/MediaChooser.java +++ b/src/com/android/messaging/ui/mediapicker/MediaChooser.java @@ -17,10 +17,8 @@ package com.android.messaging.ui.mediapicker; -import android.app.FragmentManager; import android.content.Context; import android.content.Intent; -import androidx.appcompat.app.ActionBar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -28,6 +26,8 @@ import android.view.MenuItem; import android.view.ViewGroup; import android.widget.ImageButton; +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.FragmentManager; import com.android.messaging.R; import com.android.messaging.datamodel.binding.ImmutableBindingRef; import com.android.messaging.datamodel.data.MediaPickerData; diff --git a/src/com/android/messaging/ui/mediapicker/MediaPicker.java b/src/com/android/messaging/ui/mediapicker/MediaPicker.java index 2d81584..2642feb 100644 --- a/src/com/android/messaging/ui/mediapicker/MediaPicker.java +++ b/src/com/android/messaging/ui/mediapicker/MediaPicker.java @@ -18,16 +18,10 @@ package com.android.messaging.ui.mediapicker; import android.app.Activity; -import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; - -import androidx.annotation.NonNull; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; -import androidx.appcompat.app.ActionBar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -37,6 +31,13 @@ import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.LinearLayout; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.Fragment; +import androidx.loader.app.LoaderManager; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.android.messaging.Factory; import com.android.messaging.R; import com.android.messaging.datamodel.DataModel; @@ -201,7 +202,7 @@ public class MediaPicker extends Fragment implements DraftMessageSubscriptionDat @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mBinding.getData().init(getLoaderManager()); + mBinding.getData().init(LoaderManager.getInstance(this)); } @Override @@ -441,7 +442,7 @@ public class MediaPicker extends Fragment implements DraftMessageSubscriptionDat if (mBinding.isBound() && getActivity() != null) { mBinding.unbind(); mBinding.bind(DataModel.get().createMediaPickerData(getActivity())); - mBinding.getData().init(getLoaderManager()); + mBinding.getData().init(LoaderManager.getInstance(this)); } } @@ -640,7 +641,8 @@ public class MediaPicker extends Fragment implements DraftMessageSubscriptionDat } @Override - public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { + public void onCreateOptionsMenu(@NonNull final Menu menu, + @NonNull final MenuInflater inflater) { if (mSelectedChooser != null) { mSelectedChooser.onCreateOptionsMenu(inflater, menu); } diff --git a/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java b/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java index bcb2f5c..0917ad6 100644 --- a/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java +++ b/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 The Android Open Source Project + * Copyright (C) 2024 The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,11 +18,12 @@ package com.android.messaging.util; import android.app.Activity; -import android.app.Fragment; import android.content.ActivityNotFoundException; import android.content.Intent; import android.view.View; +import androidx.fragment.app.Fragment; + import com.android.messaging.R; import com.android.messaging.ui.SnackBar; import com.android.messaging.ui.UIIntents;