2018-07-30 04:07:02 +02:00
|
|
|
package org.telegram.ui;
|
|
|
|
|
|
|
|
import android.content.ContentValues;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.res.Configuration;
|
|
|
|
import android.graphics.Canvas;
|
|
|
|
import android.graphics.PorterDuff;
|
|
|
|
import android.graphics.PorterDuffColorFilter;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.provider.ContactsContract;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import android.util.TypedValue;
|
|
|
|
import android.view.Gravity;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.view.ViewTreeObserver;
|
|
|
|
import android.widget.FrameLayout;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.TextView;
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
|
|
import org.telegram.messenger.ApplicationLoader;
|
|
|
|
import org.telegram.messenger.ContactsController;
|
|
|
|
import org.telegram.messenger.FileLog;
|
|
|
|
import org.telegram.messenger.LocaleController;
|
|
|
|
import org.telegram.messenger.R;
|
|
|
|
import org.telegram.messenger.browser.Browser;
|
|
|
|
import org.telegram.messenger.support.widget.LinearLayoutManager;
|
|
|
|
import org.telegram.messenger.support.widget.RecyclerView;
|
|
|
|
import org.telegram.tgnet.TLRPC;
|
|
|
|
import org.telegram.ui.ActionBar.ActionBar;
|
|
|
|
import org.telegram.ui.ActionBar.AlertDialog;
|
|
|
|
import org.telegram.ui.ActionBar.BaseFragment;
|
|
|
|
import org.telegram.ui.ActionBar.Theme;
|
|
|
|
import org.telegram.ui.ActionBar.ThemeDescription;
|
|
|
|
import org.telegram.ui.Cells.DividerCell;
|
|
|
|
import org.telegram.ui.Cells.EmptyCell;
|
|
|
|
import org.telegram.ui.Cells.ShadowSectionCell;
|
|
|
|
import org.telegram.ui.Components.AvatarDrawable;
|
|
|
|
import org.telegram.ui.Components.BackupImageView;
|
|
|
|
import org.telegram.ui.Components.CheckBoxSquare;
|
|
|
|
import org.telegram.ui.Components.LayoutHelper;
|
|
|
|
import org.telegram.ui.Components.RecyclerListView;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
public class PhonebookShareActivity extends BaseFragment {
|
|
|
|
|
|
|
|
public class TextCheckBoxCell extends FrameLayout {
|
|
|
|
|
|
|
|
private TextView textView;
|
|
|
|
private TextView valueTextView;
|
|
|
|
private ImageView imageView;
|
|
|
|
private CheckBoxSquare checkBox;
|
|
|
|
|
|
|
|
public TextCheckBoxCell(Context context) {
|
|
|
|
super(context);
|
|
|
|
|
|
|
|
textView = new TextView(context);
|
|
|
|
textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
|
|
|
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
|
|
|
|
textView.setSingleLine(false);
|
|
|
|
textView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP);
|
|
|
|
textView.setEllipsize(TextUtils.TruncateAt.END);
|
|
|
|
addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? (isImport ? 17 : 64) : 71, 10, LocaleController.isRTL ? 71 : (isImport ? 17 : 64), 0));
|
|
|
|
|
|
|
|
valueTextView = new TextView(context);
|
|
|
|
valueTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2));
|
|
|
|
valueTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
|
|
|
|
valueTextView.setLines(1);
|
|
|
|
valueTextView.setMaxLines(1);
|
|
|
|
valueTextView.setSingleLine(true);
|
|
|
|
valueTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT);
|
|
|
|
addView(valueTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT, LocaleController.isRTL ? (isImport ? 17 : 64) : 71, 35, LocaleController.isRTL ? 71 : (isImport ? 17 : 64), 0));
|
|
|
|
|
|
|
|
imageView = new ImageView(context);
|
|
|
|
imageView.setScaleType(ImageView.ScaleType.CENTER);
|
|
|
|
imageView.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_windowBackgroundWhiteGrayIcon), PorterDuff.Mode.MULTIPLY));
|
|
|
|
addView(imageView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 0 : 16, 20, LocaleController.isRTL ? 16 : 0, 0));
|
|
|
|
|
|
|
|
if (!isImport) {
|
|
|
|
checkBox = new CheckBoxSquare(context, false);
|
|
|
|
checkBox.setDuplicateParentStateEnabled(false);
|
|
|
|
checkBox.setFocusable(false);
|
|
|
|
checkBox.setFocusableInTouchMode(false);
|
|
|
|
checkBox.setClickable(false);
|
|
|
|
addView(checkBox, LayoutHelper.createFrame(18, 18, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.CENTER_VERTICAL, 19, 0, 19, 0));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void invalidate() {
|
|
|
|
super.invalidate();
|
|
|
|
if (checkBox != null) {
|
|
|
|
checkBox.invalidate();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
|
|
measureChildWithMargins(textView, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
|
|
|
measureChildWithMargins(valueTextView, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
|
|
|
measureChildWithMargins(imageView, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
|
|
|
if (checkBox != null) {
|
|
|
|
measureChildWithMargins(checkBox, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
|
|
|
}
|
|
|
|
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), Math.max(AndroidUtilities.dp(64), textView.getMeasuredHeight() + valueTextView.getMeasuredHeight() + AndroidUtilities.dp(10 + 10)));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
|
|
super.onLayout(changed, left, top, right, bottom);
|
|
|
|
int y = textView.getMeasuredHeight() + AndroidUtilities.dp(10 + 3);
|
|
|
|
valueTextView.layout(valueTextView.getLeft(), y, valueTextView.getRight(), y + valueTextView.getMeasuredHeight());
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setVCardItem(AndroidUtilities.VcardItem item, int icon) {
|
|
|
|
textView.setText(item.getValue(true));
|
|
|
|
valueTextView.setText(item.getType());
|
|
|
|
if (checkBox != null) {
|
|
|
|
checkBox.setChecked(item.checked, false);
|
|
|
|
}
|
|
|
|
if (icon != 0) {
|
|
|
|
imageView.setImageResource(icon);
|
|
|
|
} else {
|
|
|
|
imageView.setImageDrawable(null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setChecked(boolean checked) {
|
|
|
|
if (checkBox != null) {
|
|
|
|
checkBox.setChecked(checked, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isChecked() {
|
|
|
|
return checkBox != null && checkBox.isChecked();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private RecyclerListView listView;
|
|
|
|
private ListAdapter adapter;
|
|
|
|
private LinearLayoutManager layoutManager;
|
|
|
|
private PhonebookSelectActivity.PhonebookSelectActivityDelegate delegate;
|
|
|
|
private BackupImageView avatarImage;
|
|
|
|
private TextView nameTextView;
|
|
|
|
private View extraHeightView;
|
|
|
|
private View shadowView;
|
|
|
|
private FrameLayout bottomLayout;
|
|
|
|
private TextView shareTextView;
|
|
|
|
|
|
|
|
private int extraHeight;
|
|
|
|
|
|
|
|
private int rowCount;
|
|
|
|
private int overscrollRow;
|
|
|
|
private int emptyRow;
|
|
|
|
private int phoneStartRow;
|
|
|
|
private int phoneEndRow;
|
|
|
|
private int phoneDividerRow;
|
|
|
|
private int vcardStartRow;
|
|
|
|
private int vcardEndRow;
|
|
|
|
private int detailRow;
|
|
|
|
|
|
|
|
private boolean isImport;
|
|
|
|
|
|
|
|
private ArrayList<AndroidUtilities.VcardItem> other = new ArrayList<>();
|
|
|
|
private ArrayList<AndroidUtilities.VcardItem> phones = new ArrayList<>();
|
|
|
|
private TLRPC.User currentUser;
|
|
|
|
|
|
|
|
public PhonebookShareActivity(ContactsController.Contact contact, Uri uri, File file, String name) {
|
|
|
|
super();
|
|
|
|
ArrayList<TLRPC.User> result = null;
|
|
|
|
ArrayList<AndroidUtilities.VcardItem> items = new ArrayList<>();
|
|
|
|
if (uri != null) {
|
|
|
|
result = AndroidUtilities.loadVCardFromStream(uri, currentAccount, false, items, name);
|
|
|
|
} else if (file != null) {
|
|
|
|
result = AndroidUtilities.loadVCardFromStream(Uri.fromFile(file), currentAccount, false, items, name);
|
|
|
|
file.delete();
|
|
|
|
isImport = true;
|
|
|
|
} else if (contact.key != null) {
|
|
|
|
uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, contact.key);
|
|
|
|
result = AndroidUtilities.loadVCardFromStream(uri, currentAccount, true, items, name);
|
|
|
|
} else {
|
|
|
|
currentUser = contact.user;
|
|
|
|
AndroidUtilities.VcardItem item = new AndroidUtilities.VcardItem();
|
|
|
|
item.type = 0;
|
|
|
|
item.vcardData.add(item.fullData = "TEL;MOBILE:+" + currentUser.phone);
|
|
|
|
phones.add(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (result != null) {
|
|
|
|
for (int a = 0; a < items.size(); a++) {
|
|
|
|
AndroidUtilities.VcardItem item = items.get(a);
|
|
|
|
if (item.type == 0) {
|
|
|
|
boolean exists = false;
|
|
|
|
for (int b = 0; b < phones.size(); b++) {
|
|
|
|
if (phones.get(b).getValue(false).equals(item.getValue(false))) {
|
|
|
|
exists = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (exists) {
|
|
|
|
item.checked = false;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
phones.add(item);
|
|
|
|
} else {
|
|
|
|
other.add(item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (result != null && !result.isEmpty()) {
|
|
|
|
currentUser = result.get(0);
|
|
|
|
if (contact != null && contact.user != null) {
|
|
|
|
currentUser.photo = contact.user.photo;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean onFragmentCreate() {
|
|
|
|
super.onFragmentCreate();
|
|
|
|
if (currentUser == null) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
rowCount = 0;
|
|
|
|
overscrollRow = rowCount++;
|
|
|
|
emptyRow = rowCount++;
|
|
|
|
if (phones.isEmpty()) {
|
|
|
|
phoneStartRow = -1;
|
|
|
|
phoneEndRow = -1;
|
|
|
|
} else {
|
|
|
|
phoneStartRow = rowCount;
|
|
|
|
rowCount += phones.size();
|
|
|
|
phoneEndRow = rowCount;
|
|
|
|
}
|
|
|
|
if (other.isEmpty()) {
|
|
|
|
phoneDividerRow = -1;
|
|
|
|
vcardStartRow = -1;
|
|
|
|
vcardEndRow = -1;
|
|
|
|
} else {
|
|
|
|
if (phones.isEmpty()) {
|
|
|
|
phoneDividerRow = -1;
|
|
|
|
} else {
|
|
|
|
phoneDividerRow = rowCount++;
|
|
|
|
}
|
|
|
|
vcardStartRow = rowCount;
|
|
|
|
rowCount += other.size();
|
|
|
|
vcardEndRow = rowCount;
|
|
|
|
}
|
|
|
|
detailRow = rowCount++;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public View createView(Context context) {
|
|
|
|
actionBar.setBackgroundColor(Theme.getColor(Theme.key_avatar_backgroundActionBarBlue));
|
|
|
|
actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_avatar_actionBarSelectorBlue), false);
|
|
|
|
actionBar.setItemsColor(Theme.getColor(Theme.key_avatar_actionBarIconBlue), false);
|
|
|
|
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
|
|
|
actionBar.setAddToContainer(false);
|
|
|
|
extraHeight = 88;
|
|
|
|
if (AndroidUtilities.isTablet()) {
|
|
|
|
actionBar.setOccupyStatusBar(false);
|
|
|
|
}
|
|
|
|
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
|
|
|
|
@Override
|
|
|
|
public void onItemClick(int id) {
|
|
|
|
if (id == -1) {
|
|
|
|
finishFragment();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
fragmentView = new FrameLayout(context) {
|
|
|
|
@Override
|
|
|
|
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
|
|
|
|
if (child == listView) {
|
|
|
|
boolean result = super.drawChild(canvas, child, drawingTime);
|
|
|
|
if (parentLayout != null) {
|
|
|
|
int actionBarHeight = 0;
|
|
|
|
int childCount = getChildCount();
|
|
|
|
for (int a = 0; a < childCount; a++) {
|
|
|
|
View view = getChildAt(a);
|
|
|
|
if (view == child) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (view instanceof ActionBar && view.getVisibility() == VISIBLE) {
|
|
|
|
if (((ActionBar) view).getCastShadows()) {
|
|
|
|
actionBarHeight = view.getMeasuredHeight();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
parentLayout.drawHeaderShadow(canvas, actionBarHeight);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
} else {
|
|
|
|
return super.drawChild(canvas, child, drawingTime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
|
|
|
|
FrameLayout frameLayout = (FrameLayout) fragmentView;
|
|
|
|
|
|
|
|
listView = new RecyclerListView(context);
|
|
|
|
listView.setVerticalScrollBarEnabled(false);
|
|
|
|
listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) {
|
|
|
|
@Override
|
|
|
|
public boolean supportsPredictiveItemAnimations() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
listView.setGlowColor(Theme.getColor(Theme.key_avatar_backgroundActionBarBlue));
|
|
|
|
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, 0, 0, 0, 48));
|
|
|
|
listView.setAdapter(new ListAdapter(context));
|
|
|
|
listView.setItemAnimator(null);
|
|
|
|
listView.setLayoutAnimation(null);
|
2019-01-23 18:03:33 +01:00
|
|
|
listView.setOnItemClickListener((view, position) -> {
|
|
|
|
final AndroidUtilities.VcardItem item;
|
|
|
|
if (position >= phoneStartRow && position < phoneEndRow) {
|
|
|
|
item = phones.get(position - phoneStartRow);
|
|
|
|
} else if (position >= vcardStartRow && position < vcardEndRow) {
|
|
|
|
item = other.get(position - vcardStartRow);
|
|
|
|
} else {
|
|
|
|
item = null;
|
|
|
|
}
|
|
|
|
if (item == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (isImport) {
|
|
|
|
if (item.type == 0) {
|
|
|
|
try {
|
|
|
|
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + item.getValue(false)));
|
|
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
getParentActivity().startActivityForResult(intent, 500);
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e(e);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
} else if (item.type == 1) {
|
|
|
|
Browser.openUrl(getParentActivity(), "mailto:" + item.getValue(false));
|
|
|
|
} else if (item.type == 3) {
|
|
|
|
String url = item.getValue(false);
|
|
|
|
if (!url.startsWith("http")) {
|
|
|
|
url = "http://" + url;
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
Browser.openUrl(getParentActivity(), url);
|
2018-07-30 04:07:02 +02:00
|
|
|
} else {
|
2019-01-23 18:03:33 +01:00
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
|
|
|
builder.setItems(new CharSequence[]{LocaleController.getString("Copy", R.string.Copy)}, (dialogInterface, i) -> {
|
2018-07-30 04:07:02 +02:00
|
|
|
if (i == 0) {
|
|
|
|
try {
|
|
|
|
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
|
|
|
android.content.ClipData clip = android.content.ClipData.newPlainText("label", item.getValue(false));
|
|
|
|
clipboard.setPrimaryClip(clip);
|
2019-01-23 18:03:33 +01:00
|
|
|
Toast.makeText(getParentActivity(), LocaleController.getString("TextCopied", R.string.TextCopied), Toast.LENGTH_SHORT).show();
|
2018-07-30 04:07:02 +02:00
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e(e);
|
|
|
|
}
|
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
});
|
|
|
|
showDialog(builder.create());
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
item.checked = !item.checked;
|
|
|
|
if (position >= phoneStartRow && position < phoneEndRow) {
|
|
|
|
boolean hasChecked = false;
|
|
|
|
for (int a = 0; a < phones.size(); a++) {
|
|
|
|
if (phones.get(a).checked) {
|
|
|
|
hasChecked = true;
|
|
|
|
break;
|
|
|
|
}
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
bottomLayout.setEnabled(hasChecked);
|
|
|
|
shareTextView.setAlpha(hasChecked ? 1.0f : 0.5f);
|
|
|
|
}
|
|
|
|
TextCheckBoxCell cell = (TextCheckBoxCell) view;
|
|
|
|
cell.setChecked(item.checked);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
|
|
|
});
|
2019-01-23 18:03:33 +01:00
|
|
|
listView.setOnItemLongClickListener((view, position) -> {
|
|
|
|
final AndroidUtilities.VcardItem item;
|
|
|
|
if (position >= phoneStartRow && position < phoneEndRow) {
|
|
|
|
item = phones.get(position - phoneStartRow);
|
|
|
|
} else if (position >= vcardStartRow && position < vcardEndRow) {
|
|
|
|
item = other.get(position - vcardStartRow);
|
|
|
|
} else {
|
|
|
|
item = null;
|
|
|
|
}
|
|
|
|
if (item == null) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
|
|
|
builder.setItems(new CharSequence[]{LocaleController.getString("Copy", R.string.Copy)}, (dialogInterface, i) -> {
|
|
|
|
if (i == 0) {
|
|
|
|
try {
|
|
|
|
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
|
|
|
android.content.ClipData clip = android.content.ClipData.newPlainText("label", item.getValue(false));
|
|
|
|
clipboard.setPrimaryClip(clip);
|
|
|
|
if (item.type == 0) {
|
|
|
|
Toast.makeText(getParentActivity(), LocaleController.getString("PhoneCopied", R.string.PhoneCopied), Toast.LENGTH_SHORT).show();
|
|
|
|
} else if (item.type == 1) {
|
|
|
|
Toast.makeText(getParentActivity(), LocaleController.getString("EmailCopied", R.string.EmailCopied), Toast.LENGTH_SHORT).show();
|
|
|
|
} else if (item.type == 3) {
|
|
|
|
Toast.makeText(getParentActivity(), LocaleController.getString("LinkCopied", R.string.LinkCopied), Toast.LENGTH_SHORT).show();
|
|
|
|
} else {
|
|
|
|
Toast.makeText(getParentActivity(), LocaleController.getString("TextCopied", R.string.TextCopied), Toast.LENGTH_SHORT).show();
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
showDialog(builder.create());
|
|
|
|
return true;
|
|
|
|
});
|
2018-07-30 04:07:02 +02:00
|
|
|
|
|
|
|
frameLayout.addView(actionBar);
|
|
|
|
|
|
|
|
extraHeightView = new View(context);
|
|
|
|
extraHeightView.setPivotY(0);
|
|
|
|
extraHeightView.setBackgroundColor(Theme.getColor(Theme.key_avatar_backgroundActionBarBlue));
|
|
|
|
frameLayout.addView(extraHeightView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 88));
|
|
|
|
|
|
|
|
shadowView = new View(context);
|
|
|
|
shadowView.setBackgroundResource(R.drawable.header_shadow);
|
|
|
|
frameLayout.addView(shadowView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 3));
|
|
|
|
|
|
|
|
avatarImage = new BackupImageView(context);
|
|
|
|
avatarImage.setRoundRadius(AndroidUtilities.dp(21));
|
|
|
|
avatarImage.setPivotX(0);
|
|
|
|
avatarImage.setPivotY(0);
|
|
|
|
frameLayout.addView(avatarImage, LayoutHelper.createFrame(42, 42, Gravity.TOP | Gravity.LEFT, 64, 0, 0, 0));
|
|
|
|
|
|
|
|
nameTextView = new TextView(context);
|
|
|
|
nameTextView.setTextColor(Theme.getColor(Theme.key_profile_title));
|
|
|
|
nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
|
|
|
|
nameTextView.setLines(1);
|
|
|
|
nameTextView.setMaxLines(1);
|
|
|
|
nameTextView.setSingleLine(true);
|
|
|
|
nameTextView.setEllipsize(TextUtils.TruncateAt.END);
|
|
|
|
nameTextView.setGravity(Gravity.LEFT);
|
|
|
|
nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
|
|
|
|
nameTextView.setPivotX(0);
|
|
|
|
nameTextView.setPivotY(0);
|
|
|
|
frameLayout.addView(nameTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 118, 8, 10, 0));
|
|
|
|
|
|
|
|
needLayout();
|
|
|
|
|
|
|
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
|
|
|
@Override
|
|
|
|
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
|
|
|
if (layoutManager.getItemCount() == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
int height = 0;
|
|
|
|
View child = recyclerView.getChildAt(0);
|
|
|
|
if (child != null) {
|
|
|
|
if (layoutManager.findFirstVisibleItemPosition() == 0) {
|
|
|
|
height = AndroidUtilities.dp(88) + (child.getTop() < 0 ? child.getTop() : 0);
|
|
|
|
}
|
|
|
|
if (extraHeight != height) {
|
|
|
|
extraHeight = height;
|
|
|
|
needLayout();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
bottomLayout = new FrameLayout(context);
|
|
|
|
bottomLayout.setBackgroundDrawable(Theme.createSelectorWithBackgroundDrawable(Theme.getColor(Theme.key_passport_authorizeBackground), Theme.getColor(Theme.key_passport_authorizeBackgroundSelected)));
|
|
|
|
frameLayout.addView(bottomLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM));
|
2019-01-23 18:03:33 +01:00
|
|
|
bottomLayout.setOnClickListener(v -> {
|
|
|
|
if (isImport) {
|
|
|
|
if (getParentActivity() == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
|
|
|
builder.setTitle(LocaleController.getString("AddContactTitle", R.string.AddContactTitle));
|
|
|
|
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
|
|
|
builder.setItems(new CharSequence[]{
|
|
|
|
LocaleController.getString("CreateNewContact", R.string.CreateNewContact),
|
|
|
|
LocaleController.getString("AddToExistingContact", R.string.AddToExistingContact)
|
|
|
|
}, new DialogInterface.OnClickListener() {
|
|
|
|
|
|
|
|
private void fillRowWithType(String type, ContentValues row) {
|
|
|
|
if (type.startsWith("X-")) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_CUSTOM);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.LABEL, type.substring(2));
|
|
|
|
} else if ("PREF".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MAIN);
|
|
|
|
} else if ("HOME".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
|
|
|
|
} else if ("MOBILE".equalsIgnoreCase(type) || "CELL".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
|
|
|
|
} else if ("OTHER".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_OTHER);
|
|
|
|
} else if ("WORK".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
|
|
|
|
} else if ("RADIO".equalsIgnoreCase(type) || "VOICE".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_RADIO);
|
|
|
|
} else if ("PAGER".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_PAGER);
|
|
|
|
} else if ("CALLBACK".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CALLBACK);
|
|
|
|
} else if ("CAR".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CAR);
|
|
|
|
} else if ("ASSISTANT".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_ASSISTANT);
|
|
|
|
} else if ("MMS".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MMS);
|
|
|
|
} else if (type.startsWith("FAX")) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK);
|
|
|
|
} else {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_CUSTOM);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.LABEL, type);
|
|
|
|
}
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
|
|
|
|
private void fillUrlRowWithType(String type, ContentValues row) {
|
|
|
|
if (type.startsWith("X-")) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_CUSTOM);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.LABEL, type.substring(2));
|
|
|
|
} else if ("HOMEPAGE".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_HOMEPAGE);
|
|
|
|
} else if ("BLOG".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_BLOG);
|
|
|
|
} else if ("PROFILE".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_PROFILE);
|
|
|
|
} else if ("HOME".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_HOME);
|
|
|
|
} else if ("WORK".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_WORK);
|
|
|
|
} else if ("FTP".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_FTP);
|
|
|
|
} else if ("OTHER".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_OTHER);
|
|
|
|
} else {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_CUSTOM);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.LABEL, type);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
}
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
@Override
|
|
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
|
|
if (getParentActivity() == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Intent intent = null;
|
|
|
|
if (which == 0) {
|
|
|
|
intent = new Intent(ContactsContract.Intents.Insert.ACTION);
|
|
|
|
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
|
|
|
|
} else if (which == 1) {
|
|
|
|
intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
|
|
|
|
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
intent.putExtra(ContactsContract.Intents.Insert.NAME, ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
ArrayList<ContentValues> data = new ArrayList<>();
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
for (int a = 0; a < phones.size(); a++) {
|
|
|
|
AndroidUtilities.VcardItem item = phones.get(a);
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Phone.NUMBER, item.getValue(false));
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
String type = item.getRawType(false);
|
|
|
|
fillRowWithType(type, row);
|
|
|
|
data.add(row);
|
|
|
|
}
|
|
|
|
|
|
|
|
boolean orgAdded = false;
|
|
|
|
for (int a = 0; a < other.size(); a++) {
|
|
|
|
AndroidUtilities.VcardItem item = other.get(a);
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
if (item.type == 1) {
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Email.ADDRESS, item.getValue(false));
|
2018-07-30 04:07:02 +02:00
|
|
|
String type = item.getRawType(false);
|
|
|
|
fillRowWithType(type, row);
|
|
|
|
data.add(row);
|
2019-01-23 18:03:33 +01:00
|
|
|
} else if (item.type == 3) {
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Website.URL, item.getValue(false));
|
|
|
|
String type = item.getRawType(false);
|
|
|
|
fillUrlRowWithType(type, row);
|
|
|
|
data.add(row);
|
|
|
|
} else if (item.type == 4) {
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Note.NOTE, item.getValue(false));
|
|
|
|
data.add(row);
|
|
|
|
} else if (item.type == 5) {
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Event.START_DATE, item.getValue(false));
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
|
|
|
|
data.add(row);
|
|
|
|
} else if (item.type == 2) {
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
|
|
|
|
String args[] = item.getRawValue();
|
|
|
|
if (args.length > 0) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, args[0]);
|
|
|
|
}
|
|
|
|
if (args.length > 1) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD, args[1]);
|
|
|
|
}
|
|
|
|
if (args.length > 2) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, args[2]);
|
|
|
|
}
|
|
|
|
if (args.length > 3) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, args[3]);
|
|
|
|
}
|
|
|
|
if (args.length > 4) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, args[4]);
|
|
|
|
}
|
|
|
|
if (args.length > 5) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, args[5]);
|
|
|
|
}
|
|
|
|
if (args.length > 6) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, args[6]);
|
|
|
|
}
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
String type = item.getRawType(false);
|
|
|
|
if ("HOME".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME);
|
|
|
|
} else if ("WORK".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);
|
|
|
|
} else if ("OTHER".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER);
|
|
|
|
}
|
|
|
|
data.add(row);
|
|
|
|
} else if (item.type == 20) {
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
|
|
|
|
String imType = item.getRawType(true);
|
|
|
|
String type = item.getRawType(false);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.DATA, item.getValue(false));
|
|
|
|
if ("AIM".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_AIM);
|
|
|
|
} else if ("MSN".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_MSN);
|
|
|
|
} else if ("YAHOO".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_YAHOO);
|
|
|
|
} else if ("SKYPE".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_SKYPE);
|
|
|
|
} else if ("QQ".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ);
|
|
|
|
} else if ("GOOGLE-TALK".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK);
|
|
|
|
} else if ("ICQ".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_ICQ);
|
|
|
|
} else if ("JABBER".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER);
|
|
|
|
} else if ("NETMEETING".equalsIgnoreCase(imType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_NETMEETING);
|
|
|
|
} else {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM);
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, item.getRawType(true));
|
|
|
|
}
|
|
|
|
if ("HOME".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.TYPE, ContactsContract.CommonDataKinds.Im.TYPE_HOME);
|
|
|
|
} else if ("WORK".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.TYPE, ContactsContract.CommonDataKinds.Im.TYPE_WORK);
|
|
|
|
} else if ("OTHER".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Im.TYPE, ContactsContract.CommonDataKinds.Im.TYPE_OTHER);
|
|
|
|
}
|
|
|
|
data.add(row);
|
|
|
|
} else if (item.type == 6) {
|
|
|
|
if (orgAdded) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
orgAdded = true;
|
|
|
|
ContentValues row = new ContentValues();
|
|
|
|
row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
|
|
|
|
for (int b = a; b < other.size(); b++) {
|
|
|
|
AndroidUtilities.VcardItem orgItem = other.get(b);
|
|
|
|
if (orgItem.type != 6) {
|
2018-07-30 04:07:02 +02:00
|
|
|
continue;
|
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
String type = orgItem.getRawType(true);
|
|
|
|
if ("ORG".equalsIgnoreCase(type)) {
|
|
|
|
String[] value = orgItem.getRawValue();
|
|
|
|
if (value.length == 0) {
|
2018-07-30 04:07:02 +02:00
|
|
|
continue;
|
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
if (value.length >= 1) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Organization.COMPANY, value[0]);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
if (value.length >= 2) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Organization.DEPARTMENT, value[1]);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
} else if ("TITLE".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Organization.TITLE, orgItem.getValue(false));
|
|
|
|
} else if ("ROLE".equalsIgnoreCase(type)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Organization.TITLE, orgItem.getValue(false));
|
|
|
|
}
|
|
|
|
|
|
|
|
String orgType = orgItem.getRawType(true);
|
|
|
|
if ("WORK".equalsIgnoreCase(orgType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
|
|
|
|
} else if ("OTHER".equalsIgnoreCase(orgType)) {
|
|
|
|
row.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_OTHER);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
data.add(row);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
}
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
intent.putExtra("finishActivityOnSaveCompleted", true);
|
|
|
|
intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data);
|
2018-07-30 04:07:02 +02:00
|
|
|
|
2019-01-23 18:03:33 +01:00
|
|
|
try {
|
|
|
|
getParentActivity().startActivity(intent);
|
|
|
|
finishFragment();
|
|
|
|
} catch (Exception e) {
|
|
|
|
FileLog.e(e);
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
builder.show();
|
|
|
|
} else {
|
|
|
|
StringBuilder builder;
|
|
|
|
if (currentUser.restriction_reason != null) {
|
|
|
|
builder = new StringBuilder(currentUser.restriction_reason);
|
2018-07-30 04:07:02 +02:00
|
|
|
} else {
|
2019-01-23 18:03:33 +01:00
|
|
|
builder = new StringBuilder(String.format(Locale.US, "BEGIN:VCARD\nVERSION:3.0\nFN:%1$s\nEND:VCARD", ContactsController.formatName(currentUser.first_name, currentUser.last_name)));
|
|
|
|
}
|
|
|
|
int idx = builder.lastIndexOf("END:VCARD");
|
|
|
|
if (idx >= 0) {
|
|
|
|
currentUser.phone = null;
|
|
|
|
for (int a = phones.size() - 1; a >= 0; a--) {
|
|
|
|
AndroidUtilities.VcardItem item = phones.get(a);
|
|
|
|
if (!item.checked) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (currentUser.phone == null) {
|
|
|
|
currentUser.phone = item.getValue(false);
|
|
|
|
}
|
|
|
|
for (int b = 0; b < item.vcardData.size(); b++) {
|
|
|
|
builder.insert(idx, item.vcardData.get(b) + "\n");
|
|
|
|
}
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
for (int a = other.size() - 1; a >= 0; a--) {
|
|
|
|
AndroidUtilities.VcardItem item = other.get(a);
|
|
|
|
if (!item.checked) {
|
|
|
|
continue;
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
for (int b = item.vcardData.size() - 1; b >= 0; b--) {
|
|
|
|
builder.insert(idx, item.vcardData.get(b) + "\n");
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
currentUser.restriction_reason = builder.toString();
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
delegate.didSelectContact(currentUser);
|
|
|
|
finishFragment();
|
2018-07-30 04:07:02 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
shareTextView = new TextView(context);
|
|
|
|
shareTextView.setCompoundDrawablePadding(AndroidUtilities.dp(8));
|
|
|
|
shareTextView.setTextColor(Theme.getColor(Theme.key_passport_authorizeText));
|
|
|
|
if (isImport) {
|
|
|
|
shareTextView.setText(LocaleController.getString("AddContactChat", R.string.AddContactChat));
|
|
|
|
} else {
|
|
|
|
shareTextView.setText(LocaleController.getString("ContactShare", R.string.ContactShare));
|
|
|
|
}
|
|
|
|
shareTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
|
|
|
|
shareTextView.setGravity(Gravity.CENTER);
|
|
|
|
shareTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
|
|
|
|
bottomLayout.addView(shareTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER));
|
|
|
|
|
|
|
|
View shadow = new View(context);
|
|
|
|
shadow.setBackgroundResource(R.drawable.header_shadow_reverse);
|
|
|
|
frameLayout.addView(shadow, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 3, Gravity.LEFT | Gravity.BOTTOM, 0, 0, 0, 48));
|
|
|
|
|
|
|
|
AvatarDrawable avatarDrawable = new AvatarDrawable();
|
|
|
|
avatarDrawable.setProfile(true);
|
|
|
|
avatarDrawable.setInfo(5, currentUser.first_name, currentUser.last_name, false);
|
|
|
|
avatarDrawable.setColor(Theme.getColor(Theme.key_avatar_backgroundInProfileBlue));
|
|
|
|
|
|
|
|
TLRPC.FileLocation photo = null;
|
|
|
|
if (currentUser.photo != null) {
|
|
|
|
photo = currentUser.photo.photo_small;
|
|
|
|
}
|
2019-01-23 18:03:33 +01:00
|
|
|
avatarImage.setImage(photo, "50_50", avatarDrawable, currentUser);
|
2018-07-30 04:07:02 +02:00
|
|
|
nameTextView.setText(ContactsController.formatName(currentUser.first_name, currentUser.last_name));
|
|
|
|
|
|
|
|
return fragmentView;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onResume() {
|
|
|
|
super.onResume();
|
|
|
|
fixLayout();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onConfigurationChanged(Configuration newConfig) {
|
|
|
|
super.onConfigurationChanged(newConfig);
|
|
|
|
fixLayout();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setDelegate(PhonebookSelectActivity.PhonebookSelectActivityDelegate phonebookSelectActivityDelegate) {
|
|
|
|
delegate = phonebookSelectActivityDelegate;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void needLayout() {
|
|
|
|
FrameLayout.LayoutParams layoutParams;
|
|
|
|
int newTop = (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0) + ActionBar.getCurrentActionBarHeight();
|
|
|
|
if (listView != null) {
|
|
|
|
layoutParams = (FrameLayout.LayoutParams) listView.getLayoutParams();
|
|
|
|
if (layoutParams.topMargin != newTop) {
|
|
|
|
layoutParams.topMargin = newTop;
|
|
|
|
listView.setLayoutParams(layoutParams);
|
|
|
|
extraHeightView.setTranslationY(newTop);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (avatarImage != null) {
|
|
|
|
float diff = extraHeight / (float) AndroidUtilities.dp(88);
|
|
|
|
extraHeightView.setScaleY(diff);
|
|
|
|
shadowView.setTranslationY(newTop + extraHeight);
|
|
|
|
|
|
|
|
avatarImage.setScaleX((42 + 18 * diff) / 42.0f);
|
|
|
|
avatarImage.setScaleY((42 + 18 * diff) / 42.0f);
|
|
|
|
float avatarY = (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0) + ActionBar.getCurrentActionBarHeight() / 2.0f * (1.0f + diff) - 21 * AndroidUtilities.density + 27 * AndroidUtilities.density * diff;
|
|
|
|
avatarImage.setTranslationX(-AndroidUtilities.dp(47) * diff);
|
|
|
|
avatarImage.setTranslationY((float) Math.ceil(avatarY));
|
|
|
|
nameTextView.setTranslationX(-21 * AndroidUtilities.density * diff);
|
|
|
|
nameTextView.setTranslationY((float) Math.floor(avatarY) - (float) Math.ceil(AndroidUtilities.density) + (float) Math.floor(7 * AndroidUtilities.density * diff));
|
|
|
|
nameTextView.setScaleX(1.0f + 0.12f * diff);
|
|
|
|
nameTextView.setScaleY(1.0f + 0.12f * diff);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void fixLayout() {
|
|
|
|
if (fragmentView == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
fragmentView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreDraw() {
|
|
|
|
if (fragmentView != null) {
|
|
|
|
needLayout();
|
|
|
|
fragmentView.getViewTreeObserver().removeOnPreDrawListener(this);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
private class ListAdapter extends RecyclerListView.SelectionAdapter {
|
|
|
|
|
|
|
|
private Context mContext;
|
|
|
|
|
|
|
|
public ListAdapter(Context context) {
|
|
|
|
mContext = context;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getItemCount() {
|
|
|
|
return rowCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
|
|
|
switch (holder.getItemViewType()) {
|
|
|
|
case 0: {
|
|
|
|
if (position == overscrollRow) {
|
|
|
|
((EmptyCell) holder.itemView).setHeight(AndroidUtilities.dp(88));
|
|
|
|
} else {
|
|
|
|
((EmptyCell) holder.itemView).setHeight(AndroidUtilities.dp(16));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 1: {
|
|
|
|
TextCheckBoxCell cell = (TextCheckBoxCell) holder.itemView;
|
|
|
|
AndroidUtilities.VcardItem item;
|
|
|
|
int icon;
|
|
|
|
if (position >= phoneStartRow && position < phoneEndRow) {
|
|
|
|
item = phones.get(position - phoneStartRow);
|
|
|
|
if (position == phoneStartRow) {
|
|
|
|
icon = R.drawable.profile_phone;
|
|
|
|
} else {
|
|
|
|
icon = 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
item = other.get(position - vcardStartRow);
|
|
|
|
if (position == vcardStartRow) {
|
|
|
|
icon = R.drawable.profile_info;
|
|
|
|
} else {
|
|
|
|
icon = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cell.setVCardItem(item, icon);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isEnabled(RecyclerView.ViewHolder holder) {
|
|
|
|
int position = holder.getAdapterPosition();
|
|
|
|
return position >= phoneStartRow && position < phoneEndRow || position >= vcardStartRow && position < vcardEndRow;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
|
|
View view = null;
|
|
|
|
switch (viewType) {
|
|
|
|
case 0:
|
|
|
|
view = new EmptyCell(mContext);
|
|
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
view = new TextCheckBoxCell(mContext);
|
|
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
view = new DividerCell(mContext);
|
|
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
2019-01-23 18:03:33 +01:00
|
|
|
view.setPadding(AndroidUtilities.dp(72), AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8));
|
2018-07-30 04:07:02 +02:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
view = new ShadowSectionCell(mContext);
|
|
|
|
view.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
|
|
|
|
}
|
|
|
|
view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
|
|
|
|
return new RecyclerListView.Holder(view);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getItemViewType(int position) {
|
|
|
|
if (position == emptyRow || position == overscrollRow) {
|
|
|
|
return 0;
|
|
|
|
} else if (position >= phoneStartRow && position < phoneEndRow || position >= vcardStartRow && position < vcardEndRow) {
|
|
|
|
return 1;
|
|
|
|
} else if (position == phoneDividerRow) {
|
|
|
|
return 2;
|
|
|
|
} else if (position == detailRow) {
|
|
|
|
return 3;
|
|
|
|
} else {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ThemeDescription[] getThemeDescriptions() {
|
|
|
|
return new ThemeDescription[]{
|
|
|
|
new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{TextCheckBoxCell.class}, null, null, null, Theme.key_windowBackgroundWhite),
|
|
|
|
new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_windowBackgroundGray),
|
|
|
|
|
|
|
|
new ThemeDescription(actionBar, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_actionBarDefault),
|
|
|
|
new ThemeDescription(listView, ThemeDescription.FLAG_LISTGLOWCOLOR, null, null, null, null, Theme.key_actionBarDefault),
|
|
|
|
new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_ITEMSCOLOR, null, null, null, null, Theme.key_actionBarDefaultIcon),
|
|
|
|
new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_TITLECOLOR, null, null, null, null, Theme.key_actionBarDefaultTitle),
|
|
|
|
new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_SELECTORCOLOR, null, null, null, null, Theme.key_actionBarDefaultSelector),
|
|
|
|
|
|
|
|
new ThemeDescription(listView, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector),
|
|
|
|
|
|
|
|
new ThemeDescription(listView, 0, new Class[]{View.class}, Theme.dividerPaint, null, null, Theme.key_divider),
|
|
|
|
|
|
|
|
new ThemeDescription(shareTextView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_passport_authorizeText),
|
|
|
|
new ThemeDescription(bottomLayout, ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_passport_authorizeBackground),
|
|
|
|
new ThemeDescription(bottomLayout, ThemeDescription.FLAG_BACKGROUNDFILTER | ThemeDescription.FLAG_DRAWABLESELECTEDSTATE, null, null, null, null, Theme.key_passport_authorizeBackgroundSelected),
|
|
|
|
|
|
|
|
new ThemeDescription(listView, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{ShadowSectionCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow),
|
|
|
|
|
|
|
|
new ThemeDescription(listView, 0, new Class[]{TextCheckBoxCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText),
|
|
|
|
new ThemeDescription(listView, 0, new Class[]{TextCheckBoxCell.class}, null, null, null, Theme.key_checkboxSquareUnchecked),
|
|
|
|
new ThemeDescription(listView, 0, new Class[]{TextCheckBoxCell.class}, null, null, null, Theme.key_checkboxSquareDisabled),
|
|
|
|
new ThemeDescription(listView, 0, new Class[]{TextCheckBoxCell.class}, null, null, null, Theme.key_checkboxSquareBackground),
|
|
|
|
new ThemeDescription(listView, 0, new Class[]{TextCheckBoxCell.class}, null, null, null, Theme.key_checkboxSquareCheck),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|