Messaging: Convert further parts to androidx

CursorLoader, LoaderManager, Preferences, Fragments, ...

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