mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
split off AttachContactActivity from BlockedAndShareContactsActivity
This commit is contained in:
@@ -273,6 +273,10 @@
|
||||
android:clearTaskOnLaunch="true"
|
||||
android:finishOnTaskLaunch="true" />
|
||||
|
||||
<activity android:name=".AttachContactActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".BlockedAndShareContactsActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcContactsLoader;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.contacts.ContactSelectionListAdapter;
|
||||
import org.thoughtcrime.securesms.contacts.ContactSelectionListItem;
|
||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class AttachContactActivity extends PassphraseRequiredActionBarActivity {
|
||||
|
||||
public static final String SHOW_ONLY_BLOCKED_EXTRA = "show_only_blocked";
|
||||
public static final String SHARE_CONTACT_NAME_EXTRA = "share_contact_name";
|
||||
public static final String SHARE_CONTACT_MAIL_EXTRA = "share_contact_mail";
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle, boolean ready) {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
boolean showOnlyBlocked = getIntent().getBooleanExtra(SHOW_ONLY_BLOCKED_EXTRA, false);
|
||||
getSupportActionBar().setTitle(showOnlyBlocked ? R.string.pref_blocked_contacts : R.string.contacts_headline);
|
||||
initFragment(android.R.id.content, new AttachContactFragment(), null, getIntent().getExtras());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home: finish(); return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static class AttachContactFragment
|
||||
extends Fragment
|
||||
implements LoaderManager.LoaderCallbacks<DcContactsLoader.Ret>,
|
||||
DcEventCenter.DcEventDelegate, ContactSelectionListAdapter.ItemClickListener {
|
||||
|
||||
|
||||
private RecyclerView recyclerView;
|
||||
private TextView emptyStateView;
|
||||
|
||||
private boolean showOnlyBlocked;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
|
||||
View view = inflater.inflate(R.layout.contact_selection_list_fragment, container, false);
|
||||
recyclerView = ViewUtil.findById(view, R.id.recycler_view);
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
emptyStateView = ViewUtil.findById(view, android.R.id.empty);
|
||||
emptyStateView.setText(R.string.blocked_empty_hint);
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
showOnlyBlocked = getArguments().getBoolean(SHOW_ONLY_BLOCKED_EXTRA, false);
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle bundle) {
|
||||
super.onActivityCreated(bundle);
|
||||
initializeAdapter();
|
||||
}
|
||||
|
||||
private void initializeAdapter() {
|
||||
ContactSelectionListAdapter adapter = new ContactSelectionListAdapter(getActivity(),
|
||||
GlideApp.with(this),
|
||||
this,
|
||||
false,
|
||||
false);
|
||||
recyclerView.setAdapter(adapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Loader<DcContactsLoader.Ret> onCreateLoader(int id, Bundle args) {
|
||||
return new DcContactsLoader(getActivity(), showOnlyBlocked ? -1 : DcContext.DC_GCL_ADD_SELF, null, false, showOnlyBlocked);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<DcContactsLoader.Ret> loader, DcContactsLoader.Ret data) {
|
||||
ContactSelectionListAdapter adapter = getContactSelectionListAdapter();
|
||||
if (adapter != null) {
|
||||
adapter.changeData(data);
|
||||
if (emptyStateView != null) {
|
||||
emptyStateView.setVisibility(adapter.getItemCount() > 0 ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<DcContactsLoader.Ret> loader) {
|
||||
getContactSelectionListAdapter().changeData(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleEvent(@NonNull DcEvent event) {
|
||||
if (event.getId()==DcContext.DC_EVENT_CONTACTS_CHANGED) {
|
||||
restartLoader();
|
||||
}
|
||||
}
|
||||
|
||||
private void restartLoader() {
|
||||
getLoaderManager().restartLoader(0, null, AttachContactFragment.this);
|
||||
}
|
||||
|
||||
private ContactSelectionListAdapter getContactSelectionListAdapter() {
|
||||
return (ContactSelectionListAdapter) recyclerView.getAdapter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(ContactSelectionListItem item, boolean handleActionMode) {
|
||||
if(showOnlyBlocked) {
|
||||
new AlertDialog.Builder(getActivity())
|
||||
.setMessage(R.string.ask_unblock_contact)
|
||||
.setCancelable(true)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(R.string.menu_unblock_contact, (dialog, which) -> unblockContact(item.getContactId())).show();
|
||||
} else {
|
||||
shareContact(item.getName(), item.getNumber());
|
||||
}
|
||||
}
|
||||
|
||||
private void unblockContact(int contactId) {
|
||||
DcContext dcContext = DcHelper.getContext(getContext());
|
||||
dcContext.blockContact(contactId, 0);
|
||||
restartLoader();
|
||||
}
|
||||
|
||||
private void shareContact(String name, String mail) {
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(AttachContactActivity.SHARE_CONTACT_NAME_EXTRA, name);
|
||||
intent.putExtra(AttachContactActivity.SHARE_CONTACT_MAIL_EXTRA, mail);
|
||||
FragmentActivity activity = Objects.requireNonNull(getActivity());
|
||||
activity.setResult(RESULT_OK, intent);
|
||||
activity.finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemLongClick(ContactSelectionListItem view) {
|
||||
// Not needed
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user