mirror of https://github.com/NekoX-Dev/NekoX.git
1028 lines
50 KiB
Java
1028 lines
50 KiB
Java
/*
|
|
* This is the source code of Telegram for Android v. 5.x.x.
|
|
* It is licensed under GNU GPL v. 2 or later.
|
|
* You should have received a copy of the license in this archive (see LICENSE).
|
|
*
|
|
* Copyright Nikolai Kudashov, 2013-2018.
|
|
*/
|
|
|
|
package org.telegram.ui;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.AnimatorListenerAdapter;
|
|
import android.animation.AnimatorSet;
|
|
import android.animation.ObjectAnimator;
|
|
import android.content.Context;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Paint;
|
|
import android.location.Location;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.os.SystemClock;
|
|
import android.util.TypedValue;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.FrameLayout;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
import org.telegram.messenger.BuildVars;
|
|
import org.telegram.messenger.ChatObject;
|
|
import org.telegram.messenger.FileLog;
|
|
import org.telegram.messenger.LocaleController;
|
|
import org.telegram.messenger.LocationController;
|
|
import org.telegram.messenger.MessagesController;
|
|
import org.telegram.messenger.NotificationCenter;
|
|
import org.telegram.messenger.R;
|
|
import org.telegram.messenger.UserConfig;
|
|
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.HeaderCell;
|
|
import org.telegram.ui.Cells.ManageChatTextCell;
|
|
import org.telegram.ui.Cells.ManageChatUserCell;
|
|
import org.telegram.ui.Cells.ShadowSectionCell;
|
|
import org.telegram.ui.Components.AlertsCreator;
|
|
import org.telegram.ui.Components.LayoutHelper;
|
|
import org.telegram.ui.Components.RadialProgressView;
|
|
import org.telegram.ui.Components.RecyclerListView;
|
|
import org.telegram.ui.Components.ShareLocationDrawable;
|
|
import org.telegram.ui.Components.UndoView;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import androidx.recyclerview.widget.DefaultItemAnimator;
|
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
public class PeopleNearbyActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, LocationController.LocationFetchCallback {
|
|
|
|
private ListAdapter listViewAdapter;
|
|
private RecyclerListView listView;
|
|
private ActionIntroActivity groupCreateActivity;
|
|
private UndoView undoView;
|
|
private LinearLayoutManager layoutManager;
|
|
|
|
private View actionBarBackground;
|
|
private AnimatorSet actionBarAnimator;
|
|
|
|
private String currentGroupCreateAddress;
|
|
private String currentGroupCreateDisplayAddress;
|
|
private Location currentGroupCreateLocation;
|
|
|
|
private boolean checkingCanCreate;
|
|
private boolean canCreateGroup;
|
|
private AlertDialog loadingDialog;
|
|
|
|
private boolean expanded;
|
|
|
|
private Runnable checkExpiredRunnable;
|
|
private int reqId;
|
|
|
|
private Location lastLoadedLocation;
|
|
private long lastLoadedLocationTime;
|
|
|
|
private boolean showingLoadingProgress;
|
|
private boolean firstLoaded;
|
|
private Runnable showProgressRunnable;
|
|
private AnimatorSet showProgressAnimation;
|
|
private ArrayList<View> animatingViews = new ArrayList<>();
|
|
|
|
private final static int SHORT_POLL_TIMEOUT = 25 * 1000;
|
|
|
|
private Runnable shortPollRunnable = new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (shortPollRunnable != null) {
|
|
sendRequest(true, 0);
|
|
AndroidUtilities.cancelRunOnUIThread(shortPollRunnable);
|
|
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
|
}
|
|
}
|
|
};
|
|
|
|
private ArrayList<TLRPC.TL_peerLocated> users;
|
|
private ArrayList<TLRPC.TL_peerLocated> chats;
|
|
|
|
private int currentChatId;
|
|
private boolean showingMe;
|
|
|
|
private int helpRow;
|
|
private int helpSectionRow;
|
|
private int usersHeaderRow;
|
|
private int showMeRow;
|
|
private int usersStartRow;
|
|
private int usersEndRow;
|
|
private int showMoreRow;
|
|
private int usersSectionRow;
|
|
private int chatsHeaderRow;
|
|
private int chatsStartRow;
|
|
private int chatsEndRow;
|
|
private int chatsCreateRow;
|
|
private int chatsSectionRow;
|
|
private int rowCount;
|
|
private DefaultItemAnimator itemAnimator;
|
|
|
|
public PeopleNearbyActivity() {
|
|
super();
|
|
users = new ArrayList<>(getLocationController().getCachedNearbyUsers());
|
|
chats = new ArrayList<>(getLocationController().getCachedNearbyChats());
|
|
checkForExpiredLocations(false);
|
|
updateRows(true);
|
|
}
|
|
|
|
private void updateRows(boolean notifyDataSetChanged) {
|
|
rowCount = 0;
|
|
usersStartRow = -1;
|
|
usersEndRow = -1;
|
|
showMoreRow = -1;
|
|
chatsStartRow = -1;
|
|
chatsEndRow = -1;
|
|
chatsCreateRow = -1;
|
|
showMeRow = -1;
|
|
|
|
helpRow = rowCount++;
|
|
helpSectionRow = rowCount++;
|
|
usersHeaderRow = rowCount++;
|
|
showMeRow = rowCount++;
|
|
if (!users.isEmpty()) {
|
|
int count;
|
|
if (expanded) {
|
|
count = users.size();
|
|
} else {
|
|
count = Math.min(5, users.size());
|
|
}
|
|
usersStartRow = rowCount;
|
|
rowCount += count;
|
|
usersEndRow = rowCount;
|
|
if (count != users.size()) {
|
|
showMoreRow = rowCount++;
|
|
}
|
|
}
|
|
usersSectionRow = rowCount++;
|
|
|
|
chatsHeaderRow = rowCount++;
|
|
chatsCreateRow = rowCount++;
|
|
if (!chats.isEmpty()) {
|
|
chatsStartRow = rowCount;
|
|
rowCount += chats.size();
|
|
chatsEndRow = rowCount;
|
|
}
|
|
chatsSectionRow = rowCount++;
|
|
|
|
if (notifyDataSetChanged && listViewAdapter != null) {
|
|
listView.setItemAnimator(null);
|
|
listViewAdapter.notifyDataSetChanged();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onFragmentCreate() {
|
|
super.onFragmentCreate();
|
|
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.newLocationAvailable);
|
|
getNotificationCenter().addObserver(this, NotificationCenter.newPeopleNearbyAvailable);
|
|
getNotificationCenter().addObserver(this, NotificationCenter.needDeleteDialog);
|
|
checkCanCreateGroup();
|
|
sendRequest(false, 0);
|
|
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void onFragmentDestroy() {
|
|
super.onFragmentDestroy();
|
|
NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.newLocationAvailable);
|
|
getNotificationCenter().removeObserver(this, NotificationCenter.newPeopleNearbyAvailable);
|
|
getNotificationCenter().removeObserver(this, NotificationCenter.needDeleteDialog);
|
|
if (shortPollRunnable != null) {
|
|
AndroidUtilities.cancelRunOnUIThread(shortPollRunnable);
|
|
shortPollRunnable = null;
|
|
}
|
|
if (checkExpiredRunnable != null) {
|
|
AndroidUtilities.cancelRunOnUIThread(checkExpiredRunnable);
|
|
checkExpiredRunnable = null;
|
|
}
|
|
if (showProgressRunnable != null) {
|
|
AndroidUtilities.cancelRunOnUIThread(showProgressRunnable);
|
|
showProgressRunnable = null;
|
|
}
|
|
if (undoView != null) {
|
|
undoView.hide(true, 0);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public View createView(Context context) {
|
|
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
|
actionBar.setBackgroundDrawable(null);
|
|
actionBar.setTitleColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
|
|
actionBar.setItemsColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText), false);
|
|
actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_listSelector), false);
|
|
actionBar.setCastShadows(false);
|
|
actionBar.setAddToContainer(false);
|
|
actionBar.setOccupyStatusBar(Build.VERSION.SDK_INT >= 21 && !AndroidUtilities.isTablet());
|
|
actionBar.setTitle(LocaleController.getString("PeopleNearby", R.string.PeopleNearby));
|
|
actionBar.getTitleTextView().setAlpha(0.0f);
|
|
if (!AndroidUtilities.isTablet()) {
|
|
actionBar.showActionModeTop();
|
|
}
|
|
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
|
|
@Override
|
|
public void onItemClick(int id) {
|
|
if (id == -1) {
|
|
finishFragment();
|
|
}
|
|
}
|
|
});
|
|
|
|
fragmentView = new FrameLayout(context) {
|
|
@Override
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) actionBarBackground.getLayoutParams();
|
|
layoutParams.height = ActionBar.getCurrentActionBarHeight() + (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0) + AndroidUtilities.dp(3);
|
|
|
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
|
}
|
|
|
|
@Override
|
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
super.onLayout(changed, left, top, right, bottom);
|
|
checkScroll(false);
|
|
}
|
|
};
|
|
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
|
|
fragmentView.setTag(Theme.key_windowBackgroundGray);
|
|
FrameLayout frameLayout = (FrameLayout) fragmentView;
|
|
|
|
listView = new RecyclerListView(context);
|
|
listView.setGlowColor(0);
|
|
listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
|
|
listView.setAdapter(listViewAdapter = new ListAdapter(context));
|
|
listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
|
|
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
|
|
|
itemAnimator = new DefaultItemAnimator() {
|
|
@Override
|
|
protected long getAddAnimationDelay(long removeDuration, long moveDuration, long changeDuration) {
|
|
return removeDuration;
|
|
}
|
|
};
|
|
listView.setOnItemClickListener((view, position) -> {
|
|
if (getParentActivity() == null) {
|
|
return;
|
|
}
|
|
if (position >= usersStartRow && position < usersEndRow) {
|
|
if (view instanceof ManageChatUserCell) {
|
|
ManageChatUserCell cell = (ManageChatUserCell) view;
|
|
TLRPC.TL_peerLocated peerLocated = users.get(position - usersStartRow);
|
|
Bundle args1 = new Bundle();
|
|
args1.putInt("user_id", peerLocated.peer.user_id);
|
|
if (cell.hasAvatarSet()) {
|
|
args1.putBoolean("expandPhoto", true);
|
|
}
|
|
args1.putInt("nearby_distance", peerLocated.distance);
|
|
MessagesController.getInstance(currentAccount).ensureMessagesLoaded(peerLocated.peer.user_id, false, 0, null, null);
|
|
presentFragment(new ProfileActivity(args1));
|
|
}
|
|
} else if (position >= chatsStartRow && position < chatsEndRow) {
|
|
TLRPC.TL_peerLocated peerLocated = chats.get(position - chatsStartRow);
|
|
Bundle args1 = new Bundle();
|
|
int chatId;
|
|
if (peerLocated.peer instanceof TLRPC.TL_peerChat) {
|
|
chatId = peerLocated.peer.chat_id;
|
|
} else {
|
|
chatId = peerLocated.peer.channel_id;
|
|
}
|
|
args1.putInt("chat_id", chatId);
|
|
ChatActivity chatActivity = new ChatActivity(args1);
|
|
presentFragment(chatActivity);
|
|
} else if (position == chatsCreateRow) {
|
|
if (checkingCanCreate || currentGroupCreateAddress == null) {
|
|
loadingDialog = new AlertDialog(getParentActivity(), 3);
|
|
loadingDialog.setOnCancelListener(dialog -> loadingDialog = null);
|
|
loadingDialog.show();
|
|
return;
|
|
}
|
|
openGroupCreate();
|
|
} else if (position == showMeRow) {
|
|
UserConfig userConfig = getUserConfig();
|
|
if (showingMe) {
|
|
userConfig.sharingMyLocationUntil = 0;
|
|
userConfig.saveConfig(false);
|
|
sendRequest(false, 2);
|
|
updateRows(true);
|
|
} else {
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
|
builder.setTitle(LocaleController.getString("MakeMyselfVisibleTitle", R.string.MakeMyselfVisibleTitle));
|
|
builder.setMessage(LocaleController.getString("MakeMyselfVisibleInfo", R.string.MakeMyselfVisibleInfo));
|
|
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> {
|
|
userConfig.sharingMyLocationUntil = 0x7fffffff;
|
|
userConfig.saveConfig(false);
|
|
sendRequest(false, 1);
|
|
updateRows(true);
|
|
});
|
|
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
|
showDialog(builder.create());
|
|
}
|
|
userConfig.saveConfig(false);
|
|
} else if (position == showMoreRow) {
|
|
int newCount = users.size() - Math.min(5, users.size());
|
|
expanded = true;
|
|
updateRows(false);
|
|
listView.setItemAnimator(itemAnimator);
|
|
listViewAdapter.notifyItemRemoved(position);
|
|
listViewAdapter.notifyItemRangeInserted(position, newCount);
|
|
}
|
|
});
|
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
|
@Override
|
|
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
|
checkScroll(true);
|
|
}
|
|
});
|
|
|
|
actionBarBackground = new View(context) {
|
|
|
|
private Paint paint = new Paint();
|
|
|
|
@Override
|
|
protected void onDraw(Canvas canvas) {
|
|
paint.setColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
int h = getMeasuredHeight() - AndroidUtilities.dp(3);
|
|
canvas.drawRect(0, 0, getMeasuredWidth(), h, paint);
|
|
parentLayout.drawHeaderShadow(canvas, h);
|
|
}
|
|
};
|
|
actionBarBackground.setAlpha(0.0f);
|
|
frameLayout.addView(actionBarBackground, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
|
frameLayout.addView(actionBar, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
|
|
|
undoView = new UndoView(context);
|
|
frameLayout.addView(undoView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
|
|
|
|
updateRows(true);
|
|
return fragmentView;
|
|
}
|
|
|
|
private int[] location = new int[2];
|
|
private void checkScroll(boolean animated) {
|
|
int first = layoutManager.findFirstVisibleItemPosition();
|
|
boolean show;
|
|
if (first != 0) {
|
|
show = true;
|
|
} else {
|
|
RecyclerView.ViewHolder holder = listView.findViewHolderForAdapterPosition(first);
|
|
if (holder == null) {
|
|
show = true;
|
|
} else {
|
|
HintInnerCell hintInnerCell = (HintInnerCell) holder.itemView;
|
|
hintInnerCell.titleTextView.getLocationOnScreen(location);
|
|
show = location[1] + hintInnerCell.titleTextView.getMeasuredHeight() < actionBar.getBottom();
|
|
}
|
|
}
|
|
boolean visible = actionBarBackground.getTag() == null;
|
|
if (show != visible) {
|
|
actionBarBackground.setTag(show ? null : 1);
|
|
if (actionBarAnimator != null) {
|
|
actionBarAnimator.cancel();
|
|
actionBarAnimator = null;
|
|
}
|
|
if (animated) {
|
|
actionBarAnimator = new AnimatorSet();
|
|
actionBarAnimator.playTogether(
|
|
ObjectAnimator.ofFloat(actionBarBackground, View.ALPHA, show ? 1.0f : 0.0f),
|
|
ObjectAnimator.ofFloat(actionBar.getTitleTextView(), View.ALPHA, show ? 1.0f : 0.0f)
|
|
);
|
|
actionBarAnimator.setDuration(150);
|
|
actionBarAnimator.addListener(new AnimatorListenerAdapter() {
|
|
@Override
|
|
public void onAnimationEnd(Animator animation) {
|
|
if (animation.equals(actionBarAnimator)) {
|
|
actionBarAnimator = null;
|
|
}
|
|
}
|
|
});
|
|
actionBarAnimator.start();
|
|
} else {
|
|
actionBarBackground.setAlpha(show ? 1.0f : 0.0f);
|
|
actionBar.getTitleTextView().setAlpha(show ? 1.0f : 0.0f);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void openGroupCreate() {
|
|
if (!canCreateGroup) {
|
|
AlertsCreator.showSimpleAlert(PeopleNearbyActivity.this, LocaleController.getString("YourLocatedChannelsTooMuch", R.string.YourLocatedChannelsTooMuch));
|
|
return;
|
|
}
|
|
groupCreateActivity = new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_NEARBY_GROUP_CREATE);
|
|
groupCreateActivity.setGroupCreateAddress(currentGroupCreateAddress, currentGroupCreateDisplayAddress, currentGroupCreateLocation);
|
|
presentFragment(groupCreateActivity);
|
|
}
|
|
|
|
private void checkCanCreateGroup() {
|
|
if (checkingCanCreate) {
|
|
return;
|
|
}
|
|
checkingCanCreate = true;
|
|
TLRPC.TL_channels_getAdminedPublicChannels req = new TLRPC.TL_channels_getAdminedPublicChannels();
|
|
req.by_location = true;
|
|
req.check_limit = true;
|
|
int reqId = getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
|
canCreateGroup = error == null;
|
|
checkingCanCreate = false;
|
|
if (loadingDialog != null && currentGroupCreateAddress != null) {
|
|
try {
|
|
loadingDialog.dismiss();
|
|
} catch (Throwable e) {
|
|
FileLog.e(e);
|
|
}
|
|
loadingDialog = null;
|
|
openGroupCreate();
|
|
}
|
|
}));
|
|
getConnectionsManager().bindRequestToGuid(reqId, classGuid);
|
|
}
|
|
|
|
private void showLoadingProgress(boolean show) {
|
|
if (showingLoadingProgress == show) {
|
|
return;
|
|
}
|
|
showingLoadingProgress = show;
|
|
if (showProgressAnimation != null) {
|
|
showProgressAnimation.cancel();
|
|
showProgressAnimation = null;
|
|
}
|
|
if (listView == null) {
|
|
return;
|
|
}
|
|
ArrayList<Animator> animators = new ArrayList<>();
|
|
int count = listView.getChildCount();
|
|
for (int a = 0; a < count; a++) {
|
|
View child = listView.getChildAt(a);
|
|
if (child instanceof HeaderCellProgress) {
|
|
HeaderCellProgress cell = (HeaderCellProgress) child;
|
|
animatingViews.add(cell);
|
|
animators.add(ObjectAnimator.ofFloat(cell.progressView, View.ALPHA, show ? 1.0f : 0.0f));
|
|
}
|
|
}
|
|
if (animators.isEmpty()) {
|
|
return;
|
|
}
|
|
showProgressAnimation = new AnimatorSet();
|
|
showProgressAnimation.playTogether(animators);
|
|
showProgressAnimation.addListener(new AnimatorListenerAdapter() {
|
|
@Override
|
|
public void onAnimationEnd(Animator animation) {
|
|
showProgressAnimation = null;
|
|
animatingViews.clear();
|
|
}
|
|
});
|
|
showProgressAnimation.setDuration(180);
|
|
showProgressAnimation.start();
|
|
}
|
|
|
|
private void sendRequest(boolean shortpoll, int share) {
|
|
if (!firstLoaded) {
|
|
AndroidUtilities.runOnUIThread(showProgressRunnable = () -> {
|
|
showLoadingProgress(true);
|
|
showProgressRunnable = null;
|
|
}, 1000);
|
|
firstLoaded = true;
|
|
}
|
|
Location location = getLocationController().getLastKnownLocation();
|
|
if (location == null) {
|
|
return;
|
|
}
|
|
currentGroupCreateLocation = location;
|
|
if (!shortpoll && lastLoadedLocation != null) {
|
|
float distance = lastLoadedLocation.distanceTo(location);
|
|
if (BuildVars.DEBUG_VERSION) {
|
|
FileLog.d("located distance = " + distance);
|
|
}
|
|
if (share != 0 || (SystemClock.elapsedRealtime() - lastLoadedLocationTime) >= 3000L && lastLoadedLocation.distanceTo(location) > 20) {
|
|
if (reqId != 0) {
|
|
getConnectionsManager().cancelRequest(reqId, true);
|
|
reqId = 0;
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
if (reqId != 0) {
|
|
return;
|
|
}
|
|
lastLoadedLocation = location;
|
|
lastLoadedLocationTime = SystemClock.elapsedRealtime();
|
|
LocationController.fetchLocationAddress(currentGroupCreateLocation, PeopleNearbyActivity.this);
|
|
TLRPC.TL_contacts_getLocated req = new TLRPC.TL_contacts_getLocated();
|
|
req.geo_point = new TLRPC.TL_inputGeoPoint();
|
|
req.geo_point.lat = location.getLatitude();
|
|
req.geo_point._long = location.getLongitude();
|
|
if (share != 0) {
|
|
req.flags |= 1;
|
|
req.self_expires = share == 1 ? 0x7fffffff : 0;
|
|
}
|
|
reqId = getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
|
reqId = 0;
|
|
if (showProgressRunnable != null) {
|
|
AndroidUtilities.cancelRunOnUIThread(showProgressRunnable);
|
|
showProgressRunnable = null;
|
|
}
|
|
showLoadingProgress(false);
|
|
boolean saveConfig = false;
|
|
UserConfig userConfig = getUserConfig();
|
|
if (share == 1 && error != null) {
|
|
userConfig.sharingMyLocationUntil = 0;
|
|
saveConfig = true;
|
|
updateRows(true);
|
|
}
|
|
if (response != null && share != 2) {
|
|
TLRPC.Updates updates = (TLRPC.TL_updates) response;
|
|
getMessagesController().putUsers(updates.users, false);
|
|
getMessagesController().putChats(updates.chats, false);
|
|
users.clear();
|
|
chats.clear();
|
|
if (userConfig.sharingMyLocationUntil != 0) {
|
|
userConfig.lastMyLocationShareTime = (int) (System.currentTimeMillis() / 1000);
|
|
saveConfig = true;
|
|
}
|
|
boolean hasSelf = false;
|
|
for (int a = 0, N = updates.updates.size(); a < N; a++) {
|
|
TLRPC.Update baseUpdate = updates.updates.get(a);
|
|
if (baseUpdate instanceof TLRPC.TL_updatePeerLocated) {
|
|
TLRPC.TL_updatePeerLocated update = (TLRPC.TL_updatePeerLocated) baseUpdate;
|
|
for (int b = 0, N2 = update.peers.size(); b < N2; b++) {
|
|
TLRPC.PeerLocated object = update.peers.get(b);
|
|
if (object instanceof TLRPC.TL_peerLocated) {
|
|
TLRPC.TL_peerLocated peerLocated = (TLRPC.TL_peerLocated) object;
|
|
if (peerLocated.peer instanceof TLRPC.TL_peerUser) {
|
|
users.add(peerLocated);
|
|
} else {
|
|
chats.add(peerLocated);
|
|
}
|
|
} else if (object instanceof TLRPC.TL_peerSelfLocated) {
|
|
hasSelf = true;
|
|
TLRPC.TL_peerSelfLocated peerSelfLocated = (TLRPC.TL_peerSelfLocated) object;
|
|
if (userConfig.sharingMyLocationUntil != peerSelfLocated.expires) {
|
|
userConfig.sharingMyLocationUntil = peerSelfLocated.expires;
|
|
saveConfig = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!hasSelf && userConfig.sharingMyLocationUntil != 0) {
|
|
userConfig.sharingMyLocationUntil = 0;
|
|
saveConfig = true;
|
|
}
|
|
|
|
checkForExpiredLocations(true);
|
|
updateRows(true);
|
|
}
|
|
if (saveConfig) {
|
|
userConfig.saveConfig(false);
|
|
}
|
|
if (shortPollRunnable != null) {
|
|
AndroidUtilities.cancelRunOnUIThread(shortPollRunnable);
|
|
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
|
}
|
|
}));
|
|
getConnectionsManager().bindRequestToGuid(reqId, classGuid);
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
if (listViewAdapter != null) {
|
|
listViewAdapter.notifyDataSetChanged();
|
|
}
|
|
getLocationController().startLocationLookupForPeopleNearby(false);
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
if (undoView != null) {
|
|
undoView.hide(true, 0);
|
|
}
|
|
getLocationController().startLocationLookupForPeopleNearby(true);
|
|
}
|
|
|
|
@Override
|
|
protected void onBecomeFullyHidden() {
|
|
super.onBecomeFullyHidden();
|
|
if (undoView != null) {
|
|
undoView.hide(true, 0);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onLocationAddressAvailable(String address, String displayAddress, Location location) {
|
|
currentGroupCreateAddress = address;
|
|
currentGroupCreateDisplayAddress = displayAddress;
|
|
currentGroupCreateLocation = location;
|
|
if (groupCreateActivity != null) {
|
|
groupCreateActivity.setGroupCreateAddress(currentGroupCreateAddress, currentGroupCreateDisplayAddress, currentGroupCreateLocation);
|
|
}
|
|
if (loadingDialog != null && !checkingCanCreate) {
|
|
try {
|
|
loadingDialog.dismiss();
|
|
} catch (Throwable e) {
|
|
FileLog.e(e);
|
|
}
|
|
loadingDialog = null;
|
|
openGroupCreate();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onBecomeFullyVisible() {
|
|
super.onBecomeFullyVisible();
|
|
groupCreateActivity = null;
|
|
}
|
|
|
|
@Override
|
|
public void didReceivedNotification(int id, int account, Object... args) {
|
|
if (id == NotificationCenter.newLocationAvailable) {
|
|
sendRequest(false, 0);
|
|
} else if (id == NotificationCenter.newPeopleNearbyAvailable) {
|
|
TLRPC.TL_updatePeerLocated update = (TLRPC.TL_updatePeerLocated) args[0];
|
|
for (int b = 0, N2 = update.peers.size(); b < N2; b++) {
|
|
TLRPC.PeerLocated object = update.peers.get(b);
|
|
if (object instanceof TLRPC.TL_peerLocated) {
|
|
TLRPC.TL_peerLocated peerLocated = (TLRPC.TL_peerLocated) object;
|
|
boolean found = false;
|
|
ArrayList<TLRPC.TL_peerLocated> arrayList;
|
|
if (peerLocated.peer instanceof TLRPC.TL_peerUser) {
|
|
arrayList = users;
|
|
} else {
|
|
arrayList = chats;
|
|
}
|
|
for (int a = 0, N = arrayList.size(); a < N; a++) {
|
|
TLRPC.TL_peerLocated old = arrayList.get(a);
|
|
if (old.peer.user_id != 0 && old.peer.user_id == peerLocated.peer.user_id || old.peer.chat_id != 0 && old.peer.chat_id == peerLocated.peer.chat_id || old.peer.channel_id != 0 && old.peer.channel_id == peerLocated.peer.channel_id) {
|
|
arrayList.set(a, peerLocated);
|
|
found = true;
|
|
}
|
|
}
|
|
if (!found) {
|
|
arrayList.add(peerLocated);
|
|
}
|
|
}
|
|
}
|
|
checkForExpiredLocations(true);
|
|
updateRows(true);
|
|
} else if (id == NotificationCenter.needDeleteDialog) {
|
|
if (fragmentView == null || isPaused) {
|
|
return;
|
|
}
|
|
long dialogId = (Long) args[0];
|
|
TLRPC.User user = (TLRPC.User) args[1];
|
|
TLRPC.Chat chat = (TLRPC.Chat) args[2];
|
|
boolean revoke = (Boolean) args[3];
|
|
Runnable deleteRunnable = () -> {
|
|
if (chat != null) {
|
|
if (ChatObject.isNotInChat(chat)) {
|
|
getMessagesController().deleteDialog(dialogId, 0, revoke);
|
|
} else {
|
|
getMessagesController().deleteUserFromChat((int) -dialogId, getMessagesController().getUser(getUserConfig().getClientUserId()), null, false, revoke);
|
|
}
|
|
} else {
|
|
getMessagesController().deleteDialog(dialogId, 0, revoke);
|
|
}
|
|
};
|
|
if (undoView != null) {
|
|
undoView.showWithAction(dialogId, UndoView.ACTION_DELETE, deleteRunnable);
|
|
} else {
|
|
deleteRunnable.run();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void checkForExpiredLocations(boolean cache) {
|
|
if (checkExpiredRunnable != null) {
|
|
AndroidUtilities.cancelRunOnUIThread(checkExpiredRunnable);
|
|
checkExpiredRunnable = null;
|
|
}
|
|
int currentTime = getConnectionsManager().getCurrentTime();
|
|
int minExpired = Integer.MAX_VALUE;
|
|
boolean changed = false;
|
|
for (int a = 0; a < 2; a++) {
|
|
ArrayList<TLRPC.TL_peerLocated> arrayList = a == 0 ? users : chats;
|
|
for (int b = 0, N = arrayList.size(); b < N; b++) {
|
|
TLRPC.TL_peerLocated peer = arrayList.get(b);
|
|
if (peer.expires <= currentTime) {
|
|
arrayList.remove(b);
|
|
b--;
|
|
N--;
|
|
changed = true;
|
|
} else {
|
|
minExpired = Math.min(minExpired, peer.expires);
|
|
}
|
|
}
|
|
}
|
|
if (changed && listViewAdapter != null) {
|
|
updateRows(true);
|
|
}
|
|
if (changed || cache) {
|
|
getLocationController().setCachedNearbyUsersAndChats(users, chats);
|
|
}
|
|
if (minExpired != Integer.MAX_VALUE) {
|
|
AndroidUtilities.runOnUIThread(checkExpiredRunnable = () -> {
|
|
checkExpiredRunnable = null;
|
|
checkForExpiredLocations(false);
|
|
}, (minExpired - currentTime) * 1000);
|
|
}
|
|
}
|
|
|
|
public class HeaderCellProgress extends HeaderCell {
|
|
|
|
private RadialProgressView progressView;
|
|
|
|
public HeaderCellProgress(Context context) {
|
|
super(context);
|
|
|
|
setClipChildren(false);
|
|
|
|
progressView = new RadialProgressView(context);
|
|
progressView.setSize(AndroidUtilities.dp(14));
|
|
progressView.setStrokeWidth(2);
|
|
progressView.setAlpha(0.0f);
|
|
progressView.setProgressColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlueHeader));
|
|
addView(progressView, LayoutHelper.createFrame(50, 40, Gravity.TOP | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), LocaleController.isRTL ? 2 : 0, 3, LocaleController.isRTL ? 0 : 2, 0));
|
|
}
|
|
}
|
|
|
|
@SuppressWarnings("FieldCanBeLocal")
|
|
public class HintInnerCell extends FrameLayout {
|
|
|
|
private ImageView imageView;
|
|
private TextView titleTextView;
|
|
private TextView messageTextView;
|
|
|
|
public HintInnerCell(Context context) {
|
|
super(context);
|
|
|
|
int top = (int) ((ActionBar.getCurrentActionBarHeight() + (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0)) / AndroidUtilities.density) - 44;
|
|
|
|
imageView = new ImageView(context);
|
|
imageView.setBackgroundDrawable(Theme.createCircleDrawable(AndroidUtilities.dp(74), Theme.getColor(Theme.key_chats_archiveBackground)));
|
|
imageView.setImageDrawable(new ShareLocationDrawable(context, 2));
|
|
imageView.setScaleType(ImageView.ScaleType.CENTER);
|
|
addView(imageView, LayoutHelper.createFrame(74, 74, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, top + 27, 0, 0));
|
|
|
|
titleTextView = new TextView(context);
|
|
titleTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText));
|
|
titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 24);
|
|
titleTextView.setGravity(Gravity.CENTER);
|
|
titleTextView.setText(AndroidUtilities.replaceTags(LocaleController.formatString("PeopleNearby", R.string.PeopleNearby)));
|
|
addView(titleTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 52, top + 120, 52, 27));
|
|
|
|
messageTextView = new TextView(context);
|
|
messageTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText));
|
|
messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
|
|
messageTextView.setGravity(Gravity.CENTER);
|
|
messageTextView.setText(AndroidUtilities.replaceTags(LocaleController.formatString("PeopleNearbyInfo2", R.string.PeopleNearbyInfo2)));
|
|
addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 40, top + 161, 40, 27));
|
|
}
|
|
}
|
|
|
|
private class ListAdapter extends RecyclerListView.SelectionAdapter {
|
|
|
|
private Context mContext;
|
|
|
|
public ListAdapter(Context context) {
|
|
mContext = context;
|
|
}
|
|
|
|
@Override
|
|
public boolean isEnabled(RecyclerView.ViewHolder holder) {
|
|
int type = holder.getItemViewType();
|
|
return type == 0 || type == 2;
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
return rowCount;
|
|
}
|
|
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
View view;
|
|
switch (viewType) {
|
|
case 0:
|
|
view = new ManageChatUserCell(mContext, 6, 2, false);
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
break;
|
|
case 1:
|
|
view = new ShadowSectionCell(mContext);
|
|
break;
|
|
case 2:
|
|
view = new ManageChatTextCell(mContext);
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
break;
|
|
case 3:
|
|
view = new HeaderCellProgress(mContext);
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
break;
|
|
case 4:
|
|
TextView textView = new TextView(mContext) {
|
|
@Override
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(67), MeasureSpec.EXACTLY));
|
|
}
|
|
};
|
|
textView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
textView.setPadding(0, 0, AndroidUtilities.dp(3), 0);
|
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
|
|
textView.setGravity(Gravity.CENTER);
|
|
textView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText3));
|
|
view = textView;
|
|
break;
|
|
case 5:
|
|
default:
|
|
view = new HintInnerCell(mContext);
|
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
break;
|
|
}
|
|
view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
|
return new RecyclerListView.Holder(view);
|
|
}
|
|
|
|
@Override
|
|
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
|
|
if (holder.getItemViewType() == 3 && !animatingViews.contains(holder.itemView)) {
|
|
HeaderCellProgress cell = (HeaderCellProgress) holder.itemView;
|
|
cell.progressView.setAlpha(showingLoadingProgress ? 1.0f : 0.0f);
|
|
}
|
|
}
|
|
|
|
private String formatDistance(TLRPC.TL_peerLocated located) {
|
|
return LocaleController.formatDistance(located.distance, 0);
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
|
switch (holder.getItemViewType()) {
|
|
case 0:
|
|
ManageChatUserCell userCell = (ManageChatUserCell) holder.itemView;
|
|
userCell.setTag(position);
|
|
if (position >= usersStartRow && position < usersEndRow) {
|
|
int index = position - usersStartRow;
|
|
TLRPC.TL_peerLocated peerLocated = users.get(index);
|
|
TLRPC.User user = getMessagesController().getUser(peerLocated.peer.user_id);
|
|
if (user != null) {
|
|
userCell.setData(user, null, formatDistance(peerLocated), showMoreRow != -1 || position != usersEndRow - 1);
|
|
}
|
|
} else if (position >= chatsStartRow && position < chatsEndRow) {
|
|
int index = position - chatsStartRow;
|
|
TLRPC.TL_peerLocated peerLocated = chats.get(index);
|
|
int chatId;
|
|
if (peerLocated.peer instanceof TLRPC.TL_peerChat) {
|
|
chatId = peerLocated.peer.chat_id;
|
|
} else {
|
|
chatId = peerLocated.peer.channel_id;
|
|
}
|
|
TLRPC.Chat chat = getMessagesController().getChat(chatId);
|
|
if (chat != null) {
|
|
String subtitle = formatDistance(peerLocated);
|
|
if (chat.participants_count != 0) {
|
|
subtitle = String.format("%1$s, %2$s", subtitle, LocaleController.formatPluralString("Members", chat.participants_count));
|
|
}
|
|
userCell.setData(chat, null, subtitle, index != chats.size() - 1);
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
ShadowSectionCell privacyCell = (ShadowSectionCell) holder.itemView;
|
|
if (position == usersSectionRow) {
|
|
privacyCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow));
|
|
} else if (position == chatsSectionRow) {
|
|
privacyCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
|
|
} else if (position == helpSectionRow) {
|
|
privacyCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow));
|
|
}
|
|
break;
|
|
case 2:
|
|
ManageChatTextCell actionCell = (ManageChatTextCell) holder.itemView;
|
|
actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton);
|
|
if (position == chatsCreateRow) {
|
|
actionCell.setText(LocaleController.getString("NearbyCreateGroup", R.string.NearbyCreateGroup), null, R.drawable.groups_create, chatsStartRow != -1);
|
|
} else if (position == showMeRow) {
|
|
if (showingMe = (getUserConfig().sharingMyLocationUntil > getConnectionsManager().getCurrentTime())) {
|
|
actionCell.setText(LocaleController.getString("StopShowingMe", R.string.StopShowingMe), null, R.drawable.actions_nearby_off, usersStartRow != -1);
|
|
actionCell.setColors(Theme.key_windowBackgroundWhiteRedText5, Theme.key_windowBackgroundWhiteRedText5);
|
|
} else {
|
|
actionCell.setText(LocaleController.getString("MakeMyselfVisible", R.string.MakeMyselfVisible), null, R.drawable.actions_nearby_on, usersStartRow != -1);
|
|
}
|
|
} else if (position == showMoreRow) {
|
|
actionCell.setText(LocaleController.formatPluralString("ShowVotes", users.size() - 5), null, R.drawable.arrow_more, false);
|
|
}
|
|
break;
|
|
case 3:
|
|
HeaderCellProgress headerCell = (HeaderCellProgress) holder.itemView;
|
|
if (position == usersHeaderRow) {
|
|
headerCell.setText(LocaleController.getString("PeopleNearbyHeader", R.string.PeopleNearbyHeader));
|
|
} else if (position == chatsHeaderRow) {
|
|
headerCell.setText(LocaleController.getString("ChatsNearbyHeader", R.string.ChatsNearbyHeader));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onViewRecycled(RecyclerView.ViewHolder holder) {
|
|
if (holder.itemView instanceof ManageChatUserCell) {
|
|
((ManageChatUserCell) holder.itemView).recycle();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
if (position == helpRow) {
|
|
return 5;
|
|
} else if (position == chatsCreateRow || position == showMeRow || position == showMoreRow) {
|
|
return 2;
|
|
} else if (position == usersHeaderRow || position == chatsHeaderRow) {
|
|
return 3;
|
|
} else if (position == usersSectionRow || position == chatsSectionRow || position == helpSectionRow) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ArrayList<ThemeDescription> getThemeDescriptions() {
|
|
ArrayList<ThemeDescription> themeDescriptions = new ArrayList<>();
|
|
|
|
ThemeDescription.ThemeDescriptionDelegate cellDelegate = () -> {
|
|
if (listView != null) {
|
|
int count = listView.getChildCount();
|
|
for (int a = 0; a < count; a++) {
|
|
View child = listView.getChildAt(a);
|
|
if (child instanceof ManageChatUserCell) {
|
|
((ManageChatUserCell) child).update(0);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{ManageChatUserCell.class, ManageChatTextCell.class, HeaderCell.class, TextView.class, HintInnerCell.class}, null, null, null, Theme.key_windowBackgroundWhite));
|
|
themeDescriptions.add(new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND | ThemeDescription.FLAG_CHECKTAG, null, null, null, null, Theme.key_windowBackgroundGray));
|
|
themeDescriptions.add(new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND | ThemeDescription.FLAG_CHECKTAG, null, null, null, null, Theme.key_windowBackgroundWhite));
|
|
|
|
themeDescriptions.add(new ThemeDescription(actionBarBackground, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_windowBackgroundWhite));
|
|
themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_ITEMSCOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
|
|
themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_TITLECOLOR, null, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
|
|
themeDescriptions.add(new ThemeDescription(actionBar, ThemeDescription.FLAG_AB_SELECTORCOLOR, null, null, null, null, Theme.key_listSelector));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{View.class}, Theme.dividerPaint, null, null, Theme.key_divider));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{ShadowSectionCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{HeaderCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueHeader));
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_PROGRESSBAR, new Class[]{HeaderCellProgress.class}, new String[]{"progressView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueHeader));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{ManageChatUserCell.class}, new String[]{"nameTextView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{ManageChatUserCell.class}, new String[]{"statusColor"}, null, null, cellDelegate, Theme.key_windowBackgroundWhiteGrayText));
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{ManageChatUserCell.class}, new String[]{"statusOnlineColor"}, null, null, cellDelegate, Theme.key_windowBackgroundWhiteBlueText));
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{ManageChatUserCell.class}, null, Theme.avatarDrawables, null, Theme.key_avatar_text));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundRed));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundOrange));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundViolet));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundGreen));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundCyan));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundBlue));
|
|
themeDescriptions.add(new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundPink));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_USEBACKGROUNDDRAWABLE, new Class[]{HintInnerCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_chats_archiveBackground));
|
|
themeDescriptions.add(new ThemeDescription(listView, 0, new Class[]{HintInnerCell.class}, new String[]{"messageTextView"}, null, null, null, Theme.key_chats_message));
|
|
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlackText));
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayIcon));
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueButton));
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueIcon));
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteRedText5));
|
|
themeDescriptions.add(new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteRedText5));
|
|
|
|
themeDescriptions.add(new ThemeDescription(undoView, ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_undo_background));
|
|
themeDescriptions.add(new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"undoImageView"}, null, null, null, Theme.key_undo_cancelColor));
|
|
themeDescriptions.add(new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"undoTextView"}, null, null, null, Theme.key_undo_cancelColor));
|
|
themeDescriptions.add(new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"infoTextView"}, null, null, null, Theme.key_undo_infoColor));
|
|
themeDescriptions.add(new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"subinfoTextView"}, null, null, null, Theme.key_undo_infoColor));
|
|
themeDescriptions.add(new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"textPaint"}, null, null, null, Theme.key_undo_infoColor));
|
|
themeDescriptions.add(new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"progressPaint"}, null, null, null, Theme.key_undo_infoColor));
|
|
|
|
return themeDescriptions;
|
|
}
|
|
}
|