Update to 5.15.0 (1864)
|
@ -22,7 +22,7 @@ dependencies {
|
||||||
compileOnly 'org.checkerframework:checker-qual:2.5.2'
|
compileOnly 'org.checkerframework:checker-qual:2.5.2'
|
||||||
compileOnly 'org.checkerframework:checker-compat-qual:2.5.0'
|
compileOnly 'org.checkerframework:checker-compat-qual:2.5.0'
|
||||||
implementation 'com.google.firebase:firebase-messaging:20.1.0'
|
implementation 'com.google.firebase:firebase-messaging:20.1.0'
|
||||||
implementation 'com.google.firebase:firebase-config:19.1.0'
|
implementation 'com.google.firebase:firebase-config:19.1.1'
|
||||||
implementation 'com.google.android.gms:play-services-maps:17.0.0'
|
implementation 'com.google.android.gms:play-services-maps:17.0.0'
|
||||||
implementation 'com.google.android.gms:play-services-auth:17.0.0'
|
implementation 'com.google.android.gms:play-services-auth:17.0.0'
|
||||||
implementation 'com.google.android.gms:play-services-vision:16.2.0'
|
implementation 'com.google.android.gms:play-services-vision:16.2.0'
|
||||||
|
@ -283,7 +283,7 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig.versionCode = 1851
|
defaultConfig.versionCode = 1864
|
||||||
|
|
||||||
applicationVariants.all { variant ->
|
applicationVariants.all { variant ->
|
||||||
variant.outputs.all { output ->
|
variant.outputs.all { output ->
|
||||||
|
@ -318,7 +318,7 @@ android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionName "5.14.0"
|
versionName "5.15.0"
|
||||||
|
|
||||||
vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']
|
vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']
|
||||||
|
|
||||||
|
|
|
@ -3301,18 +3301,29 @@ void ConnectionsManager::setSystemLangCode(std::string langCode) {
|
||||||
|
|
||||||
void ConnectionsManager::resumeNetwork(bool partial) {
|
void ConnectionsManager::resumeNetwork(bool partial) {
|
||||||
scheduleTask([&, partial] {
|
scheduleTask([&, partial] {
|
||||||
|
if (lastMonotonicPauseTime != 0) {
|
||||||
|
int64_t diff = (getCurrentTimeMonotonicMillis() - lastMonotonicPauseTime) / 1000;
|
||||||
|
int64_t systemDiff = getCurrentTime() - lastSystemPauseTime;
|
||||||
|
if (systemDiff < 0 || abs(systemDiff - diff) > 2) {
|
||||||
|
timeDifference -= (systemDiff - diff);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (partial) {
|
if (partial) {
|
||||||
if (networkPaused) {
|
if (networkPaused) {
|
||||||
lastPauseTime = getCurrentTimeMonotonicMillis();
|
lastMonotonicPauseTime = lastPauseTime = getCurrentTimeMonotonicMillis();
|
||||||
|
lastSystemPauseTime = getCurrentTime();
|
||||||
networkPaused = false;
|
networkPaused = false;
|
||||||
if (LOGS_ENABLED) DEBUG_D("wakeup network in background account%u", instanceNum);
|
if (LOGS_ENABLED) DEBUG_D("wakeup network in background account%u", instanceNum);
|
||||||
} else if (lastPauseTime != 0) {
|
} else if (lastPauseTime != 0) {
|
||||||
lastPauseTime = getCurrentTimeMonotonicMillis();
|
lastMonotonicPauseTime = lastPauseTime = getCurrentTimeMonotonicMillis();
|
||||||
|
lastSystemPauseTime = getCurrentTime();
|
||||||
networkPaused = false;
|
networkPaused = false;
|
||||||
if (LOGS_ENABLED) DEBUG_D("reset sleep timeout account%u", instanceNum);
|
if (LOGS_ENABLED) DEBUG_D("reset sleep timeout account%u", instanceNum);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lastPauseTime = 0;
|
lastPauseTime = 0;
|
||||||
|
lastMonotonicPauseTime = 0;
|
||||||
|
lastSystemPauseTime = 0;
|
||||||
networkPaused = false;
|
networkPaused = false;
|
||||||
if (LOGS_ENABLED) DEBUG_D("wakeup network account%u", instanceNum);
|
if (LOGS_ENABLED) DEBUG_D("wakeup network account%u", instanceNum);
|
||||||
}
|
}
|
||||||
|
@ -3332,7 +3343,8 @@ void ConnectionsManager::pauseNetwork() {
|
||||||
if (lastPauseTime != 0) {
|
if (lastPauseTime != 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lastPauseTime = getCurrentTimeMonotonicMillis();
|
lastMonotonicPauseTime = lastPauseTime = getCurrentTimeMonotonicMillis();
|
||||||
|
lastSystemPauseTime = getCurrentTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionsManager::setNetworkAvailable(bool value, int32_t type, bool slow) {
|
void ConnectionsManager::setNetworkAvailable(bool value, int32_t type, bool slow) {
|
||||||
|
|
|
@ -161,6 +161,8 @@ private:
|
||||||
bool networkPaused = false;
|
bool networkPaused = false;
|
||||||
int32_t nextSleepTimeout = CONNECTION_BACKGROUND_KEEP_TIME;
|
int32_t nextSleepTimeout = CONNECTION_BACKGROUND_KEEP_TIME;
|
||||||
int64_t lastPauseTime = 0;
|
int64_t lastPauseTime = 0;
|
||||||
|
int64_t lastMonotonicPauseTime = 0;
|
||||||
|
int32_t lastSystemPauseTime = 0;
|
||||||
ConnectionState connectionState = ConnectionStateConnecting;
|
ConnectionState connectionState = ConnectionStateConnecting;
|
||||||
std::unique_ptr<ByteArray> movingAuthorization;
|
std::unique_ptr<ByteArray> movingAuthorization;
|
||||||
std::vector<int64_t> sessionsToDestroy;
|
std::vector<int64_t> sessionsToDestroy;
|
||||||
|
|
|
@ -15,7 +15,9 @@ import android.view.View;
|
||||||
import android.view.animation.DecelerateInterpolator;
|
import android.view.animation.DecelerateInterpolator;
|
||||||
import android.view.animation.LinearInterpolator;
|
import android.view.animation.LinearInterpolator;
|
||||||
|
|
||||||
public class LinearSmoothScrollerMiddle extends RecyclerView.SmoothScroller {
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
|
|
||||||
|
public class LinearSmoothScrollerCustom extends RecyclerView.SmoothScroller {
|
||||||
|
|
||||||
private static final float MILLISECONDS_PER_INCH = 25f;
|
private static final float MILLISECONDS_PER_INCH = 25f;
|
||||||
|
|
||||||
|
@ -32,9 +34,14 @@ public class LinearSmoothScrollerMiddle extends RecyclerView.SmoothScroller {
|
||||||
private final float MILLISECONDS_PER_PX;
|
private final float MILLISECONDS_PER_PX;
|
||||||
|
|
||||||
protected int mInterimTargetDx = 0, mInterimTargetDy = 0;
|
protected int mInterimTargetDx = 0, mInterimTargetDy = 0;
|
||||||
|
private int scrollPosition;
|
||||||
|
|
||||||
public LinearSmoothScrollerMiddle(Context context) {
|
public static final int POSITION_MIDDLE = 0;
|
||||||
|
public static final int POSITION_END = 1;
|
||||||
|
|
||||||
|
public LinearSmoothScrollerCustom(Context context, int position) {
|
||||||
MILLISECONDS_PER_PX = MILLISECONDS_PER_INCH / context.getResources().getDisplayMetrics().densityDpi;
|
MILLISECONDS_PER_PX = MILLISECONDS_PER_INCH / context.getResources().getDisplayMetrics().densityDpi;
|
||||||
|
scrollPosition = position;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -80,7 +87,6 @@ public class LinearSmoothScrollerMiddle extends RecyclerView.SmoothScroller {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateActionForInterimTarget(Action action) {
|
protected void updateActionForInterimTarget(Action action) {
|
||||||
// find an interim target position
|
|
||||||
PointF scrollVector = computeScrollVectorForPosition(getTargetPosition());
|
PointF scrollVector = computeScrollVectorForPosition(getTargetPosition());
|
||||||
if (scrollVector == null || (scrollVector.x == 0 && scrollVector.y == 0)) {
|
if (scrollVector == null || (scrollVector.x == 0 && scrollVector.y == 0)) {
|
||||||
final int target = getTargetPosition();
|
final int target = getTargetPosition();
|
||||||
|
@ -94,12 +100,7 @@ public class LinearSmoothScrollerMiddle extends RecyclerView.SmoothScroller {
|
||||||
mInterimTargetDx = (int) (TARGET_SEEK_SCROLL_DISTANCE_PX * scrollVector.x);
|
mInterimTargetDx = (int) (TARGET_SEEK_SCROLL_DISTANCE_PX * scrollVector.x);
|
||||||
mInterimTargetDy = (int) (TARGET_SEEK_SCROLL_DISTANCE_PX * scrollVector.y);
|
mInterimTargetDy = (int) (TARGET_SEEK_SCROLL_DISTANCE_PX * scrollVector.y);
|
||||||
final int time = calculateTimeForScrolling(TARGET_SEEK_SCROLL_DISTANCE_PX);
|
final int time = calculateTimeForScrolling(TARGET_SEEK_SCROLL_DISTANCE_PX);
|
||||||
// To avoid UI hiccups, trigger a smooth scroll to a distance little further than the
|
action.update((int) (mInterimTargetDx * TARGET_SEEK_EXTRA_SCROLL_RATIO), (int) (mInterimTargetDy * TARGET_SEEK_EXTRA_SCROLL_RATIO), (int) (time * TARGET_SEEK_EXTRA_SCROLL_RATIO), mLinearInterpolator);
|
||||||
// interim target. Since we track the distance travelled in onSeekTargetStep callback, it
|
|
||||||
// won't actually scroll more than what we need.
|
|
||||||
action.update((int) (mInterimTargetDx * TARGET_SEEK_EXTRA_SCROLL_RATIO)
|
|
||||||
, (int) (mInterimTargetDy * TARGET_SEEK_EXTRA_SCROLL_RATIO)
|
|
||||||
, (int) (time * TARGET_SEEK_EXTRA_SCROLL_RATIO), mLinearInterpolator);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int clampApplyScroll(int tmpDt, int dt) {
|
private int clampApplyScroll(int tmpDt, int dt) {
|
||||||
|
@ -126,8 +127,10 @@ public class LinearSmoothScrollerMiddle extends RecyclerView.SmoothScroller {
|
||||||
int viewSize = bottom - top;
|
int viewSize = bottom - top;
|
||||||
if (viewSize > boxSize) {
|
if (viewSize > boxSize) {
|
||||||
start = 0;
|
start = 0;
|
||||||
} else {
|
} else if (scrollPosition == POSITION_MIDDLE) {
|
||||||
start = (boxSize - viewSize) / 2;
|
start = (boxSize - viewSize) / 2;
|
||||||
|
} else {
|
||||||
|
start = (layoutManager.getPaddingTop() - AndroidUtilities.dp(88));
|
||||||
}
|
}
|
||||||
end = start + viewSize;
|
end = start + viewSize;
|
||||||
final int dtStart = start - top;
|
final int dtStart = start - top;
|
|
@ -575,7 +575,7 @@ public class RecyclerView extends ViewGroup implements ScrollingView,
|
||||||
|
|
||||||
private int topGlowOffset = 0;
|
private int topGlowOffset = 0;
|
||||||
private int bottomGlowOffset = 0;
|
private int bottomGlowOffset = 0;
|
||||||
private int glowColor = 0;
|
private Integer glowColor = null;
|
||||||
|
|
||||||
public void setTopGlowOffset(int offset) {
|
public void setTopGlowOffset(int offset) {
|
||||||
topGlowOffset = offset;
|
topGlowOffset = offset;
|
||||||
|
@ -620,7 +620,7 @@ public class RecyclerView extends ViewGroup implements ScrollingView,
|
||||||
}
|
}
|
||||||
|
|
||||||
void applyEdgeEffectColor(EdgeEffect edgeEffect) {
|
void applyEdgeEffectColor(EdgeEffect edgeEffect) {
|
||||||
if (edgeEffect != null && Build.VERSION.SDK_INT >= 21 && glowColor != 0) {
|
if (edgeEffect != null && Build.VERSION.SDK_INT >= 21 && glowColor != null) {
|
||||||
edgeEffect.setColor(glowColor);
|
edgeEffect.setColor(glowColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4362,6 +4362,7 @@ public class RecyclerView extends ViewGroup implements ScrollingView,
|
||||||
// TODO If padding is not 0 and clipChildrenToPadding is false, to draw glows properly, we
|
// TODO If padding is not 0 and clipChildrenToPadding is false, to draw glows properly, we
|
||||||
// need find children closest to edges. Not sure if it is worth the effort.
|
// need find children closest to edges. Not sure if it is worth the effort.
|
||||||
boolean needsInvalidate = false;
|
boolean needsInvalidate = false;
|
||||||
|
if (glowColor == null || glowColor != 0) {
|
||||||
if (mLeftGlow != null && !mLeftGlow.isFinished()) {
|
if (mLeftGlow != null && !mLeftGlow.isFinished()) {
|
||||||
final int restore = c.save();
|
final int restore = c.save();
|
||||||
final int padding = mClipToPadding ? getPaddingBottom() : 0;
|
final int padding = mClipToPadding ? getPaddingBottom() : 0;
|
||||||
|
@ -4399,6 +4400,7 @@ public class RecyclerView extends ViewGroup implements ScrollingView,
|
||||||
needsInvalidate |= mBottomGlow != null && mBottomGlow.draw(c);
|
needsInvalidate |= mBottomGlow != null && mBottomGlow.draw(c);
|
||||||
c.restoreToCount(restore);
|
c.restoreToCount(restore);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If some views are animating, ItemDecorators are likely to move/change with them.
|
// If some views are animating, ItemDecorators are likely to move/change with them.
|
||||||
// Invalidate RecyclerView to re-draw decorators. This is still efficient because children's
|
// Invalidate RecyclerView to re-draw decorators. This is still efficient because children's
|
||||||
|
|
|
@ -395,21 +395,29 @@ public class AndroidUtilities {
|
||||||
return media ? documentMediaIcons[0] : documentIcons[0];
|
return media ? documentMediaIcons[0] : documentIcons[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int calcBitmapColor(Bitmap bitmap) {
|
||||||
|
try {
|
||||||
|
Bitmap b = Bitmaps.createScaledBitmap(bitmap, 1, 1, true);
|
||||||
|
if (b != null) {
|
||||||
|
int bitmapColor = b.getPixel(0, 0);
|
||||||
|
if (bitmap != b) {
|
||||||
|
b.recycle();
|
||||||
|
}
|
||||||
|
return bitmapColor;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
FileLog.e(e);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
public static int[] calcDrawableColor(Drawable drawable) {
|
public static int[] calcDrawableColor(Drawable drawable) {
|
||||||
int bitmapColor = 0xff000000;
|
int bitmapColor = 0xff000000;
|
||||||
int[] result = new int[4];
|
int[] result = new int[4];
|
||||||
try {
|
try {
|
||||||
if (drawable instanceof BitmapDrawable) {
|
if (drawable instanceof BitmapDrawable) {
|
||||||
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
|
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
|
||||||
if (bitmap != null) {
|
bitmapColor = calcBitmapColor(bitmap);
|
||||||
Bitmap b = Bitmaps.createScaledBitmap(bitmap, 1, 1, true);
|
|
||||||
if (b != null) {
|
|
||||||
bitmapColor = b.getPixel(0, 0);
|
|
||||||
if (bitmap != b) {
|
|
||||||
b.recycle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (drawable instanceof ColorDrawable) {
|
} else if (drawable instanceof ColorDrawable) {
|
||||||
bitmapColor = ((ColorDrawable) drawable).getColor();
|
bitmapColor = ((ColorDrawable) drawable).getColor();
|
||||||
} else if (drawable instanceof BackgroundGradientDrawable) {
|
} else if (drawable instanceof BackgroundGradientDrawable) {
|
||||||
|
@ -516,7 +524,7 @@ public class AndroidUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void requestAdjustResize(Activity activity, int classGuid) {
|
public static void requestAdjustResize(Activity activity, int classGuid) {
|
||||||
if (activity == null || isTablet()) {
|
if (activity == null || isTablet() || SharedConfig.smoothKeyboard) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
|
@ -533,7 +541,7 @@ public class AndroidUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeAdjustResize(Activity activity, int classGuid) {
|
public static void removeAdjustResize(Activity activity, int classGuid) {
|
||||||
if (activity == null || isTablet()) {
|
if (activity == null || isTablet() || SharedConfig.smoothKeyboard) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (adjustOwnerClassGuid == classGuid) {
|
if (adjustOwnerClassGuid == classGuid) {
|
||||||
|
|
|
@ -19,8 +19,8 @@ public class BuildVars {
|
||||||
public static boolean USE_CLOUD_STRINGS = true;
|
public static boolean USE_CLOUD_STRINGS = true;
|
||||||
public static boolean CHECK_UPDATES = true;
|
public static boolean CHECK_UPDATES = true;
|
||||||
public static boolean TON_WALLET_STANDALONE = false;
|
public static boolean TON_WALLET_STANDALONE = false;
|
||||||
public static int BUILD_VERSION = 1851;
|
public static int BUILD_VERSION = 1864;
|
||||||
public static String BUILD_VERSION_STRING = "5.14.0";
|
public static String BUILD_VERSION_STRING = "5.15.0";
|
||||||
public static int APP_ID = 4;
|
public static int APP_ID = 4;
|
||||||
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";
|
public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103";
|
||||||
public static String HOCKEY_APP_HASH = "a5b5c4f551dadedc9918d9766a22ca7c";
|
public static String HOCKEY_APP_HASH = "a5b5c4f551dadedc9918d9766a22ca7c";
|
||||||
|
|
|
@ -793,6 +793,10 @@ public class EmojiData {
|
||||||
public static final HashSet<String> emojiBigColoredMap = new HashSet<>(emojiBigColored.length);
|
public static final HashSet<String> emojiBigColoredMap = new HashSet<>(emojiBigColored.length);
|
||||||
public static final HashMap<CharSequence, CharSequence> emojiAliasMap = new HashMap<>(aliasNew.length);
|
public static final HashMap<CharSequence, CharSequence> emojiAliasMap = new HashMap<>(aliasNew.length);
|
||||||
|
|
||||||
|
public static boolean isHeartEmoji(String emoji) {
|
||||||
|
return "❤".equals(emoji) || "🧡".equals(emoji) || "💛".equals(emoji) || "💚".equals(emoji) || "💙".equals(emoji) || "💜".equals(emoji) || "🖤".equals(emoji) || "🤍".equals(emoji) || "🤎".equals(emoji);
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
for (int a = 0; a < emojiToFE0F.length; a++) {
|
for (int a = 0; a < emojiToFE0F.length; a++) {
|
||||||
emojiToFE0FMap.put(emojiToFE0F[a], true);
|
emojiToFE0FMap.put(emojiToFE0F[a], true);
|
||||||
|
|
|
@ -2661,7 +2661,7 @@ public class LocaleController {
|
||||||
public int quantityForNumber(int count) {
|
public int quantityForNumber(int count) {
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
return QUANTITY_ZERO;
|
return QUANTITY_ZERO;
|
||||||
} else if (count > 0 && count < 2) {
|
} else if (count == 1) {
|
||||||
return QUANTITY_ONE;
|
return QUANTITY_ONE;
|
||||||
} else {
|
} else {
|
||||||
return QUANTITY_OTHER;
|
return QUANTITY_OTHER;
|
||||||
|
|
|
@ -64,6 +64,7 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
private SparseIntArray requests = new SparseIntArray();
|
private SparseIntArray requests = new SparseIntArray();
|
||||||
private LongSparseArray<Boolean> cacheRequests = new LongSparseArray<>();
|
private LongSparseArray<Boolean> cacheRequests = new LongSparseArray<>();
|
||||||
private long locationEndWatchTime;
|
private long locationEndWatchTime;
|
||||||
|
private boolean shareMyCurrentLocation;
|
||||||
|
|
||||||
private boolean lookingForPeopleNearby;
|
private boolean lookingForPeopleNearby;
|
||||||
|
|
||||||
|
@ -316,7 +317,7 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
if (!permissionsGranted) {
|
if (!permissionsGranted) {
|
||||||
playServicesAvailable = false;
|
playServicesAvailable = false;
|
||||||
}
|
}
|
||||||
if (lookingForPeopleNearby || !sharingLocations.isEmpty()) {
|
if (shareMyCurrentLocation || lookingForPeopleNearby || !sharingLocations.isEmpty()) {
|
||||||
if (permissionsGranted) {
|
if (permissionsGranted) {
|
||||||
try {
|
try {
|
||||||
setLastKnownLocation(LocationServices.FusedLocationApi.getLastLocation(googleApiClient));
|
setLastKnownLocation(LocationServices.FusedLocationApi.getLastLocation(googleApiClient));
|
||||||
|
@ -369,6 +370,7 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
}
|
}
|
||||||
requests.clear();
|
requests.clear();
|
||||||
}
|
}
|
||||||
|
if (!sharingLocations.isEmpty()) {
|
||||||
int date = getConnectionsManager().getCurrentTime();
|
int date = getConnectionsManager().getCurrentTime();
|
||||||
float[] result = new float[1];
|
float[] result = new float[1];
|
||||||
for (int a = 0; a < sharingLocations.size(); a++) {
|
for (int a = 0; a < sharingLocations.size(); a++) {
|
||||||
|
@ -430,8 +432,24 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
});
|
});
|
||||||
requests.put(reqId[0], 0);
|
requests.put(reqId[0], 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (shareMyCurrentLocation) {
|
||||||
|
UserConfig userConfig = getUserConfig();
|
||||||
|
userConfig.lastMyLocationShareTime = (int) (System.currentTimeMillis() / 1000);
|
||||||
|
userConfig.saveConfig(false);
|
||||||
|
|
||||||
|
TLRPC.TL_contacts_getLocated req = new TLRPC.TL_contacts_getLocated();
|
||||||
|
req.geo_point = new TLRPC.TL_inputGeoPoint();
|
||||||
|
req.geo_point.lat = lastKnownLocation.getLatitude();
|
||||||
|
req.geo_point._long = lastKnownLocation.getLongitude();
|
||||||
|
req.background = true;
|
||||||
|
getConnectionsManager().sendRequest(req, (response, error) -> {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
getConnectionsManager().resumeNetworkMaybe();
|
getConnectionsManager().resumeNetworkMaybe();
|
||||||
if (shouldStopGps()) {
|
if (shouldStopGps() || shareMyCurrentLocation) {
|
||||||
|
shareMyCurrentLocation = false;
|
||||||
stop(false);
|
stop(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -449,9 +467,11 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void update() {
|
protected void update() {
|
||||||
if (sharingLocations.isEmpty()) {
|
UserConfig userConfig = getUserConfig();
|
||||||
return;
|
if (ApplicationLoader.isScreenOn && !ApplicationLoader.mainInterfacePaused && !shareMyCurrentLocation && userConfig.sharingMyLocationUntil != 0 && Math.abs(System.currentTimeMillis() / 1000 - userConfig.lastMyLocationShareTime) >= 60 * 60) {
|
||||||
|
shareMyCurrentLocation = true;
|
||||||
}
|
}
|
||||||
|
if (!sharingLocations.isEmpty()) {
|
||||||
for (int a = 0; a < sharingLocations.size(); a++) {
|
for (int a = 0; a < sharingLocations.size(); a++) {
|
||||||
final SharingLocationInfo info = sharingLocations.get(a);
|
final SharingLocationInfo info = sharingLocations.get(a);
|
||||||
int currentTime = getConnectionsManager().getCurrentTime();
|
int currentTime = getConnectionsManager().getCurrentTime();
|
||||||
|
@ -470,6 +490,7 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
a--;
|
a--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (started) {
|
if (started) {
|
||||||
long newTime = SystemClock.elapsedRealtime();
|
long newTime = SystemClock.elapsedRealtime();
|
||||||
if (lastLocationByGoogleMaps || Math.abs(lastLocationStartTime - newTime) > LOCATION_ACQUIRE_TIME || shouldSendLocationNow()) {
|
if (lastLocationByGoogleMaps || Math.abs(lastLocationStartTime - newTime) > LOCATION_ACQUIRE_TIME || shouldSendLocationNow()) {
|
||||||
|
@ -480,8 +501,8 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
lastLocationSendTime = SystemClock.elapsedRealtime();
|
lastLocationSendTime = SystemClock.elapsedRealtime();
|
||||||
broadcastLastKnownLocation(cancelAll);
|
broadcastLastKnownLocation(cancelAll);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!sharingLocations.isEmpty() || shareMyCurrentLocation) {
|
||||||
if (Math.abs(lastLocationSendTime - SystemClock.elapsedRealtime()) > BACKGROUD_UPDATE_TIME) {
|
if (shareMyCurrentLocation || Math.abs(lastLocationSendTime - SystemClock.elapsedRealtime()) > BACKGROUD_UPDATE_TIME) {
|
||||||
lastLocationStartTime = SystemClock.elapsedRealtime();
|
lastLocationStartTime = SystemClock.elapsedRealtime();
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
@ -826,7 +847,7 @@ public class LocationController extends BaseController implements NotificationCe
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stop(boolean empty) {
|
private void stop(boolean empty) {
|
||||||
if (lookingForPeopleNearby) {
|
if (lookingForPeopleNearby || shareMyCurrentLocation) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
started = false;
|
started = false;
|
||||||
|
|
|
@ -2836,20 +2836,9 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
|
||||||
recordReplyingMessageObject = reply_to_msg;
|
recordReplyingMessageObject = reply_to_msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldRequestRecordAudioFocus() {
|
|
||||||
try {
|
|
||||||
if (/*NotificationsController.audioManager.isWiredHeadsetOn() || */NotificationsController.audioManager.isBluetoothA2dpOn()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (Throwable ignore) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void requestAudioFocus(boolean request) {
|
public void requestAudioFocus(boolean request) {
|
||||||
if (request) {
|
if (request) {
|
||||||
if (!hasRecordAudioFocus && shouldRequestRecordAudioFocus()) {
|
if (!hasRecordAudioFocus && SharedConfig.pauseMusicOnRecord) {
|
||||||
int result = NotificationsController.audioManager.requestAudioFocus(audioRecordFocusChangedListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
|
int result = NotificationsController.audioManager.requestAudioFocus(audioRecordFocusChangedListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
|
||||||
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||||
hasRecordAudioFocus = true;
|
hasRecordAudioFocus = true;
|
||||||
|
|
|
@ -3564,6 +3564,9 @@ public class MessageObject {
|
||||||
} else {
|
} else {
|
||||||
spannable.setSpan(new URLSpanBrowser(url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
spannable.setSpan(new URLSpanBrowser(url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
}
|
}
|
||||||
|
} else if (run.urlEntity instanceof TLRPC.TL_messageEntityBankCard) {
|
||||||
|
hasUrls = true;
|
||||||
|
spannable.setSpan(new URLSpanNoUnderline("card:" + url, run), run.start, run.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||||
} else if (run.urlEntity instanceof TLRPC.TL_messageEntityPhone) {
|
} else if (run.urlEntity instanceof TLRPC.TL_messageEntityPhone) {
|
||||||
hasUrls = true;
|
hasUrls = true;
|
||||||
String tel = PhoneFormat.stripExceptNumbers(url);
|
String tel = PhoneFormat.stripExceptNumbers(url);
|
||||||
|
|
|
@ -3043,12 +3043,18 @@ public class MessagesController extends BaseController implements NotificationCe
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
boolean isProxyDialog = false;
|
boolean isProxyDialog = false;
|
||||||
|
boolean emptyMax = max_id_delete == 0;
|
||||||
|
if (emptyMax) {
|
||||||
|
int max = getMessagesStorage().getDialogMaxMessageId(did);
|
||||||
|
if (max > 0) {
|
||||||
|
max_id_delete = Math.max(max, max_id_delete);
|
||||||
|
}
|
||||||
|
}
|
||||||
getMessagesStorage().deleteDialog(did, onlyHistory);
|
getMessagesStorage().deleteDialog(did, onlyHistory);
|
||||||
TLRPC.Dialog dialog = dialogs_dict.get(did);
|
TLRPC.Dialog dialog = dialogs_dict.get(did);
|
||||||
if (onlyHistory == 0 || onlyHistory == 3) {
|
if (onlyHistory == 0 || onlyHistory == 3) {
|
||||||
getNotificationsController().deleteNotificationChannel(did);
|
getNotificationsController().deleteNotificationChannel(did);
|
||||||
}
|
}
|
||||||
boolean emptyMax = max_id_delete == 0;
|
|
||||||
if (dialog != null) {
|
if (dialog != null) {
|
||||||
if (emptyMax) {
|
if (emptyMax) {
|
||||||
max_id_delete = Math.max(0, dialog.top_message);
|
max_id_delete = Math.max(0, dialog.top_message);
|
||||||
|
@ -7211,10 +7217,12 @@ public class MessagesController extends BaseController implements NotificationCe
|
||||||
getContactsController().deleteUnknownAppAccounts();
|
getContactsController().deleteUnknownAppAccounts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean gettingAppChangelog;
|
||||||
public void generateUpdateMessage() {
|
public void generateUpdateMessage() {
|
||||||
if (BuildVars.DEBUG_VERSION || SharedConfig.lastUpdateVersion == null || SharedConfig.lastUpdateVersion.equals(BuildVars.BUILD_VERSION_STRING)) {
|
if (gettingAppChangelog || BuildVars.DEBUG_VERSION || SharedConfig.lastUpdateVersion == null || SharedConfig.lastUpdateVersion.equals(BuildVars.BUILD_VERSION_STRING)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
gettingAppChangelog = true;
|
||||||
TLRPC.TL_help_getAppChangelog req = new TLRPC.TL_help_getAppChangelog();
|
TLRPC.TL_help_getAppChangelog req = new TLRPC.TL_help_getAppChangelog();
|
||||||
req.prev_app_version = SharedConfig.lastUpdateVersion;
|
req.prev_app_version = SharedConfig.lastUpdateVersion;
|
||||||
getConnectionsManager().sendRequest(req, (response, error) -> {
|
getConnectionsManager().sendRequest(req, (response, error) -> {
|
||||||
|
|
|
@ -2046,7 +2046,7 @@ public class MessagesStorage extends BaseController {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void putDialogPhotos(final int did, final TLRPC.photos_Photos photos) {
|
public void putDialogPhotos(final int did, final TLRPC.photos_Photos photos) {
|
||||||
if (photos == null || photos.photos.isEmpty()) {
|
if (photos == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
storageQueue.postRunnable(() -> {
|
storageQueue.postRunnable(() -> {
|
||||||
|
@ -8148,6 +8148,33 @@ public class MessagesStorage extends BaseController {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getDialogMaxMessageId(final long dialog_id) {
|
||||||
|
final CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
|
final Integer[] max = new Integer[]{0};
|
||||||
|
storageQueue.postRunnable(() -> {
|
||||||
|
SQLiteCursor cursor = null;
|
||||||
|
try {
|
||||||
|
cursor = database.queryFinalized("SELECT MAX(mid) FROM messages WHERE uid = " + dialog_id);
|
||||||
|
if (cursor.next()) {
|
||||||
|
max[0] = cursor.intValue(0);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
FileLog.e(e);
|
||||||
|
} finally {
|
||||||
|
if (cursor != null) {
|
||||||
|
cursor.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
countDownLatch.countDown();
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
countDownLatch.await();
|
||||||
|
} catch (Exception e) {
|
||||||
|
FileLog.e(e);
|
||||||
|
}
|
||||||
|
return max[0];
|
||||||
|
}
|
||||||
|
|
||||||
public int getDialogReadMax(final boolean outbox, final long dialog_id) {
|
public int getDialogReadMax(final boolean outbox, final long dialog_id) {
|
||||||
final CountDownLatch countDownLatch = new CountDownLatch(1);
|
final CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
final Integer[] max = new Integer[]{0};
|
final Integer[] max = new Integer[]{0};
|
||||||
|
|
|
@ -84,6 +84,8 @@ public class SharedConfig {
|
||||||
public static boolean streamAllVideo = false;
|
public static boolean streamAllVideo = false;
|
||||||
public static boolean streamMkv = false;
|
public static boolean streamMkv = false;
|
||||||
public static boolean saveStreamMedia = true;
|
public static boolean saveStreamMedia = true;
|
||||||
|
public static boolean smoothKeyboard = false;
|
||||||
|
public static boolean pauseMusicOnRecord = true;
|
||||||
public static boolean sortContactsByName;
|
public static boolean sortContactsByName;
|
||||||
public static boolean sortFilesByName;
|
public static boolean sortFilesByName;
|
||||||
public static boolean shuffleMusic;
|
public static boolean shuffleMusic;
|
||||||
|
@ -249,6 +251,8 @@ public class SharedConfig {
|
||||||
useSystemEmoji = preferences.getBoolean("useSystemEmoji", false);
|
useSystemEmoji = preferences.getBoolean("useSystemEmoji", false);
|
||||||
streamMedia = preferences.getBoolean("streamMedia", true);
|
streamMedia = preferences.getBoolean("streamMedia", true);
|
||||||
saveStreamMedia = preferences.getBoolean("saveStreamMedia", true);
|
saveStreamMedia = preferences.getBoolean("saveStreamMedia", true);
|
||||||
|
smoothKeyboard = preferences.getBoolean("smoothKeyboard", false);
|
||||||
|
pauseMusicOnRecord = preferences.getBoolean("pauseMusicOnRecord", true);
|
||||||
streamAllVideo = preferences.getBoolean("streamAllVideo", BuildVars.DEBUG_VERSION);
|
streamAllVideo = preferences.getBoolean("streamAllVideo", BuildVars.DEBUG_VERSION);
|
||||||
streamMkv = preferences.getBoolean("streamMkv", false);
|
streamMkv = preferences.getBoolean("streamMkv", false);
|
||||||
suggestStickers = preferences.getInt("suggestStickers", 0);
|
suggestStickers = preferences.getInt("suggestStickers", 0);
|
||||||
|
@ -671,6 +675,22 @@ public class SharedConfig {
|
||||||
editor.commit();
|
editor.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void toggleSmoothKeyboard() {
|
||||||
|
smoothKeyboard = !smoothKeyboard;
|
||||||
|
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||||
|
SharedPreferences.Editor editor = preferences.edit();
|
||||||
|
editor.putBoolean("smoothKeyboard", smoothKeyboard);
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void togglePauseMusicOnRecord() {
|
||||||
|
pauseMusicOnRecord = !pauseMusicOnRecord;
|
||||||
|
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||||
|
SharedPreferences.Editor editor = preferences.edit();
|
||||||
|
editor.putBoolean("pauseMusicOnRecord", pauseMusicOnRecord);
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
public static void toggleInappCamera() {
|
public static void toggleInappCamera() {
|
||||||
inappCamera = !inappCamera;
|
inappCamera = !inappCamera;
|
||||||
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
SharedPreferences preferences = MessagesController.getGlobalMainSettings();
|
||||||
|
|
|
@ -48,6 +48,9 @@ public class UserConfig extends BaseController {
|
||||||
public int migrateOffsetChannelId = -1;
|
public int migrateOffsetChannelId = -1;
|
||||||
public long migrateOffsetAccess = -1;
|
public long migrateOffsetAccess = -1;
|
||||||
|
|
||||||
|
public int sharingMyLocationUntil;
|
||||||
|
public int lastMyLocationShareTime;
|
||||||
|
|
||||||
public boolean notificationsSettingsLoaded;
|
public boolean notificationsSettingsLoaded;
|
||||||
public boolean notificationsSignUpSettingsLoaded;
|
public boolean notificationsSignUpSettingsLoaded;
|
||||||
public boolean syncContacts = true;
|
public boolean syncContacts = true;
|
||||||
|
@ -142,6 +145,8 @@ public class UserConfig extends BaseController {
|
||||||
editor.putBoolean("notificationsSignUpSettingsLoaded", notificationsSignUpSettingsLoaded);
|
editor.putBoolean("notificationsSignUpSettingsLoaded", notificationsSignUpSettingsLoaded);
|
||||||
editor.putLong("autoDownloadConfigLoadTime", autoDownloadConfigLoadTime);
|
editor.putLong("autoDownloadConfigLoadTime", autoDownloadConfigLoadTime);
|
||||||
editor.putBoolean("hasValidDialogLoadIds", hasValidDialogLoadIds);
|
editor.putBoolean("hasValidDialogLoadIds", hasValidDialogLoadIds);
|
||||||
|
editor.putInt("sharingMyLocationUntil", sharingMyLocationUntil);
|
||||||
|
editor.putInt("lastMyLocationShareTime", lastMyLocationShareTime);
|
||||||
if (tonEncryptedData != null) {
|
if (tonEncryptedData != null) {
|
||||||
editor.putString("tonEncryptedData", tonEncryptedData);
|
editor.putString("tonEncryptedData", tonEncryptedData);
|
||||||
editor.putString("tonPublicKey", tonPublicKey);
|
editor.putString("tonPublicKey", tonPublicKey);
|
||||||
|
@ -296,6 +301,8 @@ public class UserConfig extends BaseController {
|
||||||
tonPublicKey = preferences.getString("tonPublicKey", null);
|
tonPublicKey = preferences.getString("tonPublicKey", null);
|
||||||
tonKeyName = preferences.getString("tonKeyName", "walletKey" + currentAccount);
|
tonKeyName = preferences.getString("tonKeyName", "walletKey" + currentAccount);
|
||||||
tonCreationFinished = preferences.getBoolean("tonCreationFinished", true);
|
tonCreationFinished = preferences.getBoolean("tonCreationFinished", true);
|
||||||
|
sharingMyLocationUntil = preferences.getInt("sharingMyLocationUntil", 0);
|
||||||
|
lastMyLocationShareTime = preferences.getInt("lastMyLocationShareTime", 0);
|
||||||
String salt = preferences.getString("tonPasscodeSalt", null);
|
String salt = preferences.getString("tonPasscodeSalt", null);
|
||||||
if (salt != null) {
|
if (salt != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -443,6 +450,8 @@ public class UserConfig extends BaseController {
|
||||||
getPreferences().edit().clear().commit();
|
getPreferences().edit().clear().commit();
|
||||||
clearTonConfig();
|
clearTonConfig();
|
||||||
|
|
||||||
|
sharingMyLocationUntil = 0;
|
||||||
|
lastMyLocationShareTime = 0;
|
||||||
currentUser = null;
|
currentUser = null;
|
||||||
clientUserId = 0;
|
clientUserId = 0;
|
||||||
registeredForPush = false;
|
registeredForPush = false;
|
||||||
|
|
|
@ -61,7 +61,7 @@ public class TLRPC {
|
||||||
public static final int MESSAGE_FLAG_EDITED = 0x00008000;
|
public static final int MESSAGE_FLAG_EDITED = 0x00008000;
|
||||||
public static final int MESSAGE_FLAG_MEGAGROUP = 0x80000000;
|
public static final int MESSAGE_FLAG_MEGAGROUP = 0x80000000;
|
||||||
|
|
||||||
public static final int LAYER = 109;
|
public static final int LAYER = 110;
|
||||||
|
|
||||||
public static class TL_chatBannedRights extends TLObject {
|
public static class TL_chatBannedRights extends TLObject {
|
||||||
public static int constructor = 0x9f120418;
|
public static int constructor = 0x9f120418;
|
||||||
|
@ -12837,6 +12837,86 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_dialogFilter extends TLObject {
|
||||||
|
public static int constructor = 0x14f9162c;
|
||||||
|
|
||||||
|
public int flags;
|
||||||
|
public boolean pm;
|
||||||
|
public boolean secret_chats;
|
||||||
|
public boolean private_groups;
|
||||||
|
public boolean public_groups;
|
||||||
|
public boolean broadcasts;
|
||||||
|
public boolean bots;
|
||||||
|
public boolean exclude_muted;
|
||||||
|
public boolean exclude_read;
|
||||||
|
public int id;
|
||||||
|
public String title;
|
||||||
|
public ArrayList<InputPeer> include_peers = new ArrayList<>();
|
||||||
|
|
||||||
|
public static TL_dialogFilter TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
if (TL_dialogFilter.constructor != constructor) {
|
||||||
|
if (exception) {
|
||||||
|
throw new RuntimeException(String.format("can't parse magic %x in TL_dialogFilter", constructor));
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TL_dialogFilter result = new TL_dialogFilter();
|
||||||
|
result.readParams(stream, exception);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
flags = stream.readInt32(exception);
|
||||||
|
pm = (flags & 1) != 0;
|
||||||
|
secret_chats = (flags & 2) != 0;
|
||||||
|
private_groups = (flags & 4) != 0;
|
||||||
|
public_groups = (flags & 8) != 0;
|
||||||
|
broadcasts = (flags & 16) != 0;
|
||||||
|
bots = (flags & 32) != 0;
|
||||||
|
exclude_muted = (flags & 2048) != 0;
|
||||||
|
exclude_read = (flags & 4096) != 0;
|
||||||
|
id = stream.readInt32(exception);
|
||||||
|
title = stream.readString(exception);
|
||||||
|
int magic = stream.readInt32(exception);
|
||||||
|
if (magic != 0x1cb5c415) {
|
||||||
|
if (exception) {
|
||||||
|
throw new RuntimeException(String.format("wrong Vector magic, got %x", magic));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int count = stream.readInt32(exception);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
InputPeer object = InputPeer.TLdeserialize(stream, stream.readInt32(exception), exception);
|
||||||
|
if (object == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
include_peers.add(object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
flags = pm ? (flags | 1) : (flags &~ 1);
|
||||||
|
flags = secret_chats ? (flags | 2) : (flags &~ 2);
|
||||||
|
flags = private_groups ? (flags | 4) : (flags &~ 4);
|
||||||
|
flags = public_groups ? (flags | 8) : (flags &~ 8);
|
||||||
|
flags = broadcasts ? (flags | 16) : (flags &~ 16);
|
||||||
|
flags = bots ? (flags | 32) : (flags &~ 32);
|
||||||
|
flags = exclude_muted ? (flags | 2048) : (flags &~ 2048);
|
||||||
|
flags = exclude_read ? (flags | 4096) : (flags &~ 4096);
|
||||||
|
stream.writeInt32(flags);
|
||||||
|
stream.writeInt32(id);
|
||||||
|
stream.writeString(title);
|
||||||
|
stream.writeInt32(0x1cb5c415);
|
||||||
|
int count = include_peers.size();
|
||||||
|
stream.writeInt32(count);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
include_peers.get(a).serializeToStream(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_auth_passwordRecovery extends TLObject {
|
public static class TL_auth_passwordRecovery extends TLObject {
|
||||||
public static int constructor = 0x137948a5;
|
public static int constructor = 0x137948a5;
|
||||||
|
|
||||||
|
@ -14415,6 +14495,56 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_payments_bankCardData extends TLObject {
|
||||||
|
public static int constructor = 0x3e24e573;
|
||||||
|
|
||||||
|
public String title;
|
||||||
|
public ArrayList<TL_bankCardOpenUrl> open_urls = new ArrayList<>();
|
||||||
|
|
||||||
|
public static TL_payments_bankCardData TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
if (TL_payments_bankCardData.constructor != constructor) {
|
||||||
|
if (exception) {
|
||||||
|
throw new RuntimeException(String.format("can't parse magic %x in TL_payments_bankCardData", constructor));
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TL_payments_bankCardData result = new TL_payments_bankCardData();
|
||||||
|
result.readParams(stream, exception);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
title = stream.readString(exception);
|
||||||
|
int magic = stream.readInt32(exception);
|
||||||
|
if (magic != 0x1cb5c415) {
|
||||||
|
if (exception) {
|
||||||
|
throw new RuntimeException(String.format("wrong Vector magic, got %x", magic));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int count = stream.readInt32(exception);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
TL_bankCardOpenUrl object = TL_bankCardOpenUrl.TLdeserialize(stream, stream.readInt32(exception), exception);
|
||||||
|
if (object == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
open_urls.add(object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeString(title);
|
||||||
|
stream.writeInt32(0x1cb5c415);
|
||||||
|
int count = open_urls.size();
|
||||||
|
stream.writeInt32(count);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
open_urls.get(a).serializeToStream(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_messages_highScores extends TLObject {
|
public static class TL_messages_highScores extends TLObject {
|
||||||
public static int constructor = 0x9a3bfd99;
|
public static int constructor = 0x9a3bfd99;
|
||||||
|
|
||||||
|
@ -20008,6 +20138,9 @@ public class TLRPC {
|
||||||
case 0x154798c3:
|
case 0x154798c3:
|
||||||
result = new TL_updateMessageReactions();
|
result = new TL_updateMessageReactions();
|
||||||
break;
|
break;
|
||||||
|
case 0x26ffde7d:
|
||||||
|
result = new TL_updateDialogFilter();
|
||||||
|
break;
|
||||||
case 0xfa0f3ca2:
|
case 0xfa0f3ca2:
|
||||||
result = new TL_updatePinnedDialogs();
|
result = new TL_updatePinnedDialogs();
|
||||||
break;
|
break;
|
||||||
|
@ -20017,6 +20150,9 @@ public class TLRPC {
|
||||||
case 0x9c974fdf:
|
case 0x9c974fdf:
|
||||||
result = new TL_updateReadHistoryInbox();
|
result = new TL_updateReadHistoryInbox();
|
||||||
break;
|
break;
|
||||||
|
case 0xa5d72105:
|
||||||
|
result = new TL_updateDialogFilterOrder();
|
||||||
|
break;
|
||||||
case 0x9375341e:
|
case 0x9375341e:
|
||||||
result = new TL_updateSavedGifs();
|
result = new TL_updateSavedGifs();
|
||||||
break;
|
break;
|
||||||
|
@ -20038,6 +20174,9 @@ public class TLRPC {
|
||||||
case 0x95313b0c:
|
case 0x95313b0c:
|
||||||
result = new TL_updateUserPhoto();
|
result = new TL_updateUserPhoto();
|
||||||
break;
|
break;
|
||||||
|
case 0x3504914f:
|
||||||
|
result = new TL_updateDialogFilters();
|
||||||
|
break;
|
||||||
case 0x8e5e9873:
|
case 0x8e5e9873:
|
||||||
result = new TL_updateDcOptions();
|
result = new TL_updateDcOptions();
|
||||||
break;
|
break;
|
||||||
|
@ -20600,7 +20739,7 @@ public class TLRPC {
|
||||||
public static class TL_updatePeerLocated extends Update {
|
public static class TL_updatePeerLocated extends Update {
|
||||||
public static int constructor = 0xb4afcfb0;
|
public static int constructor = 0xb4afcfb0;
|
||||||
|
|
||||||
public ArrayList<TL_peerLocated> peers = new ArrayList<>();
|
public ArrayList<PeerLocated> peers = new ArrayList<>();
|
||||||
|
|
||||||
public void readParams(AbstractSerializedData stream, boolean exception) {
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
int magic = stream.readInt32(exception);
|
int magic = stream.readInt32(exception);
|
||||||
|
@ -20612,7 +20751,7 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
int count = stream.readInt32(exception);
|
int count = stream.readInt32(exception);
|
||||||
for (int a = 0; a < count; a++) {
|
for (int a = 0; a < count; a++) {
|
||||||
TL_peerLocated object = TL_peerLocated.TLdeserialize(stream, stream.readInt32(exception), exception);
|
PeerLocated object = PeerLocated.TLdeserialize(stream, stream.readInt32(exception), exception);
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -21101,6 +21240,31 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_updateDialogFilter extends Update {
|
||||||
|
public static int constructor = 0x26ffde7d;
|
||||||
|
|
||||||
|
public int flags;
|
||||||
|
public int id;
|
||||||
|
public TL_dialogFilter filter;
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
flags = stream.readInt32(exception);
|
||||||
|
id = stream.readInt32(exception);
|
||||||
|
if ((flags & 1) != 0) {
|
||||||
|
filter = TL_dialogFilter.TLdeserialize(stream, stream.readInt32(exception), exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeInt32(flags);
|
||||||
|
stream.writeInt32(id);
|
||||||
|
if ((flags & 1) != 0) {
|
||||||
|
filter.serializeToStream(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_updatePinnedDialogs extends Update {
|
public static class TL_updatePinnedDialogs extends Update {
|
||||||
public static int constructor = 0xfa0f3ca2;
|
public static int constructor = 0xfa0f3ca2;
|
||||||
|
|
||||||
|
@ -21195,6 +21359,36 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_updateDialogFilterOrder extends Update {
|
||||||
|
public static int constructor = 0xa5d72105;
|
||||||
|
|
||||||
|
public ArrayList<Integer> order = new ArrayList<>();
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
int magic = stream.readInt32(exception);
|
||||||
|
if (magic != 0x1cb5c415) {
|
||||||
|
if (exception) {
|
||||||
|
throw new RuntimeException(String.format("wrong Vector magic, got %x", magic));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int count = stream.readInt32(exception);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
order.add(stream.readInt32(exception));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeInt32(0x1cb5c415);
|
||||||
|
int count = order.size();
|
||||||
|
stream.writeInt32(count);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
stream.writeInt32(order.get(a));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_updateSavedGifs extends Update {
|
public static class TL_updateSavedGifs extends Update {
|
||||||
public static int constructor = 0x9375341e;
|
public static int constructor = 0x9375341e;
|
||||||
|
|
||||||
|
@ -21348,6 +21542,15 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_updateDialogFilters extends Update {
|
||||||
|
public static int constructor = 0x3504914f;
|
||||||
|
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_updateDcOptions extends Update {
|
public static class TL_updateDcOptions extends Update {
|
||||||
public static int constructor = 0x8e5e9873;
|
public static int constructor = 0x8e5e9873;
|
||||||
|
|
||||||
|
@ -22407,6 +22610,9 @@ public class TLRPC {
|
||||||
break;
|
break;
|
||||||
case 0x9c4e7e8b:
|
case 0x9c4e7e8b:
|
||||||
result = new TL_messageEntityUnderline();
|
result = new TL_messageEntityUnderline();
|
||||||
|
break;
|
||||||
|
case 0x761e6af4:
|
||||||
|
result = new TL_messageEntityBankCard();
|
||||||
break;
|
break;
|
||||||
case 0x9b69e34b:
|
case 0x9b69e34b:
|
||||||
result = new TL_messageEntityPhone();
|
result = new TL_messageEntityPhone();
|
||||||
|
@ -22691,6 +22897,22 @@ public class TLRPC {
|
||||||
public static int constructor = 0x9c4e7e8b;
|
public static int constructor = 0x9c4e7e8b;
|
||||||
|
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
offset = stream.readInt32(exception);
|
||||||
|
length = stream.readInt32(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeInt32(offset);
|
||||||
|
stream.writeInt32(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TL_messageEntityBankCard extends MessageEntity {
|
||||||
|
public static int constructor = 0x761e6af4;
|
||||||
|
|
||||||
|
|
||||||
public void readParams(AbstractSerializedData stream, boolean exception) {
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
offset = stream.readInt32(exception);
|
offset = stream.readInt32(exception);
|
||||||
length = stream.readInt32(exception);
|
length = stream.readInt32(exception);
|
||||||
|
@ -25184,6 +25406,37 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_bankCardOpenUrl extends TLObject {
|
||||||
|
public static int constructor = 0xf568028a;
|
||||||
|
|
||||||
|
public String url;
|
||||||
|
public String name;
|
||||||
|
|
||||||
|
public static TL_bankCardOpenUrl TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
if (TL_bankCardOpenUrl.constructor != constructor) {
|
||||||
|
if (exception) {
|
||||||
|
throw new RuntimeException(String.format("can't parse magic %x in TL_bankCardOpenUrl", constructor));
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TL_bankCardOpenUrl result = new TL_bankCardOpenUrl();
|
||||||
|
result.readParams(stream, exception);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
url = stream.readString(exception);
|
||||||
|
name = stream.readString(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeString(url);
|
||||||
|
stream.writeString(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_contacts_resolvedPeer extends TLObject {
|
public static class TL_contacts_resolvedPeer extends TLObject {
|
||||||
public static int constructor = 0x7f077ad9;
|
public static int constructor = 0x7f077ad9;
|
||||||
|
|
||||||
|
@ -27713,26 +27966,50 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TL_peerLocated extends TLObject {
|
public static abstract class PeerLocated extends TLObject {
|
||||||
|
|
||||||
|
public static PeerLocated TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
PeerLocated result = null;
|
||||||
|
switch (constructor) {
|
||||||
|
case 0xf8ec284b:
|
||||||
|
result = new TL_peerSelfLocated();
|
||||||
|
break;
|
||||||
|
case 0xca461b5d:
|
||||||
|
result = new TL_peerLocated();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (result == null && exception) {
|
||||||
|
throw new RuntimeException(String.format("can't parse magic %x in PeerLocated", constructor));
|
||||||
|
}
|
||||||
|
if (result != null) {
|
||||||
|
result.readParams(stream, exception);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TL_peerSelfLocated extends PeerLocated {
|
||||||
|
public static int constructor = 0xf8ec284b;
|
||||||
|
|
||||||
|
public int expires;
|
||||||
|
|
||||||
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
|
expires = stream.readInt32(exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeInt32(expires);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TL_peerLocated extends PeerLocated {
|
||||||
public static int constructor = 0xca461b5d;
|
public static int constructor = 0xca461b5d;
|
||||||
|
|
||||||
public Peer peer;
|
public Peer peer;
|
||||||
public int expires;
|
public int expires;
|
||||||
public int distance;
|
public int distance;
|
||||||
|
|
||||||
public static TL_peerLocated TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
|
|
||||||
if (TL_peerLocated.constructor != constructor) {
|
|
||||||
if (exception) {
|
|
||||||
throw new RuntimeException(String.format("can't parse magic %x in TL_peerLocated", constructor));
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TL_peerLocated result = new TL_peerLocated();
|
|
||||||
result.readParams(stream, exception);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void readParams(AbstractSerializedData stream, boolean exception) {
|
public void readParams(AbstractSerializedData stream, boolean exception) {
|
||||||
peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception);
|
peer = Peer.TLdeserialize(stream, stream.readInt32(exception), exception);
|
||||||
expires = stream.readInt32(exception);
|
expires = stream.readInt32(exception);
|
||||||
|
@ -33740,9 +34017,12 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TL_contacts_getLocated extends TLObject {
|
public static class TL_contacts_getLocated extends TLObject {
|
||||||
public static int constructor = 0xa356056;
|
public static int constructor = 0xd348bc44;
|
||||||
|
|
||||||
|
public int flags;
|
||||||
|
public boolean background;
|
||||||
public InputGeoPoint geo_point;
|
public InputGeoPoint geo_point;
|
||||||
|
public int self_expires;
|
||||||
|
|
||||||
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
|
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
return Updates.TLdeserialize(stream, constructor, exception);
|
return Updates.TLdeserialize(stream, constructor, exception);
|
||||||
|
@ -33750,7 +34030,12 @@ public class TLRPC {
|
||||||
|
|
||||||
public void serializeToStream(AbstractSerializedData stream) {
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
stream.writeInt32(constructor);
|
stream.writeInt32(constructor);
|
||||||
|
flags = background ? (flags | 2) : (flags &~ 2);
|
||||||
|
stream.writeInt32(flags);
|
||||||
geo_point.serializeToStream(stream);
|
geo_point.serializeToStream(stream);
|
||||||
|
if ((flags & 1) != 0) {
|
||||||
|
stream.writeInt32(self_expires);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37637,6 +37922,69 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_messages_getDialogFilters extends TLObject {
|
||||||
|
public static int constructor = 0xf19ed96d;
|
||||||
|
|
||||||
|
|
||||||
|
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
Vector vector = new Vector();
|
||||||
|
int size = stream.readInt32(exception);
|
||||||
|
for (int a = 0; a < size; a++) {
|
||||||
|
TL_dialogFilter object = TL_dialogFilter.TLdeserialize(stream, stream.readInt32(exception), exception);
|
||||||
|
if (object == null) {
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
vector.objects.add(object);
|
||||||
|
}
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TL_messages_updateDialogFilter extends TLObject {
|
||||||
|
public static int constructor = 0x1ad4a04a;
|
||||||
|
|
||||||
|
public int flags;
|
||||||
|
public int id;
|
||||||
|
public TL_dialogFilter filter;
|
||||||
|
|
||||||
|
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
return Bool.TLdeserialize(stream, constructor, exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeInt32(flags);
|
||||||
|
stream.writeInt32(id);
|
||||||
|
if ((flags & 1) != 0) {
|
||||||
|
filter.serializeToStream(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TL_messages_updateDialogFiltersOrder extends TLObject {
|
||||||
|
public static int constructor = 0xc563c1e4;
|
||||||
|
|
||||||
|
public ArrayList<Integer> order = new ArrayList<>();
|
||||||
|
|
||||||
|
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
return Bool.TLdeserialize(stream, constructor, exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeInt32(0x1cb5c415);
|
||||||
|
int count = order.size();
|
||||||
|
stream.writeInt32(count);
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
stream.writeInt32(order.get(a));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_help_getAppChangelog extends TLObject {
|
public static class TL_help_getAppChangelog extends TLObject {
|
||||||
public static int constructor = 0x9010ef6f;
|
public static int constructor = 0x9010ef6f;
|
||||||
|
|
||||||
|
@ -39017,6 +39365,21 @@ public class TLRPC {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class TL_payments_getBankCardData extends TLObject {
|
||||||
|
public static int constructor = 0x2e79d779;
|
||||||
|
|
||||||
|
public String number;
|
||||||
|
|
||||||
|
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
|
||||||
|
return TL_payments_bankCardData.TLdeserialize(stream, constructor, exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void serializeToStream(AbstractSerializedData stream) {
|
||||||
|
stream.writeInt32(constructor);
|
||||||
|
stream.writeString(number);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class TL_langpack_getLangPack extends TLObject {
|
public static class TL_langpack_getLangPack extends TLObject {
|
||||||
public static int constructor = 0x9ab5c58e;
|
public static int constructor = 0x9ab5c58e;
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ public class ActionBar extends FrameLayout {
|
||||||
addToContainer = value;
|
addToContainer = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getAddToContainer() {
|
public boolean shouldAddToContainer() {
|
||||||
return addToContainer;
|
return addToContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@ import android.view.ViewOutlineProvider;
|
||||||
import android.view.animation.AccelerateDecelerateInterpolator;
|
import android.view.animation.AccelerateDecelerateInterpolator;
|
||||||
import android.view.animation.DecelerateInterpolator;
|
import android.view.animation.DecelerateInterpolator;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.LinearLayout;
|
|
||||||
|
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
|
@ -58,14 +57,13 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
void onRebuildAllFragments(ActionBarLayout layout, boolean last);
|
void onRebuildAllFragments(ActionBarLayout layout, boolean last);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LinearLayoutContainer extends LinearLayout {
|
public class LayoutContainer extends AdjustPanFrameLayout {
|
||||||
|
|
||||||
private Rect rect = new Rect();
|
private Rect rect = new Rect();
|
||||||
private boolean isKeyboardVisible;
|
private boolean isKeyboardVisible;
|
||||||
|
|
||||||
public LinearLayoutContainer(Context context) {
|
public LayoutContainer(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
setOrientation(VERTICAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -74,6 +72,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
return super.drawChild(canvas, child, drawingTime);
|
return super.drawChild(canvas, child, drawingTime);
|
||||||
} else {
|
} else {
|
||||||
int actionBarHeight = 0;
|
int actionBarHeight = 0;
|
||||||
|
int actionBarY = 0;
|
||||||
int childCount = getChildCount();
|
int childCount = getChildCount();
|
||||||
for (int a = 0; a < childCount; a++) {
|
for (int a = 0; a < childCount; a++) {
|
||||||
View view = getChildAt(a);
|
View view = getChildAt(a);
|
||||||
|
@ -83,13 +82,14 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (view instanceof ActionBar && view.getVisibility() == VISIBLE) {
|
if (view instanceof ActionBar && view.getVisibility() == VISIBLE) {
|
||||||
if (((ActionBar) view).getCastShadows()) {
|
if (((ActionBar) view).getCastShadows()) {
|
||||||
actionBarHeight = view.getMeasuredHeight();
|
actionBarHeight = view.getMeasuredHeight();
|
||||||
|
actionBarY = (int) view.getY();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean result = super.drawChild(canvas, child, drawingTime);
|
boolean result = super.drawChild(canvas, child, drawingTime);
|
||||||
if (actionBarHeight != 0 && headerShadowDrawable != null) {
|
if (actionBarHeight != 0 && headerShadowDrawable != null) {
|
||||||
headerShadowDrawable.setBounds(0, actionBarHeight, getMeasuredWidth(), actionBarHeight + headerShadowDrawable.getIntrinsicHeight());
|
headerShadowDrawable.setBounds(0, actionBarY + actionBarHeight, getMeasuredWidth(), actionBarY + actionBarHeight + headerShadowDrawable.getIntrinsicHeight());
|
||||||
headerShadowDrawable.draw(canvas);
|
headerShadowDrawable.draw(canvas);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -104,9 +104,48 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
int width = MeasureSpec.getSize(widthMeasureSpec);
|
||||||
|
int height = MeasureSpec.getSize(heightMeasureSpec);
|
||||||
|
int count = getChildCount();
|
||||||
|
int actionBarHeight = 0;
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
View child = getChildAt(a);
|
||||||
|
if (child instanceof ActionBar) {
|
||||||
|
child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.UNSPECIFIED));
|
||||||
|
actionBarHeight = child.getMeasuredHeight();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
View child = getChildAt(a);
|
||||||
|
if (!(child instanceof ActionBar)) {
|
||||||
|
measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, actionBarHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setMeasuredDimension(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
super.onLayout(changed, l, t, r, b);
|
int count = getChildCount();
|
||||||
|
int actionBarHeight = 0;
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
View child = getChildAt(a);
|
||||||
|
if (child instanceof ActionBar) {
|
||||||
|
actionBarHeight = child.getMeasuredHeight();
|
||||||
|
child.layout(0, 0, child.getMeasuredWidth(), actionBarHeight);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
View child = getChildAt(a);
|
||||||
|
if (!(child instanceof ActionBar)) {
|
||||||
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) child.getLayoutParams();
|
||||||
|
child.layout(layoutParams.leftMargin, layoutParams.topMargin + actionBarHeight, layoutParams.leftMargin + child.getMeasuredWidth(), layoutParams.topMargin + actionBarHeight + child.getMeasuredHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
View rootView = getRootView();
|
View rootView = getRootView();
|
||||||
getWindowVisibleDisplayFrame(rect);
|
getWindowVisibleDisplayFrame(rect);
|
||||||
|
@ -132,6 +171,40 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
currentPanTranslationY = y;
|
||||||
|
int count = getChildCount();
|
||||||
|
for (int a = 0; a < count; a++) {
|
||||||
|
View child = getChildAt(a);
|
||||||
|
if (child instanceof ActionBar) {
|
||||||
|
child.setTranslationY(y);
|
||||||
|
} else {
|
||||||
|
if (this == layoutToIgnore) {
|
||||||
|
child.setTranslationY(y);
|
||||||
|
} else {
|
||||||
|
child.setTranslationY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (layoutToIgnore == null && !fragmentsStack.isEmpty()) {
|
||||||
|
fragmentsStack.get(fragmentsStack.size() - 1).onPanTranslationUpdate(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onTransitionStart() {
|
||||||
|
fragmentsStack.get(fragmentsStack.size() - 1).onPanTransitionStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onTransitionEnd() {
|
||||||
|
fragmentsStack.get(fragmentsStack.size() - 1).onPanTransitionEnd();
|
||||||
|
if (layoutToIgnore != null && !transitionAnimationInProgress && !startedTracking) {
|
||||||
|
layoutToIgnore = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Drawable headerShadowDrawable;
|
private static Drawable headerShadowDrawable;
|
||||||
|
@ -142,10 +215,11 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
private Runnable delayedOpenAnimationRunnable;
|
private Runnable delayedOpenAnimationRunnable;
|
||||||
|
|
||||||
private boolean inPreviewMode;
|
private boolean inPreviewMode;
|
||||||
|
private boolean previewOpenAnimationInProgress;
|
||||||
private ColorDrawable previewBackgroundDrawable;
|
private ColorDrawable previewBackgroundDrawable;
|
||||||
|
|
||||||
private LinearLayoutContainer containerView;
|
private LayoutContainer containerView;
|
||||||
private LinearLayoutContainer containerViewBack;
|
private LayoutContainer containerViewBack;
|
||||||
private DrawerLayoutContainer drawerLayoutContainer;
|
private DrawerLayoutContainer drawerLayoutContainer;
|
||||||
private ActionBar currentActionBar;
|
private ActionBar currentActionBar;
|
||||||
|
|
||||||
|
@ -155,12 +229,15 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
|
|
||||||
public float innerTranslationX;
|
public float innerTranslationX;
|
||||||
|
|
||||||
|
private int currentPanTranslationY;
|
||||||
|
|
||||||
private boolean maybeStartTracking;
|
private boolean maybeStartTracking;
|
||||||
protected boolean startedTracking;
|
protected boolean startedTracking;
|
||||||
private int startedTrackingX;
|
private int startedTrackingX;
|
||||||
private int startedTrackingY;
|
private int startedTrackingY;
|
||||||
protected boolean animationInProgress;
|
protected boolean animationInProgress;
|
||||||
private VelocityTracker velocityTracker;
|
private VelocityTracker velocityTracker;
|
||||||
|
private View layoutToIgnore;
|
||||||
private boolean beginTrackingSent;
|
private boolean beginTrackingSent;
|
||||||
private boolean transitionAnimationInProgress;
|
private boolean transitionAnimationInProgress;
|
||||||
private boolean transitionAnimationPreviewMode;
|
private boolean transitionAnimationPreviewMode;
|
||||||
|
@ -213,7 +290,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
|
|
||||||
public void init(ArrayList<BaseFragment> stack) {
|
public void init(ArrayList<BaseFragment> stack) {
|
||||||
fragmentsStack = stack;
|
fragmentsStack = stack;
|
||||||
containerViewBack = new LinearLayoutContainer(parentActivity);
|
containerViewBack = new LayoutContainer(parentActivity);
|
||||||
addView(containerViewBack);
|
addView(containerViewBack);
|
||||||
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) containerViewBack.getLayoutParams();
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) containerViewBack.getLayoutParams();
|
||||||
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
||||||
|
@ -221,7 +298,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
|
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
|
||||||
containerViewBack.setLayoutParams(layoutParams);
|
containerViewBack.setLayoutParams(layoutParams);
|
||||||
|
|
||||||
containerView = new LinearLayoutContainer(parentActivity);
|
containerView = new LayoutContainer(parentActivity);
|
||||||
addView(containerView);
|
addView(containerView);
|
||||||
layoutParams = (FrameLayout.LayoutParams) containerView.getLayoutParams();
|
layoutParams = (FrameLayout.LayoutParams) containerView.getLayoutParams();
|
||||||
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
||||||
|
@ -249,7 +326,12 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawHeaderShadow(Canvas canvas, int y) {
|
public void drawHeaderShadow(Canvas canvas, int y) {
|
||||||
|
drawHeaderShadow(canvas, 255, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawHeaderShadow(Canvas canvas, int alpha, int y) {
|
||||||
if (headerShadowDrawable != null) {
|
if (headerShadowDrawable != null) {
|
||||||
|
headerShadowDrawable.setAlpha(alpha);
|
||||||
headerShadowDrawable.setBounds(0, y, getMeasuredWidth(), y + headerShadowDrawable.getIntrinsicHeight());
|
headerShadowDrawable.setBounds(0, y, getMeasuredWidth(), y + headerShadowDrawable.getIntrinsicHeight());
|
||||||
headerShadowDrawable.draw(canvas);
|
headerShadowDrawable.draw(canvas);
|
||||||
}
|
}
|
||||||
|
@ -273,6 +355,10 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCurrentPanTranslationY() {
|
||||||
|
return currentPanTranslationY;
|
||||||
|
}
|
||||||
|
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
if (transitionAnimationInProgress) {
|
if (transitionAnimationInProgress) {
|
||||||
if (currentAnimation != null) {
|
if (currentAnimation != null) {
|
||||||
|
@ -382,7 +468,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
lastFragment.setParentLayout(null);
|
lastFragment.setParentLayout(null);
|
||||||
fragmentsStack.remove(fragmentsStack.size() - 1);
|
fragmentsStack.remove(fragmentsStack.size() - 1);
|
||||||
|
|
||||||
LinearLayoutContainer temp = containerView;
|
LayoutContainer temp = containerView;
|
||||||
containerView = containerViewBack;
|
containerView = containerViewBack;
|
||||||
containerViewBack = temp;
|
containerViewBack = temp;
|
||||||
bringChildToFront(containerView);
|
bringChildToFront(containerView);
|
||||||
|
@ -391,6 +477,8 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
currentActionBar = lastFragment.actionBar;
|
currentActionBar = lastFragment.actionBar;
|
||||||
lastFragment.onResume();
|
lastFragment.onResume();
|
||||||
lastFragment.onBecomeFullyVisible();
|
lastFragment.onBecomeFullyVisible();
|
||||||
|
|
||||||
|
layoutToIgnore = containerView;
|
||||||
} else {
|
} else {
|
||||||
if (fragmentsStack.size() >= 2) {
|
if (fragmentsStack.size() >= 2) {
|
||||||
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 2);
|
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 2);
|
||||||
|
@ -402,13 +490,14 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
parent.removeViewInLayout(lastFragment.fragmentView);
|
parent.removeViewInLayout(lastFragment.fragmentView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lastFragment.actionBar != null && lastFragment.actionBar.getAddToContainer()) {
|
if (lastFragment.actionBar != null && lastFragment.actionBar.shouldAddToContainer()) {
|
||||||
ViewGroup parent = (ViewGroup) lastFragment.actionBar.getParent();
|
ViewGroup parent = (ViewGroup) lastFragment.actionBar.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
parent.removeViewInLayout(lastFragment.actionBar);
|
parent.removeViewInLayout(lastFragment.actionBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
layoutToIgnore = null;
|
||||||
}
|
}
|
||||||
containerViewBack.setVisibility(View.INVISIBLE);
|
containerViewBack.setVisibility(View.INVISIBLE);
|
||||||
startedTracking = false;
|
startedTracking = false;
|
||||||
|
@ -421,6 +510,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
private void prepareForMoving(MotionEvent ev) {
|
private void prepareForMoving(MotionEvent ev) {
|
||||||
maybeStartTracking = false;
|
maybeStartTracking = false;
|
||||||
startedTracking = true;
|
startedTracking = true;
|
||||||
|
layoutToIgnore = containerViewBack;
|
||||||
startedTrackingX = (int) ev.getX();
|
startedTrackingX = (int) ev.getX();
|
||||||
containerViewBack.setVisibility(View.VISIBLE);
|
containerViewBack.setVisibility(View.VISIBLE);
|
||||||
beginTrackingSent = false;
|
beginTrackingSent = false;
|
||||||
|
@ -435,7 +525,13 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
lastFragment.onRemoveFromParent();
|
lastFragment.onRemoveFromParent();
|
||||||
parent.removeView(fragmentView);
|
parent.removeView(fragmentView);
|
||||||
}
|
}
|
||||||
if (lastFragment.actionBar != null && lastFragment.actionBar.getAddToContainer()) {
|
containerViewBack.addView(fragmentView);
|
||||||
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) fragmentView.getLayoutParams();
|
||||||
|
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
||||||
|
layoutParams.height = LayoutHelper.MATCH_PARENT;
|
||||||
|
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
||||||
|
fragmentView.setLayoutParams(layoutParams);
|
||||||
|
if (lastFragment.actionBar != null && lastFragment.actionBar.shouldAddToContainer()) {
|
||||||
parent = (ViewGroup) lastFragment.actionBar.getParent();
|
parent = (ViewGroup) lastFragment.actionBar.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
parent.removeView(lastFragment.actionBar);
|
parent.removeView(lastFragment.actionBar);
|
||||||
|
@ -446,12 +542,6 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
containerViewBack.addView(lastFragment.actionBar);
|
containerViewBack.addView(lastFragment.actionBar);
|
||||||
lastFragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
lastFragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
||||||
}
|
}
|
||||||
containerViewBack.addView(fragmentView);
|
|
||||||
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) fragmentView.getLayoutParams();
|
|
||||||
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
|
||||||
layoutParams.height = LayoutHelper.MATCH_PARENT;
|
|
||||||
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
|
||||||
fragmentView.setLayoutParams(layoutParams);
|
|
||||||
if (!lastFragment.hasOwnBackground && fragmentView.getBackground() == null) {
|
if (!lastFragment.hasOwnBackground && fragmentView.getBackground() == null) {
|
||||||
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||||
}
|
}
|
||||||
|
@ -466,7 +556,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (fragmentsStack.size() > 1) {
|
if (fragmentsStack.size() > 1) {
|
||||||
if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN && !startedTracking && !maybeStartTracking) {
|
if (ev != null && ev.getAction() == MotionEvent.ACTION_DOWN && !startedTracking && !maybeStartTracking) {
|
||||||
BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
if (!currentFragment.swipeBackEnabled) {
|
if (!currentFragment.isSwipeBackEnabled(ev)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
startedTrackingPointerId = ev.getPointerId(0);
|
startedTrackingPointerId = ev.getPointerId(0);
|
||||||
|
@ -508,7 +598,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
velocityTracker.computeCurrentVelocity(1000);
|
velocityTracker.computeCurrentVelocity(1000);
|
||||||
BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
if (!inPreviewMode && !transitionAnimationPreviewMode && !startedTracking && currentFragment.swipeBackEnabled) {
|
if (!inPreviewMode && !transitionAnimationPreviewMode && !startedTracking && currentFragment.isSwipeBackEnabled(ev)) {
|
||||||
float velX = velocityTracker.getXVelocity();
|
float velX = velocityTracker.getXVelocity();
|
||||||
float velY = velocityTracker.getYVelocity();
|
float velY = velocityTracker.getYVelocity();
|
||||||
if (velX >= 3500 && velX > Math.abs(velY) && currentFragment.canBeginSlide()) {
|
if (velX >= 3500 && velX > Math.abs(velY) && currentFragment.canBeginSlide()) {
|
||||||
|
@ -551,9 +641,11 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
});
|
});
|
||||||
animatorSet.start();
|
animatorSet.start();
|
||||||
animationInProgress = true;
|
animationInProgress = true;
|
||||||
|
layoutToIgnore = containerViewBack;
|
||||||
} else {
|
} else {
|
||||||
maybeStartTracking = false;
|
maybeStartTracking = false;
|
||||||
startedTracking = false;
|
startedTracking = false;
|
||||||
|
layoutToIgnore = null;
|
||||||
}
|
}
|
||||||
if (velocityTracker != null) {
|
if (velocityTracker != null) {
|
||||||
velocityTracker.recycle();
|
velocityTracker.recycle();
|
||||||
|
@ -562,6 +654,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
} else if (ev == null) {
|
} else if (ev == null) {
|
||||||
maybeStartTracking = false;
|
maybeStartTracking = false;
|
||||||
startedTracking = false;
|
startedTracking = false;
|
||||||
|
layoutToIgnore = null;
|
||||||
if (velocityTracker != null) {
|
if (velocityTracker != null) {
|
||||||
velocityTracker.recycle();
|
velocityTracker.recycle();
|
||||||
velocityTracker = null;
|
velocityTracker = null;
|
||||||
|
@ -638,6 +731,10 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
return transitionAnimationInProgress;
|
return transitionAnimationInProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPreviewOpenAnimationInProgress() {
|
||||||
|
return previewOpenAnimationInProgress;
|
||||||
|
}
|
||||||
|
|
||||||
private void presentFragmentInternalRemoveOld(boolean removeLast, final BaseFragment fragment) {
|
private void presentFragmentInternalRemoveOld(boolean removeLast, final BaseFragment fragment) {
|
||||||
if (fragment == null) {
|
if (fragment == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -656,7 +753,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
parent.removeViewInLayout(fragment.fragmentView);
|
parent.removeViewInLayout(fragment.fragmentView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fragment.actionBar != null && fragment.actionBar.getAddToContainer()) {
|
if (fragment.actionBar != null && fragment.actionBar.shouldAddToContainer()) {
|
||||||
ViewGroup parent = (ViewGroup) fragment.actionBar.getParent();
|
ViewGroup parent = (ViewGroup) fragment.actionBar.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
parent.removeViewInLayout(fragment.actionBar);
|
parent.removeViewInLayout(fragment.actionBar);
|
||||||
|
@ -774,20 +871,8 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
parent.removeView(fragmentView);
|
parent.removeView(fragmentView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fragment.actionBar != null && fragment.actionBar.getAddToContainer()) {
|
|
||||||
if (removeActionBarExtraHeight) {
|
|
||||||
fragment.actionBar.setOccupyStatusBar(false);
|
|
||||||
}
|
|
||||||
ViewGroup parent = (ViewGroup) fragment.actionBar.getParent();
|
|
||||||
if (parent != null) {
|
|
||||||
parent.removeView(fragment.actionBar);
|
|
||||||
}
|
|
||||||
containerViewBack.addView(fragment.actionBar);
|
|
||||||
fragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
|
||||||
}
|
|
||||||
|
|
||||||
containerViewBack.addView(fragmentView);
|
containerViewBack.addView(fragmentView);
|
||||||
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) fragmentView.getLayoutParams();
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) fragmentView.getLayoutParams();
|
||||||
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
||||||
layoutParams.height = LayoutHelper.MATCH_PARENT;
|
layoutParams.height = LayoutHelper.MATCH_PARENT;
|
||||||
if (preview) {
|
if (preview) {
|
||||||
|
@ -798,6 +883,17 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
||||||
}
|
}
|
||||||
fragmentView.setLayoutParams(layoutParams);
|
fragmentView.setLayoutParams(layoutParams);
|
||||||
|
if (fragment.actionBar != null && fragment.actionBar.shouldAddToContainer()) {
|
||||||
|
if (removeActionBarExtraHeight) {
|
||||||
|
fragment.actionBar.setOccupyStatusBar(false);
|
||||||
|
}
|
||||||
|
ViewGroup parent = (ViewGroup) fragment.actionBar.getParent();
|
||||||
|
if (parent != null) {
|
||||||
|
parent.removeView(fragment.actionBar);
|
||||||
|
}
|
||||||
|
containerViewBack.addView(fragment.actionBar);
|
||||||
|
fragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
||||||
|
}
|
||||||
fragmentsStack.add(fragment);
|
fragmentsStack.add(fragment);
|
||||||
fragment.onResume();
|
fragment.onResume();
|
||||||
currentActionBar = fragment.actionBar;
|
currentActionBar = fragment.actionBar;
|
||||||
|
@ -805,7 +901,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||||
}
|
}
|
||||||
|
|
||||||
LinearLayoutContainer temp = containerView;
|
LayoutContainer temp = containerView;
|
||||||
containerView = containerViewBack;
|
containerView = containerViewBack;
|
||||||
containerViewBack = temp;
|
containerViewBack = temp;
|
||||||
containerView.setVisibility(View.VISIBLE);
|
containerView.setVisibility(View.VISIBLE);
|
||||||
|
@ -849,6 +945,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
|
|
||||||
transitionAnimationStartTime = System.currentTimeMillis();
|
transitionAnimationStartTime = System.currentTimeMillis();
|
||||||
transitionAnimationInProgress = true;
|
transitionAnimationInProgress = true;
|
||||||
|
layoutToIgnore = containerView;
|
||||||
onOpenAnimationEndRunnable = () -> {
|
onOpenAnimationEndRunnable = () -> {
|
||||||
if (currentFragment != null) {
|
if (currentFragment != null) {
|
||||||
currentFragment.onTransitionAnimationEnd(false, false);
|
currentFragment.onTransitionAnimationEnd(false, false);
|
||||||
|
@ -857,10 +954,10 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
fragment.onBecomeFullyVisible();
|
fragment.onBecomeFullyVisible();
|
||||||
};
|
};
|
||||||
ArrayList<Animator> animators = new ArrayList<>();
|
ArrayList<Animator> animators = new ArrayList<>();
|
||||||
animators.add(ObjectAnimator.ofFloat(this, "alpha", 0.0f, 1.0f));
|
animators.add(ObjectAnimator.ofFloat(this, View.ALPHA, 0.0f, 1.0f));
|
||||||
if (backgroundView != null) {
|
if (backgroundView != null) {
|
||||||
backgroundView.setVisibility(VISIBLE);
|
backgroundView.setVisibility(VISIBLE);
|
||||||
animators.add(ObjectAnimator.ofFloat(backgroundView, "alpha", 0.0f, 1.0f));
|
animators.add(ObjectAnimator.ofFloat(backgroundView, View.ALPHA, 0.0f, 1.0f));
|
||||||
}
|
}
|
||||||
if (currentFragment != null) {
|
if (currentFragment != null) {
|
||||||
currentFragment.onTransitionAnimationStart(false, false);
|
currentFragment.onTransitionAnimationStart(false, false);
|
||||||
|
@ -881,6 +978,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
transitionAnimationPreviewMode = preview;
|
transitionAnimationPreviewMode = preview;
|
||||||
transitionAnimationStartTime = System.currentTimeMillis();
|
transitionAnimationStartTime = System.currentTimeMillis();
|
||||||
transitionAnimationInProgress = true;
|
transitionAnimationInProgress = true;
|
||||||
|
layoutToIgnore = containerView;
|
||||||
onOpenAnimationEndRunnable = () -> {
|
onOpenAnimationEndRunnable = () -> {
|
||||||
if (preview) {
|
if (preview) {
|
||||||
inPreviewMode = true;
|
inPreviewMode = true;
|
||||||
|
@ -978,7 +1076,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (!fragmentsStack.isEmpty()) {
|
if (!fragmentsStack.isEmpty()) {
|
||||||
BaseFragment previousFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
BaseFragment previousFragment = fragmentsStack.get(fragmentsStack.size() - 1);
|
||||||
previousFragment.onPause();
|
previousFragment.onPause();
|
||||||
if (previousFragment.actionBar != null && previousFragment.actionBar.getAddToContainer()) {
|
if (previousFragment.actionBar != null && previousFragment.actionBar.shouldAddToContainer()) {
|
||||||
ViewGroup parent = (ViewGroup) previousFragment.actionBar.getParent();
|
ViewGroup parent = (ViewGroup) previousFragment.actionBar.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
parent.removeView(previousFragment.actionBar);
|
parent.removeView(previousFragment.actionBar);
|
||||||
|
@ -1017,6 +1115,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (nextTranslation > 0) {
|
if (nextTranslation > 0) {
|
||||||
nextTranslation = 0;
|
nextTranslation = 0;
|
||||||
} else if (nextTranslation < -AndroidUtilities.dp(60)) {
|
} else if (nextTranslation < -AndroidUtilities.dp(60)) {
|
||||||
|
previewOpenAnimationInProgress = true;
|
||||||
inPreviewMode = false;
|
inPreviewMode = false;
|
||||||
nextTranslation = 0;
|
nextTranslation = 0;
|
||||||
|
|
||||||
|
@ -1027,7 +1126,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
fragment.fragmentView.setOutlineProvider(null);
|
fragment.fragmentView.setOutlineProvider(null);
|
||||||
fragment.fragmentView.setClipToOutline(false);
|
fragment.fragmentView.setClipToOutline(false);
|
||||||
}
|
}
|
||||||
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) fragment.fragmentView.getLayoutParams();
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) fragment.fragmentView.getLayoutParams();
|
||||||
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
||||||
fragment.fragmentView.setLayoutParams(layoutParams);
|
fragment.fragmentView.setLayoutParams(layoutParams);
|
||||||
|
|
||||||
|
@ -1035,11 +1134,16 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
|
|
||||||
AnimatorSet animatorSet = new AnimatorSet();
|
AnimatorSet animatorSet = new AnimatorSet();
|
||||||
animatorSet.playTogether(
|
animatorSet.playTogether(
|
||||||
ObjectAnimator.ofFloat(fragment.fragmentView, "scaleX", 1.0f, 1.05f, 1.0f),
|
ObjectAnimator.ofFloat(fragment.fragmentView, View.SCALE_X, 1.0f, 1.05f, 1.0f),
|
||||||
ObjectAnimator.ofFloat(fragment.fragmentView, "scaleY", 1.0f, 1.05f, 1.0f));
|
ObjectAnimator.ofFloat(fragment.fragmentView, View.SCALE_Y, 1.0f, 1.05f, 1.0f));
|
||||||
animatorSet.setDuration(200);
|
animatorSet.setDuration(200);
|
||||||
animatorSet.setInterpolator(new CubicBezierInterpolator(0.42, 0.0, 0.58, 1.0));
|
animatorSet.setInterpolator(new CubicBezierInterpolator(0.42, 0.0, 0.58, 1.0));
|
||||||
|
animatorSet.addListener(new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
previewOpenAnimationInProgress = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
animatorSet.start();
|
animatorSet.start();
|
||||||
performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
|
performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
|
||||||
|
|
||||||
|
@ -1055,6 +1159,10 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (!inPreviewMode && !transitionAnimationPreviewMode) {
|
if (!inPreviewMode && !transitionAnimationPreviewMode) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (delayedOpenAnimationRunnable != null) {
|
||||||
|
AndroidUtilities.cancelRunOnUIThread(delayedOpenAnimationRunnable);
|
||||||
|
delayedOpenAnimationRunnable = null;
|
||||||
|
}
|
||||||
closeLastFragment(true);
|
closeLastFragment(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1074,7 +1182,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (previousFragment != null) {
|
if (previousFragment != null) {
|
||||||
LinearLayoutContainer temp = containerView;
|
LayoutContainer temp = containerView;
|
||||||
containerView = containerViewBack;
|
containerView = containerViewBack;
|
||||||
containerViewBack = temp;
|
containerViewBack = temp;
|
||||||
|
|
||||||
|
@ -1086,17 +1194,6 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
|
|
||||||
if (!inPreviewMode) {
|
if (!inPreviewMode) {
|
||||||
containerView.setVisibility(View.VISIBLE);
|
containerView.setVisibility(View.VISIBLE);
|
||||||
if (previousFragment.actionBar != null && previousFragment.actionBar.getAddToContainer()) {
|
|
||||||
if (removeActionBarExtraHeight) {
|
|
||||||
previousFragment.actionBar.setOccupyStatusBar(false);
|
|
||||||
}
|
|
||||||
ViewGroup parent = (ViewGroup) previousFragment.actionBar.getParent();
|
|
||||||
if (parent != null) {
|
|
||||||
parent.removeView(previousFragment.actionBar);
|
|
||||||
}
|
|
||||||
containerView.addView(previousFragment.actionBar);
|
|
||||||
previousFragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
|
||||||
}
|
|
||||||
ViewGroup parent = (ViewGroup) fragmentView.getParent();
|
ViewGroup parent = (ViewGroup) fragmentView.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
previousFragment.onRemoveFromParent();
|
previousFragment.onRemoveFromParent();
|
||||||
|
@ -1107,11 +1204,22 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
containerView.addView(fragmentView);
|
containerView.addView(fragmentView);
|
||||||
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) fragmentView.getLayoutParams();
|
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) fragmentView.getLayoutParams();
|
||||||
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
layoutParams.width = LayoutHelper.MATCH_PARENT;
|
||||||
layoutParams.height = LayoutHelper.MATCH_PARENT;
|
layoutParams.height = LayoutHelper.MATCH_PARENT;
|
||||||
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
layoutParams.topMargin = layoutParams.bottomMargin = layoutParams.rightMargin = layoutParams.leftMargin = 0;
|
||||||
fragmentView.setLayoutParams(layoutParams);
|
fragmentView.setLayoutParams(layoutParams);
|
||||||
|
if (previousFragment.actionBar != null && previousFragment.actionBar.shouldAddToContainer()) {
|
||||||
|
if (removeActionBarExtraHeight) {
|
||||||
|
previousFragment.actionBar.setOccupyStatusBar(false);
|
||||||
|
}
|
||||||
|
parent = (ViewGroup) previousFragment.actionBar.getParent();
|
||||||
|
if (parent != null) {
|
||||||
|
parent.removeView(previousFragment.actionBar);
|
||||||
|
}
|
||||||
|
containerView.addView(previousFragment.actionBar);
|
||||||
|
previousFragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
previousFragment.onTransitionAnimationStart(true, true);
|
previousFragment.onTransitionAnimationStart(true, true);
|
||||||
|
@ -1132,6 +1240,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (needAnimation) {
|
if (needAnimation) {
|
||||||
transitionAnimationStartTime = System.currentTimeMillis();
|
transitionAnimationStartTime = System.currentTimeMillis();
|
||||||
transitionAnimationInProgress = true;
|
transitionAnimationInProgress = true;
|
||||||
|
layoutToIgnore = containerView;
|
||||||
final BaseFragment previousFragmentFinal = previousFragment;
|
final BaseFragment previousFragmentFinal = previousFragment;
|
||||||
onCloseAnimationEndRunnable = () -> {
|
onCloseAnimationEndRunnable = () -> {
|
||||||
if (inPreviewMode || transitionAnimationPreviewMode) {
|
if (inPreviewMode || transitionAnimationPreviewMode) {
|
||||||
|
@ -1179,6 +1288,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
if (useAlphaAnimations) {
|
if (useAlphaAnimations) {
|
||||||
transitionAnimationStartTime = System.currentTimeMillis();
|
transitionAnimationStartTime = System.currentTimeMillis();
|
||||||
transitionAnimationInProgress = true;
|
transitionAnimationInProgress = true;
|
||||||
|
layoutToIgnore = containerView;
|
||||||
|
|
||||||
onCloseAnimationEndRunnable = () -> {
|
onCloseAnimationEndRunnable = () -> {
|
||||||
removeFragmentFromStackInternal(currentFragment);
|
removeFragmentFromStackInternal(currentFragment);
|
||||||
|
@ -1192,9 +1302,9 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
};
|
};
|
||||||
|
|
||||||
ArrayList<Animator> animators = new ArrayList<>();
|
ArrayList<Animator> animators = new ArrayList<>();
|
||||||
animators.add(ObjectAnimator.ofFloat(this, "alpha", 1.0f, 0.0f));
|
animators.add(ObjectAnimator.ofFloat(this, View.ALPHA, 1.0f, 0.0f));
|
||||||
if (backgroundView != null) {
|
if (backgroundView != null) {
|
||||||
animators.add(ObjectAnimator.ofFloat(backgroundView, "alpha", 1.0f, 0.0f));
|
animators.add(ObjectAnimator.ofFloat(backgroundView, View.ALPHA, 1.0f, 0.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
currentAnimation = new AnimatorSet();
|
currentAnimation = new AnimatorSet();
|
||||||
|
@ -1229,7 +1339,7 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
}
|
}
|
||||||
for (int a = 0; a < fragmentsStack.size() - 1; a++) {
|
for (int a = 0; a < fragmentsStack.size() - 1; a++) {
|
||||||
BaseFragment previousFragment = fragmentsStack.get(a);
|
BaseFragment previousFragment = fragmentsStack.get(a);
|
||||||
if (previousFragment.actionBar != null && previousFragment.actionBar.getAddToContainer()) {
|
if (previousFragment.actionBar != null && previousFragment.actionBar.shouldAddToContainer()) {
|
||||||
ViewGroup parent = (ViewGroup) previousFragment.actionBar.getParent();
|
ViewGroup parent = (ViewGroup) previousFragment.actionBar.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
parent.removeView(previousFragment.actionBar);
|
parent.removeView(previousFragment.actionBar);
|
||||||
|
@ -1256,7 +1366,8 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
parent.removeView(fragmentView);
|
parent.removeView(fragmentView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (previousFragment.actionBar != null && previousFragment.actionBar.getAddToContainer()) {
|
containerView.addView(fragmentView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
||||||
|
if (previousFragment.actionBar != null && previousFragment.actionBar.shouldAddToContainer()) {
|
||||||
if (removeActionBarExtraHeight) {
|
if (removeActionBarExtraHeight) {
|
||||||
previousFragment.actionBar.setOccupyStatusBar(false);
|
previousFragment.actionBar.setOccupyStatusBar(false);
|
||||||
}
|
}
|
||||||
|
@ -1267,7 +1378,6 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
containerView.addView(previousFragment.actionBar);
|
containerView.addView(previousFragment.actionBar);
|
||||||
previousFragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
previousFragment.actionBar.setTitleOverlayText(titleOverlayText, titleOverlayTextId, overlayAction);
|
||||||
}
|
}
|
||||||
containerView.addView(fragmentView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
|
||||||
previousFragment.onResume();
|
previousFragment.onResume();
|
||||||
currentActionBar = previousFragment.actionBar;
|
currentActionBar = previousFragment.actionBar;
|
||||||
if (!previousFragment.hasOwnBackground && fragmentView.getBackground() == null) {
|
if (!previousFragment.hasOwnBackground && fragmentView.getBackground() == null) {
|
||||||
|
@ -1528,6 +1638,9 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
private void onCloseAnimationEnd() {
|
private void onCloseAnimationEnd() {
|
||||||
if (transitionAnimationInProgress && onCloseAnimationEndRunnable != null) {
|
if (transitionAnimationInProgress && onCloseAnimationEndRunnable != null) {
|
||||||
transitionAnimationInProgress = false;
|
transitionAnimationInProgress = false;
|
||||||
|
if (currentPanTranslationY == 0) {
|
||||||
|
layoutToIgnore = null;
|
||||||
|
}
|
||||||
transitionAnimationPreviewMode = false;
|
transitionAnimationPreviewMode = false;
|
||||||
transitionAnimationStartTime = 0;
|
transitionAnimationStartTime = 0;
|
||||||
onCloseAnimationEndRunnable.run();
|
onCloseAnimationEndRunnable.run();
|
||||||
|
@ -1550,6 +1663,9 @@ public class ActionBarLayout extends FrameLayout {
|
||||||
private void onOpenAnimationEnd() {
|
private void onOpenAnimationEnd() {
|
||||||
if (transitionAnimationInProgress && onOpenAnimationEndRunnable != null) {
|
if (transitionAnimationInProgress && onOpenAnimationEndRunnable != null) {
|
||||||
transitionAnimationInProgress = false;
|
transitionAnimationInProgress = false;
|
||||||
|
if (currentPanTranslationY == 0) {
|
||||||
|
layoutToIgnore = null;
|
||||||
|
}
|
||||||
transitionAnimationPreviewMode = false;
|
transitionAnimationPreviewMode = false;
|
||||||
transitionAnimationStartTime = 0;
|
transitionAnimationStartTime = 0;
|
||||||
onOpenAnimationEndRunnable.run();
|
onOpenAnimationEndRunnable.run();
|
||||||
|
|
|
@ -39,6 +39,7 @@ import android.widget.TextView;
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
import org.telegram.messenger.LocaleController;
|
import org.telegram.messenger.LocaleController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.ui.Components.CloseProgressDrawable2;
|
import org.telegram.ui.Components.CloseProgressDrawable2;
|
||||||
import org.telegram.ui.Components.EditTextBoldCursor;
|
import org.telegram.ui.Components.EditTextBoldCursor;
|
||||||
import org.telegram.ui.Components.LayoutHelper;
|
import org.telegram.ui.Components.LayoutHelper;
|
||||||
|
@ -73,6 +74,10 @@ public class ActionBarMenuItem extends FrameLayout {
|
||||||
public Animator getCustomToggleTransition() {
|
public Animator getCustomToggleTransition() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onLayout(int l, int t, int r, int b) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface ActionBarSumMenuItemDelegate {
|
public interface ActionBarSumMenuItemDelegate {
|
||||||
|
@ -111,7 +116,7 @@ public class ActionBarMenuItem extends FrameLayout {
|
||||||
private CloseProgressDrawable2 progressDrawable;
|
private CloseProgressDrawable2 progressDrawable;
|
||||||
private int additionalYOffset;
|
private int additionalYOffset;
|
||||||
private int additionalXOffset;
|
private int additionalXOffset;
|
||||||
private boolean longClickEnabled = true;
|
private boolean longClickEnabled;
|
||||||
private boolean animateClear = true;
|
private boolean animateClear = true;
|
||||||
private boolean clearsTextOnSearchCollapse = true;
|
private boolean clearsTextOnSearchCollapse = true;
|
||||||
private boolean measurePopup = true;
|
private boolean measurePopup = true;
|
||||||
|
@ -564,6 +569,10 @@ public class ActionBarMenuItem extends FrameLayout {
|
||||||
iconView.setImageDrawable(drawable);
|
iconView.setImageDrawable(drawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ImageView getIconView() {
|
||||||
|
return iconView;
|
||||||
|
}
|
||||||
|
|
||||||
public void setIcon(int resId) {
|
public void setIcon(int resId) {
|
||||||
if (iconView == null) {
|
if (iconView == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -898,6 +907,9 @@ public class ActionBarMenuItem extends FrameLayout {
|
||||||
if (popupWindow != null && popupWindow.isShowing()) {
|
if (popupWindow != null && popupWindow.isShowing()) {
|
||||||
updateOrShowPopup(false, true);
|
updateOrShowPopup(false, true);
|
||||||
}
|
}
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onLayout(left, top, right, bottom);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAdditionalYOffset(int value) {
|
public void setAdditionalYOffset(int value) {
|
||||||
|
@ -912,7 +924,7 @@ public class ActionBarMenuItem extends FrameLayout {
|
||||||
int offsetY;
|
int offsetY;
|
||||||
|
|
||||||
if (parentMenu != null) {
|
if (parentMenu != null) {
|
||||||
offsetY = -parentMenu.parentActionBar.getMeasuredHeight() + parentMenu.getTop() + parentMenu.getPaddingTop();
|
offsetY = -parentMenu.parentActionBar.getMeasuredHeight() + parentMenu.getTop() + parentMenu.getPaddingTop() - (int) parentMenu.parentActionBar.getTranslationY();
|
||||||
} else {
|
} else {
|
||||||
float scaleY = getScaleY();
|
float scaleY = getScaleY();
|
||||||
offsetY = -(int) (getMeasuredHeight() * scaleY - (subMenuOpenSide != 2 ? getTranslationY() : 0) / scaleY) + additionalYOffset;
|
offsetY = -(int) (getMeasuredHeight() * scaleY - (subMenuOpenSide != 2 ? getTranslationY() : 0) / scaleY) + additionalYOffset;
|
||||||
|
@ -926,12 +938,22 @@ public class ActionBarMenuItem extends FrameLayout {
|
||||||
if (parentMenu != null) {
|
if (parentMenu != null) {
|
||||||
View parent = parentMenu.parentActionBar;
|
View parent = parentMenu.parentActionBar;
|
||||||
if (subMenuOpenSide == 0) {
|
if (subMenuOpenSide == 0) {
|
||||||
|
if (SharedConfig.smoothKeyboard) {
|
||||||
|
getLocationOnScreen(location);
|
||||||
|
if (show) {
|
||||||
|
popupWindow.showAtLocation(parent, Gravity.LEFT | Gravity.TOP, location[0] + getMeasuredWidth() - popupLayout.getMeasuredWidth() + (int) getTranslationX(), offsetY);
|
||||||
|
}
|
||||||
|
if (update) {
|
||||||
|
popupWindow.update(location[0] + getMeasuredWidth() - popupLayout.getMeasuredWidth() + (int) getTranslationX(), offsetY, -1, -1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if (show) {
|
if (show) {
|
||||||
popupWindow.showAsDropDown(parent, getLeft() + parentMenu.getLeft() + getMeasuredWidth() - popupLayout.getMeasuredWidth() + (int) getTranslationX(), offsetY);
|
popupWindow.showAsDropDown(parent, getLeft() + parentMenu.getLeft() + getMeasuredWidth() - popupLayout.getMeasuredWidth() + (int) getTranslationX(), offsetY);
|
||||||
}
|
}
|
||||||
if (update) {
|
if (update) {
|
||||||
popupWindow.update(parent, getLeft() + parentMenu.getLeft() + getMeasuredWidth() - popupLayout.getMeasuredWidth() + (int) getTranslationX(), offsetY, -1, -1);
|
popupWindow.update(parent, getLeft() + parentMenu.getLeft() + getMeasuredWidth() - popupLayout.getMeasuredWidth() + (int) getTranslationX(), offsetY, -1, -1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (show) {
|
if (show) {
|
||||||
popupWindow.showAsDropDown(parent, getLeft() - AndroidUtilities.dp(8) + (int) getTranslationX(), offsetY);
|
popupWindow.showAsDropDown(parent, getLeft() - AndroidUtilities.dp(8) + (int) getTranslationX(), offsetY);
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
package org.telegram.ui.ActionBar;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
|
public class AdjustPanFrameLayout extends FrameLayout {
|
||||||
|
|
||||||
|
private AdjustPanLayoutHelper adjustPanLayoutHelper;
|
||||||
|
|
||||||
|
public AdjustPanFrameLayout(Context context) {
|
||||||
|
super(context);
|
||||||
|
adjustPanLayoutHelper = new AdjustPanLayoutHelper(this) {
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
AdjustPanFrameLayout.this.onPanTranslationUpdate(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onTransitionStart() {
|
||||||
|
AdjustPanFrameLayout.this.onTransitionStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onTransitionEnd() {
|
||||||
|
AdjustPanFrameLayout.this.onTransitionEnd();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatchDraw(Canvas canvas) {
|
||||||
|
adjustPanLayoutHelper.update();
|
||||||
|
super.dispatchDraw(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onTransitionStart() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onTransitionEnd() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
package org.telegram.ui.ActionBar;
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
|
|
||||||
|
public class AdjustPanLayoutHelper {
|
||||||
|
|
||||||
|
private int[] loc = new int[2];
|
||||||
|
private final static int FRAMES_WITHOUT_MOVE_LIMIT = 5;
|
||||||
|
private View parentView;
|
||||||
|
private int framesWithoutMovement;
|
||||||
|
private int prevMovement;
|
||||||
|
private boolean wasMovement;
|
||||||
|
|
||||||
|
public AdjustPanLayoutHelper(View parent) {
|
||||||
|
parentView = parent;
|
||||||
|
parentView.getViewTreeObserver().addOnGlobalLayoutListener(this::onUpdate);
|
||||||
|
parentView.getViewTreeObserver().addOnScrollChangedListener(this::onUpdate);
|
||||||
|
parentView.getViewTreeObserver().addOnGlobalFocusChangeListener((oldFocus, newFocus) -> onUpdate());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onUpdate() {
|
||||||
|
if (!SharedConfig.smoothKeyboard) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//prevMovement = Integer.MAX_VALUE;
|
||||||
|
framesWithoutMovement = 0;
|
||||||
|
wasMovement = false;
|
||||||
|
parentView.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
if (parentView.getVisibility() != View.VISIBLE || parentView.getParent() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!AndroidUtilities.usingHardwareInput && SharedConfig.smoothKeyboard) {
|
||||||
|
parentView.getLocationInWindow(loc);
|
||||||
|
if (loc[1] <= 0) {
|
||||||
|
loc[1] -= parentView.getTranslationY();
|
||||||
|
if (Build.VERSION.SDK_INT < 21) {
|
||||||
|
loc[1] -= AndroidUtilities.statusBarHeight;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
loc[1] = 0;
|
||||||
|
}
|
||||||
|
if (loc[1] != prevMovement) {
|
||||||
|
if (!wasMovement) {
|
||||||
|
onTransitionStart();
|
||||||
|
}
|
||||||
|
wasMovement = true;
|
||||||
|
onPanTranslationUpdate(-loc[1]);
|
||||||
|
framesWithoutMovement = 0;
|
||||||
|
prevMovement = loc[1];
|
||||||
|
} else {
|
||||||
|
framesWithoutMovement++;
|
||||||
|
}
|
||||||
|
if (framesWithoutMovement < FRAMES_WITHOUT_MOVE_LIMIT) {
|
||||||
|
parentView.invalidate();
|
||||||
|
} else if (wasMovement) {
|
||||||
|
onTransitionEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onTransitionStart() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onTransitionEnd() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package org.telegram.ui.ActionBar;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
public class AdjustPanLinearLayout extends LinearLayout {
|
||||||
|
|
||||||
|
private AdjustPanLayoutHelper adjustPanLayoutHelper;
|
||||||
|
|
||||||
|
public AdjustPanLinearLayout(Context context) {
|
||||||
|
super(context);
|
||||||
|
adjustPanLayoutHelper = new AdjustPanLayoutHelper(this) {
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
AdjustPanLinearLayout.this.onPanTranslationUpdate(y);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatchDraw(Canvas canvas) {
|
||||||
|
adjustPanLayoutHelper.update();
|
||||||
|
super.dispatchDraw(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,6 +18,7 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
|
@ -53,7 +54,6 @@ public class BaseFragment {
|
||||||
protected boolean inPreviewMode;
|
protected boolean inPreviewMode;
|
||||||
protected int classGuid;
|
protected int classGuid;
|
||||||
protected Bundle arguments;
|
protected Bundle arguments;
|
||||||
protected boolean swipeBackEnabled = true;
|
|
||||||
protected boolean hasOwnBackground = false;
|
protected boolean hasOwnBackground = false;
|
||||||
protected boolean isPaused = true;
|
protected boolean isPaused = true;
|
||||||
|
|
||||||
|
@ -97,6 +97,10 @@ public class BaseFragment {
|
||||||
return classGuid;
|
return classGuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected void setInPreviewMode(boolean value) {
|
protected void setInPreviewMode(boolean value) {
|
||||||
inPreviewMode = value;
|
inPreviewMode = value;
|
||||||
if (actionBar != null) {
|
if (actionBar != null) {
|
||||||
|
@ -163,7 +167,7 @@ public class BaseFragment {
|
||||||
}
|
}
|
||||||
if (actionBar != null) {
|
if (actionBar != null) {
|
||||||
boolean differentParent = parentLayout != null && parentLayout.getContext() != actionBar.getContext();
|
boolean differentParent = parentLayout != null && parentLayout.getContext() != actionBar.getContext();
|
||||||
if (actionBar.getAddToContainer() || differentParent) {
|
if (actionBar.shouldAddToContainer() || differentParent) {
|
||||||
ViewGroup parent = (ViewGroup) actionBar.getParent();
|
ViewGroup parent = (ViewGroup) actionBar.getParent();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -445,6 +449,22 @@ public class BaseFragment {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPanTransitionStart() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onPanTransitionEnd() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentPanTranslationY() {
|
||||||
|
return parentLayout != null ? parentLayout.getCurrentPanTranslationY() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
public Dialog getVisibleDialog() {
|
public Dialog getVisibleDialog() {
|
||||||
return visibleDialog;
|
return visibleDialog;
|
||||||
}
|
}
|
||||||
|
@ -473,7 +493,7 @@ public class BaseFragment {
|
||||||
return getAccountInstance().getContactsController();
|
return getAccountInstance().getContactsController();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MediaDataController getMediaDataController() {
|
public MediaDataController getMediaDataController() {
|
||||||
return getAccountInstance().getMediaDataController();
|
return getAccountInstance().getMediaDataController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,11 +513,11 @@ public class BaseFragment {
|
||||||
return getAccountInstance().getMessagesStorage();
|
return getAccountInstance().getMessagesStorage();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SendMessagesHelper getSendMessagesHelper() {
|
public SendMessagesHelper getSendMessagesHelper() {
|
||||||
return getAccountInstance().getSendMessagesHelper();
|
return getAccountInstance().getSendMessagesHelper();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FileLoader getFileLoader() {
|
public FileLoader getFileLoader() {
|
||||||
return getAccountInstance().getFileLoader();
|
return getAccountInstance().getFileLoader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,8 @@ public class BottomSheet extends Dialog {
|
||||||
protected ContainerView container;
|
protected ContainerView container;
|
||||||
private WindowInsets lastInsets;
|
private WindowInsets lastInsets;
|
||||||
|
|
||||||
|
protected boolean useSmoothKeyboard;
|
||||||
|
|
||||||
protected Runnable startAnimationRunnable;
|
protected Runnable startAnimationRunnable;
|
||||||
private int layoutCount;
|
private int layoutCount;
|
||||||
|
|
||||||
|
@ -695,7 +697,7 @@ public class BottomSheet extends Dialog {
|
||||||
params.dimAmount = 0;
|
params.dimAmount = 0;
|
||||||
params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
|
params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
|
||||||
if (focusable) {
|
if (focusable) {
|
||||||
params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
params.softInputMode = useSmoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
||||||
} else {
|
} else {
|
||||||
params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
params.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||||
}
|
}
|
||||||
|
@ -727,7 +729,7 @@ public class BottomSheet extends Dialog {
|
||||||
Window window = getWindow();
|
Window window = getWindow();
|
||||||
WindowManager.LayoutParams params = window.getAttributes();
|
WindowManager.LayoutParams params = window.getAttributes();
|
||||||
if (focusable) {
|
if (focusable) {
|
||||||
params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
params.softInputMode = (useSmoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
params.flags &=~ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
params.flags &=~ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||||
} else {
|
} else {
|
||||||
params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING;
|
params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING;
|
||||||
|
@ -748,7 +750,7 @@ public class BottomSheet extends Dialog {
|
||||||
public void show() {
|
public void show() {
|
||||||
super.show();
|
super.show();
|
||||||
if (focusable) {
|
if (focusable) {
|
||||||
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
getWindow().setSoftInputMode(useSmoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
}
|
}
|
||||||
dismissed = false;
|
dismissed = false;
|
||||||
cancelSheetAnimation();
|
cancelSheetAnimation();
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.telegram.messenger.AndroidUtilities;
|
||||||
import org.telegram.messenger.BuildVars;
|
import org.telegram.messenger.BuildVars;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
|
|
||||||
public class DrawerLayoutContainer extends FrameLayout {
|
public class DrawerLayoutContainer extends FrameLayout {
|
||||||
|
|
||||||
|
@ -76,9 +77,13 @@ public class DrawerLayoutContainer extends FrameLayout {
|
||||||
private boolean drawerOpened;
|
private boolean drawerOpened;
|
||||||
private boolean allowDrawContent = true;
|
private boolean allowDrawContent = true;
|
||||||
|
|
||||||
|
private AdjustPanLayoutHelper adjustPanLayoutHelper;
|
||||||
|
|
||||||
public DrawerLayoutContainer(Context context) {
|
public DrawerLayoutContainer(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
|
||||||
|
adjustPanLayoutHelper = new AdjustPanLayoutHelper(this);
|
||||||
|
|
||||||
minDrawerMargin = (int) (MIN_DRAWER_MARGIN * AndroidUtilities.density + 0.5f);
|
minDrawerMargin = (int) (MIN_DRAWER_MARGIN * AndroidUtilities.density + 0.5f);
|
||||||
setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
|
setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
|
||||||
setFocusableInTouchMode(true);
|
setFocusableInTouchMode(true);
|
||||||
|
@ -488,6 +493,12 @@ public class DrawerLayoutContainer extends FrameLayout {
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void dispatchDraw(Canvas canvas) {
|
||||||
|
adjustPanLayoutHelper.update();
|
||||||
|
super.dispatchDraw(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
|
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
|
||||||
if (!allowDrawContent) {
|
if (!allowDrawContent) {
|
||||||
|
@ -543,11 +554,13 @@ public class DrawerLayoutContainer extends FrameLayout {
|
||||||
if (Build.VERSION.SDK_INT >= 21 && lastInsets != null) {
|
if (Build.VERSION.SDK_INT >= 21 && lastInsets != null) {
|
||||||
WindowInsets insets = (WindowInsets) lastInsets;
|
WindowInsets insets = (WindowInsets) lastInsets;
|
||||||
|
|
||||||
|
if (!SharedConfig.smoothKeyboard) {
|
||||||
int bottomInset = insets.getSystemWindowInsetBottom();
|
int bottomInset = insets.getSystemWindowInsetBottom();
|
||||||
if (bottomInset > 0) {
|
if (bottomInset > 0) {
|
||||||
backgroundPaint.setColor(behindKeyboardColor);
|
backgroundPaint.setColor(behindKeyboardColor);
|
||||||
canvas.drawRect(0, getMeasuredHeight() - bottomInset, getMeasuredWidth(), getMeasuredHeight(), backgroundPaint);
|
canvas.drawRect(0, getMeasuredHeight() - bottomInset, getMeasuredWidth(), getMeasuredHeight(), backgroundPaint);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (hasCutout) {
|
if (hasCutout) {
|
||||||
backgroundPaint.setColor(0xff000000);
|
backgroundPaint.setColor(0xff000000);
|
||||||
|
|
|
@ -10,12 +10,13 @@ package org.telegram.ui.ActionBar;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.LinearGradient;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.PorterDuffColorFilter;
|
import android.graphics.PorterDuffXfermode;
|
||||||
|
import android.graphics.Shader;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
|
@ -49,8 +50,8 @@ public class SimpleTextView extends View implements Drawable.Callback {
|
||||||
private float scrollingOffset;
|
private float scrollingOffset;
|
||||||
private long lastUpdateTime;
|
private long lastUpdateTime;
|
||||||
private int currentScrollDelay;
|
private int currentScrollDelay;
|
||||||
private GradientDrawable fadeDrawable;
|
private Paint fadePaint;
|
||||||
private GradientDrawable fadeDrawableBack;
|
private Paint fadePaintBack;
|
||||||
private int lastWidth;
|
private int lastWidth;
|
||||||
|
|
||||||
private int offsetX;
|
private int offsetX;
|
||||||
|
@ -107,8 +108,15 @@ public class SimpleTextView extends View implements Drawable.Callback {
|
||||||
}
|
}
|
||||||
scrollNonFitText = value;
|
scrollNonFitText = value;
|
||||||
if (scrollNonFitText) {
|
if (scrollNonFitText) {
|
||||||
fadeDrawable = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[]{0xffffffff, 0});
|
fadePaint = new Paint();
|
||||||
fadeDrawableBack = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[]{0, 0xffffffff});
|
LinearGradient gradient = new LinearGradient(0, 0, AndroidUtilities.dp(6), 0, new int[]{0xffffffff, 0}, new float[]{0f, 1f}, Shader.TileMode.CLAMP);
|
||||||
|
fadePaint.setShader(gradient);
|
||||||
|
fadePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
|
||||||
|
|
||||||
|
fadePaintBack = new Paint();
|
||||||
|
gradient = new LinearGradient(0, 0, AndroidUtilities.dp(6), 0, new int[]{0, 0xffffffff}, new float[]{0f, 1f}, Shader.TileMode.CLAMP);
|
||||||
|
fadePaintBack.setShader(gradient);
|
||||||
|
fadePaintBack.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
|
||||||
}
|
}
|
||||||
requestLayout();
|
requestLayout();
|
||||||
}
|
}
|
||||||
|
@ -383,6 +391,12 @@ public class SimpleTextView extends View implements Drawable.Callback {
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
int textOffsetX = 0;
|
int textOffsetX = 0;
|
||||||
|
|
||||||
|
boolean fade = scrollNonFitText && (textDoesNotFit || scrollingOffset != 0);
|
||||||
|
if (fade) {
|
||||||
|
canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), 255, Canvas.ALL_SAVE_FLAG);
|
||||||
|
}
|
||||||
|
|
||||||
totalWidth = textWidth;
|
totalWidth = textWidth;
|
||||||
if (leftDrawable != null) {
|
if (leftDrawable != null) {
|
||||||
int x = (int) -scrollingOffset;
|
int x = (int) -scrollingOffset;
|
||||||
|
@ -456,37 +470,25 @@ public class SimpleTextView extends View implements Drawable.Callback {
|
||||||
if (offsetX + textOffsetX != 0 || offsetY != 0 || scrollingOffset != 0) {
|
if (offsetX + textOffsetX != 0 || offsetY != 0 || scrollingOffset != 0) {
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
}
|
}
|
||||||
if (scrollNonFitText && (textDoesNotFit || scrollingOffset != 0)) {
|
if (fade) {
|
||||||
if (scrollingOffset < AndroidUtilities.dp(10)) {
|
if (scrollingOffset < AndroidUtilities.dp(10)) {
|
||||||
fadeDrawable.setAlpha((int) (255 * (scrollingOffset / AndroidUtilities.dp(10))));
|
fadePaint.setAlpha((int) (255 * (scrollingOffset / AndroidUtilities.dp(10))));
|
||||||
} else if (scrollingOffset > totalWidth + AndroidUtilities.dp(DIST_BETWEEN_SCROLLING_TEXT) - AndroidUtilities.dp(10)) {
|
} else if (scrollingOffset > totalWidth + AndroidUtilities.dp(DIST_BETWEEN_SCROLLING_TEXT) - AndroidUtilities.dp(10)) {
|
||||||
float dist = scrollingOffset - (totalWidth + AndroidUtilities.dp(DIST_BETWEEN_SCROLLING_TEXT) - AndroidUtilities.dp(10));
|
float dist = scrollingOffset - (totalWidth + AndroidUtilities.dp(DIST_BETWEEN_SCROLLING_TEXT) - AndroidUtilities.dp(10));
|
||||||
fadeDrawable.setAlpha((int) (255 * (1.0f - dist / AndroidUtilities.dp(10))));
|
fadePaint.setAlpha((int) (255 * (1.0f - dist / AndroidUtilities.dp(10))));
|
||||||
} else {
|
} else {
|
||||||
fadeDrawable.setAlpha(255);
|
fadePaint.setAlpha(255);
|
||||||
}
|
}
|
||||||
fadeDrawable.setBounds(0, 0, AndroidUtilities.dp(6), getMeasuredHeight());
|
canvas.drawRect(0, 0, AndroidUtilities.dp(6), getMeasuredHeight(), fadePaint);
|
||||||
fadeDrawable.draw(canvas);
|
canvas.save();
|
||||||
|
canvas.translate(getMeasuredWidth() - AndroidUtilities.dp(6), 0);
|
||||||
fadeDrawableBack.setBounds(getMeasuredWidth() - AndroidUtilities.dp(6), 0, getMeasuredWidth(), getMeasuredHeight());
|
canvas.drawRect(0, 0, AndroidUtilities.dp(6), getMeasuredHeight(), fadePaintBack);
|
||||||
fadeDrawableBack.draw(canvas);
|
canvas.restore();
|
||||||
}
|
}
|
||||||
updateScrollAnimation();
|
updateScrollAnimation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBackgroundColor(int color) {
|
|
||||||
if (scrollNonFitText) {
|
|
||||||
if (fadeDrawable != null) {
|
|
||||||
fadeDrawable.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
|
||||||
fadeDrawableBack.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.setBackgroundColor(color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateScrollAnimation() {
|
private void updateScrollAnimation() {
|
||||||
if (!scrollNonFitText || !textDoesNotFit && scrollingOffset == 0) {
|
if (!scrollNonFitText || !textDoesNotFit && scrollingOffset == 0) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -125,15 +125,25 @@ public class Theme {
|
||||||
private boolean isSelected;
|
private boolean isSelected;
|
||||||
private Path path;
|
private Path path;
|
||||||
|
|
||||||
|
private Rect backupRect = new Rect();
|
||||||
|
|
||||||
private boolean isOut;
|
private boolean isOut;
|
||||||
|
|
||||||
private int topY;
|
private int topY;
|
||||||
private boolean isTopNear;
|
private boolean isTopNear;
|
||||||
private boolean isBottomNear;
|
private boolean isBottomNear;
|
||||||
|
|
||||||
private int[] currentShadowDrawableRadius = new int[4];
|
private int[] currentShadowDrawableRadius = new int[]{-1, -1, -1, -1};
|
||||||
private Drawable[] shadowDrawable = new Drawable[4];
|
private Drawable[] shadowDrawable = new Drawable[4];
|
||||||
private int shadowDrawableColor = 0xffffffff;
|
private int[] shadowDrawableColor = new int[]{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff};
|
||||||
|
|
||||||
|
private int[][] currentBackgroundDrawableRadius = new int[][]{
|
||||||
|
{-1, -1, -1, -1},
|
||||||
|
{-1, -1, -1, -1}};
|
||||||
|
private Drawable[][] backgroundDrawable = new Drawable[2][4];
|
||||||
|
private int[][] backgroundDrawableColor = new int[][]{
|
||||||
|
{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff},
|
||||||
|
{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}};
|
||||||
|
|
||||||
public static final int TYPE_TEXT = 0;
|
public static final int TYPE_TEXT = 0;
|
||||||
public static final int TYPE_MEDIA = 1;
|
public static final int TYPE_MEDIA = 1;
|
||||||
|
@ -216,6 +226,55 @@ public class Theme {
|
||||||
return paint;
|
return paint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Drawable[] getShadowDrawables() {
|
||||||
|
return shadowDrawable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Drawable getBackgroundDrawable() {
|
||||||
|
int newRad = AndroidUtilities.dp(SharedConfig.bubbleRadius);
|
||||||
|
int idx;
|
||||||
|
if (isTopNear && isBottomNear) {
|
||||||
|
idx = 3;
|
||||||
|
} else if (isTopNear) {
|
||||||
|
idx = 2;
|
||||||
|
} else if (isBottomNear) {
|
||||||
|
idx = 1;
|
||||||
|
} else {
|
||||||
|
idx = 0;
|
||||||
|
}
|
||||||
|
int idx2 = isSelected ? 1 : 0;
|
||||||
|
if (currentBackgroundDrawableRadius[idx2][idx] != newRad) {
|
||||||
|
currentBackgroundDrawableRadius[idx2][idx] = newRad;
|
||||||
|
try {
|
||||||
|
Bitmap bitmap = Bitmap.createBitmap(dp(50), dp(40), Bitmap.Config.ARGB_8888);
|
||||||
|
Canvas canvas = new Canvas(bitmap);
|
||||||
|
|
||||||
|
Paint shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
|
shadowPaint.setColor(0xffffffff);
|
||||||
|
backupRect.set(getBounds());
|
||||||
|
setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
|
||||||
|
draw(canvas, shadowPaint);
|
||||||
|
|
||||||
|
backgroundDrawable[idx2][idx] = new NinePatchDrawable(bitmap, getByteBuffer(bitmap.getWidth() / 2 - 1, bitmap.getWidth() / 2 + 1, bitmap.getHeight() / 2 - 1, bitmap.getHeight() / 2 + 1).array(), new Rect(), null);
|
||||||
|
backgroundDrawableColor[idx2][idx] = 0;
|
||||||
|
setBounds(backupRect);
|
||||||
|
} catch (Throwable ignore) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int color;
|
||||||
|
if (isSelected) {
|
||||||
|
color = getColor(isOut ? key_chat_outBubbleSelected : key_chat_inBubbleSelected);
|
||||||
|
} else {
|
||||||
|
color = getColor(isOut ? key_chat_outBubble : key_chat_inBubble);
|
||||||
|
}
|
||||||
|
if (backgroundDrawable[idx2][idx] != null && backgroundDrawableColor[idx2][idx] != color) {
|
||||||
|
backgroundDrawable[idx2][idx].setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
||||||
|
backgroundDrawableColor[idx2][idx] = color;
|
||||||
|
}
|
||||||
|
return backgroundDrawable[idx2][idx];
|
||||||
|
}
|
||||||
|
|
||||||
public Drawable getShadowDrawable() {
|
public Drawable getShadowDrawable() {
|
||||||
int newRad = AndroidUtilities.dp(SharedConfig.bubbleRadius);
|
int newRad = AndroidUtilities.dp(SharedConfig.bubbleRadius);
|
||||||
int idx;
|
int idx;
|
||||||
|
@ -235,7 +294,10 @@ public class Theme {
|
||||||
Canvas canvas = new Canvas(bitmap);
|
Canvas canvas = new Canvas(bitmap);
|
||||||
|
|
||||||
Paint shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
Paint shadowPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||||
shadowPaint.setColor(0x155F6569);
|
|
||||||
|
LinearGradient gradientShader = new LinearGradient(0, 0, 0, dp(40), new int[]{0x155F6569, 0x295F6569}, null, Shader.TileMode.CLAMP);
|
||||||
|
shadowPaint.setShader(gradientShader);
|
||||||
|
|
||||||
shadowPaint.setShadowLayer(2, 0, 1, 0xffffffff);
|
shadowPaint.setShadowLayer(2, 0, 1, 0xffffffff);
|
||||||
if (AndroidUtilities.density > 1) {
|
if (AndroidUtilities.density > 1) {
|
||||||
setBounds(-1, -1, bitmap.getWidth() + 1, bitmap.getHeight() + 1);
|
setBounds(-1, -1, bitmap.getWidth() + 1, bitmap.getHeight() + 1);
|
||||||
|
@ -253,15 +315,15 @@ public class Theme {
|
||||||
}
|
}
|
||||||
|
|
||||||
shadowDrawable[idx] = new NinePatchDrawable(bitmap, getByteBuffer(bitmap.getWidth() / 2 - 1, bitmap.getWidth() / 2 + 1, bitmap.getHeight() / 2 - 1, bitmap.getHeight() / 2 + 1).array(), new Rect(), null);
|
shadowDrawable[idx] = new NinePatchDrawable(bitmap, getByteBuffer(bitmap.getWidth() / 2 - 1, bitmap.getWidth() / 2 + 1, bitmap.getHeight() / 2 - 1, bitmap.getHeight() / 2 + 1).array(), new Rect(), null);
|
||||||
shadowDrawableColor = 0;
|
shadowDrawableColor[idx] = 0;
|
||||||
} catch (Throwable ignore) {
|
} catch (Throwable ignore) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int color = getColor(isOut ? key_chat_outBubbleShadow : key_chat_inBubbleShadow);
|
int color = getColor(isOut ? key_chat_outBubbleShadow : key_chat_inBubbleShadow);
|
||||||
if (shadowDrawable[idx] != null && shadowDrawableColor != color) {
|
if (shadowDrawable[idx] != null && shadowDrawableColor[idx] != color) {
|
||||||
shadowDrawable[idx].setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
shadowDrawable[idx].setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
||||||
shadowDrawableColor = color;
|
shadowDrawableColor[idx] = color;
|
||||||
}
|
}
|
||||||
return shadowDrawable[idx];
|
return shadowDrawable[idx];
|
||||||
}
|
}
|
||||||
|
@ -309,6 +371,14 @@ public class Theme {
|
||||||
|
|
||||||
public void draw(Canvas canvas, Paint paintToUse) {
|
public void draw(Canvas canvas, Paint paintToUse) {
|
||||||
Rect bounds = getBounds();
|
Rect bounds = getBounds();
|
||||||
|
if (paintToUse == null && gradientShader == null) {
|
||||||
|
Drawable background = getBackgroundDrawable();
|
||||||
|
if (background != null) {
|
||||||
|
background.setBounds(bounds);
|
||||||
|
background.draw(canvas);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
int padding = dp(2);
|
int padding = dp(2);
|
||||||
int rad;
|
int rad;
|
||||||
int nearRad;
|
int nearRad;
|
||||||
|
@ -1825,7 +1895,7 @@ public class Theme {
|
||||||
public static int serviceSelectedMessageColorBackup;
|
public static int serviceSelectedMessageColorBackup;
|
||||||
private static int serviceMessage2Color;
|
private static int serviceMessage2Color;
|
||||||
private static int serviceSelectedMessage2Color;
|
private static int serviceSelectedMessage2Color;
|
||||||
private static int currentColor;
|
public static int currentColor;
|
||||||
private static int currentSelectedColor;
|
private static int currentSelectedColor;
|
||||||
private static Drawable wallpaper;
|
private static Drawable wallpaper;
|
||||||
private static Drawable themedWallpaper;
|
private static Drawable themedWallpaper;
|
||||||
|
@ -2602,6 +2672,11 @@ public class Theme {
|
||||||
public static final String key_profile_verifiedCheck = "profile_verifiedCheck";
|
public static final String key_profile_verifiedCheck = "profile_verifiedCheck";
|
||||||
public static final String key_profile_status = "profile_status";
|
public static final String key_profile_status = "profile_status";
|
||||||
|
|
||||||
|
public static final String key_profile_tabText = "profile_tabText";
|
||||||
|
public static final String key_profile_tabSelectedText = "profile_tabSelectedText";
|
||||||
|
public static final String key_profile_tabSelectedLine = "profile_tabSelectedLine";
|
||||||
|
public static final String key_profile_tabSelector = "profile_tabSelector";
|
||||||
|
|
||||||
public static final String key_sharedMedia_startStopLoadIcon = "sharedMedia_startStopLoadIcon";
|
public static final String key_sharedMedia_startStopLoadIcon = "sharedMedia_startStopLoadIcon";
|
||||||
public static final String key_sharedMedia_linkPlaceholder = "sharedMedia_linkPlaceholder";
|
public static final String key_sharedMedia_linkPlaceholder = "sharedMedia_linkPlaceholder";
|
||||||
public static final String key_sharedMedia_linkPlaceholderText = "sharedMedia_linkPlaceholderText";
|
public static final String key_sharedMedia_linkPlaceholderText = "sharedMedia_linkPlaceholderText";
|
||||||
|
@ -3271,6 +3346,11 @@ public class Theme {
|
||||||
defaultColors.put(key_profile_title, 0xffffffff);
|
defaultColors.put(key_profile_title, 0xffffffff);
|
||||||
defaultColors.put(key_profile_status, 0xffd7eafa);
|
defaultColors.put(key_profile_status, 0xffd7eafa);
|
||||||
|
|
||||||
|
defaultColors.put(key_profile_tabText, 0xff878c90);
|
||||||
|
defaultColors.put(key_profile_tabSelectedText, 0xff3a95d5);
|
||||||
|
defaultColors.put(key_profile_tabSelectedLine, 0xff4fa6e9);
|
||||||
|
defaultColors.put(key_profile_tabSelector, 0x0f000000);
|
||||||
|
|
||||||
defaultColors.put(key_player_actionBar, 0xffffffff);
|
defaultColors.put(key_player_actionBar, 0xffffffff);
|
||||||
defaultColors.put(key_player_actionBarSelector, 0x0f000000);
|
defaultColors.put(key_player_actionBarSelector, 0x0f000000);
|
||||||
defaultColors.put(key_player_actionBarTitle, 0xff2f3438);
|
defaultColors.put(key_player_actionBarTitle, 0xff2f3438);
|
||||||
|
@ -3517,6 +3597,11 @@ public class Theme {
|
||||||
fallbackKeys.put(key_chat_inPollWrongAnswer, key_chat_attachAudioBackground);
|
fallbackKeys.put(key_chat_inPollWrongAnswer, key_chat_attachAudioBackground);
|
||||||
fallbackKeys.put(key_chat_outPollWrongAnswer, key_chat_attachAudioBackground);
|
fallbackKeys.put(key_chat_outPollWrongAnswer, key_chat_attachAudioBackground);
|
||||||
|
|
||||||
|
fallbackKeys.put(key_profile_tabText, key_windowBackgroundWhiteGrayText);
|
||||||
|
fallbackKeys.put(key_profile_tabSelectedText, key_windowBackgroundWhiteBlueHeader);
|
||||||
|
fallbackKeys.put(key_profile_tabSelectedLine, key_windowBackgroundWhiteBlueHeader);
|
||||||
|
fallbackKeys.put(key_profile_tabSelector, key_listSelector);
|
||||||
|
|
||||||
themeAccentExclusionKeys.addAll(Arrays.asList(keys_avatar_background));
|
themeAccentExclusionKeys.addAll(Arrays.asList(keys_avatar_background));
|
||||||
themeAccentExclusionKeys.addAll(Arrays.asList(keys_avatar_nameInMessage));
|
themeAccentExclusionKeys.addAll(Arrays.asList(keys_avatar_nameInMessage));
|
||||||
themeAccentExclusionKeys.add(key_chat_attachFileBackground);
|
themeAccentExclusionKeys.add(key_chat_attachFileBackground);
|
||||||
|
@ -4124,6 +4209,8 @@ public class Theme {
|
||||||
int eventType = -1;
|
int eventType = -1;
|
||||||
if (monthOfYear == 11 && dayOfMonth >= 24 && dayOfMonth <= 31 || monthOfYear == 0 && dayOfMonth == 1) {
|
if (monthOfYear == 11 && dayOfMonth >= 24 && dayOfMonth <= 31 || monthOfYear == 0 && dayOfMonth == 1) {
|
||||||
eventType = 0;
|
eventType = 0;
|
||||||
|
} else if (monthOfYear == 1 && dayOfMonth == 14) {
|
||||||
|
eventType = 1;
|
||||||
}
|
}
|
||||||
return eventType;
|
return eventType;
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,7 +237,9 @@ public class ThemeDescription {
|
||||||
if (drawablesToUpdate[a] == null) {
|
if (drawablesToUpdate[a] == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (drawablesToUpdate[a] instanceof ScamDrawable) {
|
if (drawablesToUpdate[a] instanceof BackDrawable) {
|
||||||
|
((BackDrawable) drawablesToUpdate[a]).setColor(color);
|
||||||
|
} else if (drawablesToUpdate[a] instanceof ScamDrawable) {
|
||||||
((ScamDrawable) drawablesToUpdate[a]).setColor(color);
|
((ScamDrawable) drawablesToUpdate[a]).setColor(color);
|
||||||
} else if (drawablesToUpdate[a] instanceof RLottieDrawable) {
|
} else if (drawablesToUpdate[a] instanceof RLottieDrawable) {
|
||||||
if (lottieLayerName != null) {
|
if (lottieLayerName != null) {
|
||||||
|
@ -699,6 +701,7 @@ public class ThemeDescription {
|
||||||
((RadialProgressView) object).setProgressColor(color);
|
((RadialProgressView) object).setProgressColor(color);
|
||||||
} else if (object instanceof Paint) {
|
} else if (object instanceof Paint) {
|
||||||
((Paint) object).setColor(color);
|
((Paint) object).setColor(color);
|
||||||
|
child.invalidate();
|
||||||
} else if (object instanceof SeekBarView) {
|
} else if (object instanceof SeekBarView) {
|
||||||
if ((changeFlags & FLAG_PROGRESSBAR) != 0) {
|
if ((changeFlags & FLAG_PROGRESSBAR) != 0) {
|
||||||
((SeekBarView) object).setOuterColor(color);
|
((SeekBarView) object).setOuterColor(color);
|
||||||
|
|
|
@ -249,20 +249,29 @@ public class ActionIntroActivity extends BaseFragment implements LocationControl
|
||||||
int y = (height - imageView.getMeasuredHeight()) / 2;
|
int y = (height - imageView.getMeasuredHeight()) / 2;
|
||||||
imageView.layout(0, y, imageView.getMeasuredWidth(), y + imageView.getMeasuredHeight());
|
imageView.layout(0, y, imageView.getMeasuredWidth(), y + imageView.getMeasuredHeight());
|
||||||
int x = (int) (width * 0.4f);
|
int x = (int) (width * 0.4f);
|
||||||
y = (int) (height * 0.22f);
|
y = (int) (height * 0.08f);
|
||||||
titleTextView.layout(x, y, x + titleTextView.getMeasuredWidth(), y + titleTextView.getMeasuredHeight());
|
titleTextView.layout(x, y, x + titleTextView.getMeasuredWidth(), y + titleTextView.getMeasuredHeight());
|
||||||
x = (int) (width * 0.4f + (width * 0.6f - descriptionLayout.getMeasuredWidth()) / 2);
|
x = (int) (width * 0.4f + (width * 0.6f - descriptionLayout.getMeasuredWidth()) / 2);
|
||||||
y = (int) (height * 0.39f);
|
y = (int) (height * 0.25f);
|
||||||
descriptionLayout.layout(x, y, x + descriptionLayout.getMeasuredWidth(), y + descriptionLayout.getMeasuredHeight());
|
descriptionLayout.layout(x, y, x + descriptionLayout.getMeasuredWidth(), y + descriptionLayout.getMeasuredHeight());
|
||||||
x = (int) (width * 0.4f + (width * 0.6f - buttonTextView.getMeasuredWidth()) / 2);
|
x = (int) (width * 0.4f + (width * 0.6f - buttonTextView.getMeasuredWidth()) / 2);
|
||||||
y = (int) (height * 0.74f);
|
y = (int) (height * 0.78f);
|
||||||
buttonTextView.layout(x, y, x + buttonTextView.getMeasuredWidth(), y + buttonTextView.getMeasuredHeight());
|
buttonTextView.layout(x, y, x + buttonTextView.getMeasuredWidth(), y + buttonTextView.getMeasuredHeight());
|
||||||
} else {
|
} else {
|
||||||
int y = (int) (height * 0.148f);
|
int y;
|
||||||
|
if (AndroidUtilities.displaySize.y < 1800) {
|
||||||
|
y = (int) (height * 0.06f);
|
||||||
|
imageView.layout(0, y, imageView.getMeasuredWidth(), y + imageView.getMeasuredHeight());
|
||||||
|
y = (int) (height * 0.463f);
|
||||||
|
titleTextView.layout(0, y, titleTextView.getMeasuredWidth(), y + titleTextView.getMeasuredHeight());
|
||||||
|
y = (int) (height * 0.543f);
|
||||||
|
} else {
|
||||||
|
y = (int) (height * 0.148f);
|
||||||
imageView.layout(0, y, imageView.getMeasuredWidth(), y + imageView.getMeasuredHeight());
|
imageView.layout(0, y, imageView.getMeasuredWidth(), y + imageView.getMeasuredHeight());
|
||||||
y = (int) (height * 0.551f);
|
y = (int) (height * 0.551f);
|
||||||
titleTextView.layout(0, y, titleTextView.getMeasuredWidth(), y + titleTextView.getMeasuredHeight());
|
titleTextView.layout(0, y, titleTextView.getMeasuredWidth(), y + titleTextView.getMeasuredHeight());
|
||||||
y = (int) (height * 0.631f);
|
y = (int) (height * 0.631f);
|
||||||
|
}
|
||||||
int x = (getMeasuredWidth() - descriptionLayout.getMeasuredWidth()) / 2;
|
int x = (getMeasuredWidth() - descriptionLayout.getMeasuredWidth()) / 2;
|
||||||
descriptionLayout.layout(x, y, x + descriptionLayout.getMeasuredWidth(), y + descriptionLayout.getMeasuredHeight());
|
descriptionLayout.layout(x, y, x + descriptionLayout.getMeasuredWidth(), y + descriptionLayout.getMeasuredHeight());
|
||||||
x = (width - buttonTextView.getMeasuredWidth()) / 2;
|
x = (width - buttonTextView.getMeasuredWidth()) / 2;
|
||||||
|
|
|
@ -221,6 +221,17 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter {
|
||||||
items.add(null); // divider
|
items.add(null); // divider
|
||||||
items.add(new Item(7, LocaleController.getString("InviteFriends", R.string.InviteFriends), R.drawable.menu_invite_ny));
|
items.add(new Item(7, LocaleController.getString("InviteFriends", R.string.InviteFriends), R.drawable.menu_invite_ny));
|
||||||
items.add(new Item(9, LocaleController.getString("TelegramFAQ", R.string.TelegramFAQ), R.drawable.menu_help_ny));
|
items.add(new Item(9, LocaleController.getString("TelegramFAQ", R.string.TelegramFAQ), R.drawable.menu_help_ny));
|
||||||
|
} else if (eventType == 1) {
|
||||||
|
items.add(new Item(2, LocaleController.getString("NewGroup", R.string.NewGroup), R.drawable.menu_groups_14));
|
||||||
|
items.add(new Item(3, LocaleController.getString("NewSecretChat", R.string.NewSecretChat), R.drawable.menu_secret_14));
|
||||||
|
items.add(new Item(4, LocaleController.getString("NewChannel", R.string.NewChannel), R.drawable.menu_broadcast_14));
|
||||||
|
items.add(new Item(6, LocaleController.getString("Contacts", R.string.Contacts), R.drawable.menu_contacts_14));
|
||||||
|
items.add(new Item(10, LocaleController.getString("Calls", R.string.Calls), R.drawable.menu_calls_14));
|
||||||
|
items.add(new Item(11, LocaleController.getString("SavedMessages", R.string.SavedMessages), R.drawable.menu_bookmarks_14));
|
||||||
|
items.add(new Item(8, LocaleController.getString("Settings", R.string.Settings), R.drawable.menu_settings_14));
|
||||||
|
items.add(null); // divider
|
||||||
|
items.add(new Item(7, LocaleController.getString("InviteFriends", R.string.InviteFriends), R.drawable.menu_secret_ny));
|
||||||
|
items.add(new Item(9, LocaleController.getString("TelegramFAQ", R.string.TelegramFAQ), R.drawable.menu_help));
|
||||||
} else {
|
} else {
|
||||||
items.add(new Item(2, LocaleController.getString("NewGroup", R.string.NewGroup), R.drawable.menu_groups));
|
items.add(new Item(2, LocaleController.getString("NewGroup", R.string.NewGroup), R.drawable.menu_groups));
|
||||||
items.add(new Item(3, LocaleController.getString("NewSecretChat", R.string.NewSecretChat), R.drawable.menu_secret));
|
items.add(new Item(3, LocaleController.getString("NewSecretChat", R.string.NewSecretChat), R.drawable.menu_secret));
|
||||||
|
|
|
@ -3761,7 +3761,7 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg
|
||||||
windowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
|
windowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
|
||||||
windowLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
|
windowLayoutParams.gravity = Gravity.TOP | Gravity.LEFT;
|
||||||
windowLayoutParams.type = WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
|
windowLayoutParams.type = WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
|
||||||
windowLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
windowLayoutParams.softInputMode = SharedConfig.smoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
||||||
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
|
||||||
if (Build.VERSION.SDK_INT >= 21) {
|
if (Build.VERSION.SDK_INT >= 21) {
|
||||||
windowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
|
windowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
|
||||||
|
|
|
@ -55,6 +55,7 @@ import org.telegram.messenger.ApplicationLoader;
|
||||||
import org.telegram.messenger.FileLoader;
|
import org.telegram.messenger.FileLoader;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.UserObject;
|
import org.telegram.messenger.UserObject;
|
||||||
import org.telegram.tgnet.TLRPC;
|
import org.telegram.tgnet.TLRPC;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
|
@ -212,7 +213,7 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
|
||||||
editText.setCursorColor(Theme.getColor(Theme.key_dialogTextBlack));
|
editText.setCursorColor(Theme.getColor(Theme.key_dialogTextBlack));
|
||||||
editText.setHintTextColor(Theme.getColor(Theme.key_chat_messagePanelHint));
|
editText.setHintTextColor(Theme.getColor(Theme.key_chat_messagePanelHint));
|
||||||
|
|
||||||
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private int lastNotifyWidth;
|
private int lastNotifyWidth;
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
@ -225,18 +226,27 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
|
||||||
|
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int kbHeight = getKeyboardHeight();
|
||||||
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : kbHeight;
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow && commentTextView != null && frameLayout2.getParent() == this) {
|
if (!AndroidUtilities.isInMultiwindow && commentTextView != null && frameLayout2.getParent() == this) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
|
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
|
||||||
}
|
}
|
||||||
} else if (commentTextView != null) {
|
}
|
||||||
|
|
||||||
|
if (kbHeight > AndroidUtilities.dp(20) && commentTextView != null) {
|
||||||
ignoreLayout = true;
|
ignoreLayout = true;
|
||||||
commentTextView.hideEmojiView();
|
commentTextView.hideEmojiView();
|
||||||
ignoreLayout = false;
|
ignoreLayout = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SharedConfig.smoothKeyboard && commentTextView != null && commentTextView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(getCurrentPanTranslationY());
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
emptyView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
|
||||||
int childCount = getChildCount();
|
int childCount = getChildCount();
|
||||||
for (int i = 0; i < childCount; i++) {
|
for (int i = 0; i < childCount; i++) {
|
||||||
View child = getChildAt(i);
|
View child = getChildAt(i);
|
||||||
|
@ -269,7 +279,8 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
|
||||||
}
|
}
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = commentTextView != null && frameLayout2.getParent() == this && getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = commentTextView != null && frameLayout2.getParent() == this && keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -323,7 +334,7 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
@ -390,7 +401,7 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -583,6 +594,21 @@ public class AudioSelectActivity extends BaseFragment implements NotificationCen
|
||||||
return fragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
if (listView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (commentTextView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(y);
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
emptyView.setTranslationY(0);
|
||||||
|
} else {
|
||||||
|
listView.setTranslationY(y);
|
||||||
|
emptyView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void updateEmptyView() {
|
private void updateEmptyView() {
|
||||||
if (loadingAudio) {
|
if (loadingAudio) {
|
||||||
listView.setEmptyView(progressView);
|
listView.setEmptyView(progressView);
|
||||||
|
|
|
@ -11,6 +11,9 @@ package org.telegram.ui.Cells;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.ColorFilter;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.PorterDuffColorFilter;
|
||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
import android.text.Spannable;
|
import android.text.Spannable;
|
||||||
import android.text.StaticLayout;
|
import android.text.StaticLayout;
|
||||||
|
@ -78,6 +81,11 @@ public class ChatActionCell extends BaseCell {
|
||||||
private int customDate;
|
private int customDate;
|
||||||
private CharSequence customText;
|
private CharSequence customText;
|
||||||
|
|
||||||
|
private String overrideBackground;
|
||||||
|
private String overrideText;
|
||||||
|
private ColorFilter overrideColorFilter;
|
||||||
|
private int overrideColor;
|
||||||
|
|
||||||
private ChatActionCellDelegate delegate;
|
private ChatActionCellDelegate delegate;
|
||||||
|
|
||||||
public ChatActionCell(Context context) {
|
public ChatActionCell(Context context) {
|
||||||
|
@ -125,6 +133,11 @@ public class ChatActionCell extends BaseCell {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOverrideColor(String background, String text) {
|
||||||
|
overrideBackground = background;
|
||||||
|
overrideText = text;
|
||||||
|
}
|
||||||
|
|
||||||
public void setMessageObject(MessageObject messageObject) {
|
public void setMessageObject(MessageObject messageObject) {
|
||||||
if (currentMessageObject == messageObject && (hasReplyMessage || messageObject.replyMessageObject == null)) {
|
if (currentMessageObject == messageObject && (hasReplyMessage || messageObject.replyMessageObject == null)) {
|
||||||
return;
|
return;
|
||||||
|
@ -407,7 +420,24 @@ public class ChatActionCell extends BaseCell {
|
||||||
imageReceiver.draw(canvas);
|
imageReceiver.draw(canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (textLayout != null) {
|
if (textLayout == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (overrideBackground != null) {
|
||||||
|
int color = Theme.getColor(overrideBackground);
|
||||||
|
if (color != overrideColor) {
|
||||||
|
overrideColor = color;
|
||||||
|
overrideColorFilter = new PorterDuffColorFilter(overrideColor, PorterDuff.Mode.MULTIPLY);
|
||||||
|
}
|
||||||
|
for (int a = 0; a < 4; a++) {
|
||||||
|
Theme.chat_cornerOuter[a].setColorFilter(overrideColorFilter);
|
||||||
|
Theme.chat_cornerInner[a].setColorFilter(overrideColorFilter);
|
||||||
|
}
|
||||||
|
Theme.chat_actionBackgroundPaint.setColor(overrideColor);
|
||||||
|
Theme.chat_actionTextPaint.setColor(Theme.getColor(overrideText));
|
||||||
|
}
|
||||||
|
|
||||||
final int count = textLayout.getLineCount();
|
final int count = textLayout.getLineCount();
|
||||||
final int corner = AndroidUtilities.dp(11);
|
final int corner = AndroidUtilities.dp(11);
|
||||||
final int cornerOffset = AndroidUtilities.dp(6);
|
final int cornerOffset = AndroidUtilities.dp(6);
|
||||||
|
@ -598,6 +628,14 @@ public class ChatActionCell extends BaseCell {
|
||||||
canvas.translate(textXLeft, textY);
|
canvas.translate(textXLeft, textY);
|
||||||
textLayout.draw(canvas);
|
textLayout.draw(canvas);
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
|
|
||||||
|
if (overrideColorFilter != null) {
|
||||||
|
for (int a = 0; a < 4; a++) {
|
||||||
|
Theme.chat_cornerOuter[a].setColorFilter(Theme.colorFilter);
|
||||||
|
Theme.chat_cornerInner[a].setColorFilter(Theme.colorFilter);
|
||||||
|
}
|
||||||
|
Theme.chat_actionBackgroundPaint.setColor(Theme.currentColor);
|
||||||
|
Theme.chat_actionTextPaint.setColor(Theme.getColor(Theme.key_chat_serviceText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4187,6 +4187,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
|
|
||||||
currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 40);
|
currentPhotoObjectThumb = FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 40);
|
||||||
photoParentObject = messageObject.photoThumbsObject;
|
photoParentObject = messageObject.photoThumbsObject;
|
||||||
|
photoImage.setRoundRadius(0);
|
||||||
|
canChangeRadius = false;
|
||||||
if (messageObject.attachPathExists) {
|
if (messageObject.attachPathExists) {
|
||||||
photoImage.setImage(ImageLocation.getForPath(messageObject.messageOwner.attachPath), filter,
|
photoImage.setImage(ImageLocation.getForPath(messageObject.messageOwner.attachPath), filter,
|
||||||
ImageLocation.getForObject(currentPhotoObjectThumb, photoParentObject), "b1",
|
ImageLocation.getForObject(currentPhotoObjectThumb, photoParentObject), "b1",
|
||||||
|
@ -4365,9 +4367,6 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
} else {
|
} else {
|
||||||
w = h = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.5f);
|
w = h = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.5f);
|
||||||
}
|
}
|
||||||
} else if (messageObject.isAnyKindOfSticker()) {
|
|
||||||
photoImage.setRoundRadius(0);
|
|
||||||
canChangeRadius = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int widthForCaption = 0;
|
int widthForCaption = 0;
|
||||||
|
@ -5753,7 +5752,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
timeX += AndroidUtilities.dp(4);
|
timeX += AndroidUtilities.dp(4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (SharedConfig.bubbleRadius >= 10 && captionLayout == null) {
|
if (SharedConfig.bubbleRadius >= 10 && captionLayout == null && documentAttachType != DOCUMENT_ATTACH_TYPE_ROUND && documentAttachType != DOCUMENT_ATTACH_TYPE_STICKER) {
|
||||||
timeX -= AndroidUtilities.dp(2);
|
timeX -= AndroidUtilities.dp(2);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -7934,7 +7933,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
viaWidth = (int) Math.ceil(Theme.chat_replyNamePaint.measureText(viaString, 0, viaString.length()));
|
viaWidth = (int) Math.ceil(Theme.chat_replyNamePaint.measureText(viaString, 0, viaString.length()));
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean authorName = !pinnedTop && drawName && isChat && !currentMessageObject.isOutOwner();
|
boolean authorName = (!pinnedTop || ChatObject.isChannel(currentChat) && !currentChat.megagroup) && drawName && isChat && !currentMessageObject.isOutOwner();
|
||||||
boolean viaBot = (messageObject.messageOwner.fwd_from == null || messageObject.type == 14) && viaUsername != null;
|
boolean viaBot = (messageObject.messageOwner.fwd_from == null || messageObject.type == 14) && viaUsername != null;
|
||||||
if (authorName || viaBot) {
|
if (authorName || viaBot) {
|
||||||
drawNameLayout = true;
|
drawNameLayout = true;
|
||||||
|
@ -8945,6 +8944,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
if (drawPinnedBottom) {
|
if (drawPinnedBottom) {
|
||||||
canvas.translate(0, AndroidUtilities.dp(2));
|
canvas.translate(0, AndroidUtilities.dp(2));
|
||||||
}
|
}
|
||||||
|
boolean bigRadius = false;
|
||||||
if (mediaBackground && captionLayout == null) {
|
if (mediaBackground && captionLayout == null) {
|
||||||
Paint paint;
|
Paint paint;
|
||||||
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
||||||
|
@ -8955,16 +8955,19 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
int oldAlpha = paint.getAlpha();
|
int oldAlpha = paint.getAlpha();
|
||||||
paint.setAlpha((int) (oldAlpha * timeAlpha));
|
paint.setAlpha((int) (oldAlpha * timeAlpha));
|
||||||
Theme.chat_timePaint.setAlpha((int) (255 * timeAlpha));
|
Theme.chat_timePaint.setAlpha((int) (255 * timeAlpha));
|
||||||
int x1 = timeX - AndroidUtilities.dp(SharedConfig.bubbleRadius >= 10 ? 6 : 4);
|
|
||||||
int y1 = layoutHeight - AndroidUtilities.dp(28);
|
|
||||||
rect.set(x1, y1, x1 + timeWidth + AndroidUtilities.dp((SharedConfig.bubbleRadius >= 10 ? 12 : 8) + (currentMessageObject.isOutOwner() ? 20 : 0)), y1 + AndroidUtilities.dp(17));
|
|
||||||
int r;
|
int r;
|
||||||
if (documentAttachType != DOCUMENT_ATTACH_TYPE_ROUND) {
|
if (documentAttachType != DOCUMENT_ATTACH_TYPE_ROUND && documentAttachType != DOCUMENT_ATTACH_TYPE_STICKER) {
|
||||||
int[] rad = photoImage.getRoundRadius();
|
int[] rad = photoImage.getRoundRadius();
|
||||||
r = Math.min(AndroidUtilities.dp(8), Math.max(rad[2], rad[3]));
|
r = Math.min(AndroidUtilities.dp(8), Math.max(rad[2], rad[3]));
|
||||||
|
bigRadius = SharedConfig.bubbleRadius >= 10;
|
||||||
} else {
|
} else {
|
||||||
r = AndroidUtilities.dp(4);
|
r = AndroidUtilities.dp(4);
|
||||||
}
|
}
|
||||||
|
int x1 = timeX - AndroidUtilities.dp(bigRadius ? 6 : 4);
|
||||||
|
int y1 = layoutHeight - AndroidUtilities.dp(28);
|
||||||
|
rect.set(x1, y1, x1 + timeWidth + AndroidUtilities.dp((bigRadius ? 12 : 8) + (currentMessageObject.isOutOwner() ? 20 : 0)), y1 + AndroidUtilities.dp(17));
|
||||||
|
|
||||||
canvas.drawRoundRect(rect, r, r, paint);
|
canvas.drawRoundRect(rect, r, r, paint);
|
||||||
paint.setAlpha(oldAlpha);
|
paint.setAlpha(oldAlpha);
|
||||||
|
|
||||||
|
@ -9088,11 +9091,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
if (mediaBackground && captionLayout == null) {
|
if (mediaBackground && captionLayout == null) {
|
||||||
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
||||||
Theme.chat_msgStickerClockDrawable.setAlpha((int) (255 * timeAlpha));
|
Theme.chat_msgStickerClockDrawable.setAlpha((int) (255 * timeAlpha));
|
||||||
setDrawableBounds(Theme.chat_msgStickerClockDrawable, layoutWidth - AndroidUtilities.dp(22.0f) - Theme.chat_msgStickerClockDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerClockDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgStickerClockDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 24 : 22) - Theme.chat_msgStickerClockDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerClockDrawable.getIntrinsicHeight());
|
||||||
Theme.chat_msgStickerClockDrawable.draw(canvas);
|
Theme.chat_msgStickerClockDrawable.draw(canvas);
|
||||||
Theme.chat_msgStickerClockDrawable.setAlpha(255);
|
Theme.chat_msgStickerClockDrawable.setAlpha(255);
|
||||||
} else {
|
} else {
|
||||||
setDrawableBounds(Theme.chat_msgMediaClockDrawable, layoutWidth - AndroidUtilities.dp(22.0f) - Theme.chat_msgMediaClockDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaClockDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgMediaClockDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 24 : 22) - Theme.chat_msgMediaClockDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaClockDrawable.getIntrinsicHeight());
|
||||||
Theme.chat_msgMediaClockDrawable.draw(canvas);
|
Theme.chat_msgMediaClockDrawable.draw(canvas);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -9104,7 +9107,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
if (isBroadcast) {
|
if (isBroadcast) {
|
||||||
if (drawCheck1 || drawCheck2) {
|
if (drawCheck1 || drawCheck2) {
|
||||||
if (mediaBackground && captionLayout == null) {
|
if (mediaBackground && captionLayout == null) {
|
||||||
setDrawableBounds(Theme.chat_msgBroadcastMediaDrawable, layoutWidth - AndroidUtilities.dp(24.0f) - Theme.chat_msgBroadcastMediaDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(14.0f) - Theme.chat_msgBroadcastMediaDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgBroadcastMediaDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 26 : 24) - Theme.chat_msgBroadcastMediaDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(14.0f) - Theme.chat_msgBroadcastMediaDrawable.getIntrinsicHeight());
|
||||||
Theme.chat_msgBroadcastMediaDrawable.draw(canvas);
|
Theme.chat_msgBroadcastMediaDrawable.draw(canvas);
|
||||||
} else {
|
} else {
|
||||||
setDrawableBounds(Theme.chat_msgBroadcastDrawable, layoutWidth - AndroidUtilities.dp(20.5f) - Theme.chat_msgBroadcastDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(8.0f) - Theme.chat_msgBroadcastDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgBroadcastDrawable, layoutWidth - AndroidUtilities.dp(20.5f) - Theme.chat_msgBroadcastDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(8.0f) - Theme.chat_msgBroadcastDrawable.getIntrinsicHeight());
|
||||||
|
@ -9116,16 +9119,16 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
if (mediaBackground && captionLayout == null) {
|
if (mediaBackground && captionLayout == null) {
|
||||||
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
||||||
if (drawCheck1) {
|
if (drawCheck1) {
|
||||||
setDrawableBounds(Theme.chat_msgStickerCheckDrawable, layoutWidth - AndroidUtilities.dp(26.3f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgStickerCheckDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 28.3f : 26.3f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicHeight());
|
||||||
} else {
|
} else {
|
||||||
setDrawableBounds(Theme.chat_msgStickerCheckDrawable, layoutWidth - AndroidUtilities.dp(21.5f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgStickerCheckDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 23.5f : 21.5f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerCheckDrawable.getIntrinsicHeight());
|
||||||
}
|
}
|
||||||
Theme.chat_msgStickerCheckDrawable.draw(canvas);
|
Theme.chat_msgStickerCheckDrawable.draw(canvas);
|
||||||
} else {
|
} else {
|
||||||
if (drawCheck1) {
|
if (drawCheck1) {
|
||||||
setDrawableBounds(Theme.chat_msgMediaCheckDrawable, layoutWidth - AndroidUtilities.dp(26.3f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgMediaCheckDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 28.3f : 26.3f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicHeight());
|
||||||
} else {
|
} else {
|
||||||
setDrawableBounds(Theme.chat_msgMediaCheckDrawable, layoutWidth - AndroidUtilities.dp(21.5f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgMediaCheckDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 23.5f : 21.5f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaCheckDrawable.getIntrinsicHeight());
|
||||||
}
|
}
|
||||||
Theme.chat_msgMediaCheckDrawable.setAlpha((int) (255 * timeAlpha));
|
Theme.chat_msgMediaCheckDrawable.setAlpha((int) (255 * timeAlpha));
|
||||||
Theme.chat_msgMediaCheckDrawable.draw(canvas);
|
Theme.chat_msgMediaCheckDrawable.draw(canvas);
|
||||||
|
@ -9135,10 +9138,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
Drawable drawable;
|
Drawable drawable;
|
||||||
if (drawCheck1) {
|
if (drawCheck1) {
|
||||||
drawable = isDrawSelectionBackground() ? Theme.chat_msgOutCheckReadSelectedDrawable : Theme.chat_msgOutCheckReadDrawable;
|
drawable = isDrawSelectionBackground() ? Theme.chat_msgOutCheckReadSelectedDrawable : Theme.chat_msgOutCheckReadDrawable;
|
||||||
setDrawableBounds(drawable, layoutWidth - AndroidUtilities.dp(22.5f) - drawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(8.0f) - drawable.getIntrinsicHeight());
|
setDrawableBounds(drawable, layoutWidth - AndroidUtilities.dp(22.5f) - drawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(pinnedBottom || pinnedTop ? 9 : 8) - drawable.getIntrinsicHeight());
|
||||||
} else {
|
} else {
|
||||||
drawable = isDrawSelectionBackground() ? Theme.chat_msgOutCheckSelectedDrawable : Theme.chat_msgOutCheckDrawable;
|
drawable = isDrawSelectionBackground() ? Theme.chat_msgOutCheckSelectedDrawable : Theme.chat_msgOutCheckDrawable;
|
||||||
setDrawableBounds(drawable, layoutWidth - AndroidUtilities.dp(18.5f) - drawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(8.0f) - drawable.getIntrinsicHeight());
|
setDrawableBounds(drawable, layoutWidth - AndroidUtilities.dp(18.5f) - drawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(pinnedBottom || pinnedTop ? 9 : 8) - drawable.getIntrinsicHeight());
|
||||||
}
|
}
|
||||||
drawable.draw(canvas);
|
drawable.draw(canvas);
|
||||||
}
|
}
|
||||||
|
@ -9146,17 +9149,17 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
if (drawCheck1) {
|
if (drawCheck1) {
|
||||||
if (mediaBackground && captionLayout == null) {
|
if (mediaBackground && captionLayout == null) {
|
||||||
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
if (currentMessageObject.shouldDrawWithoutBackground()) {
|
||||||
setDrawableBounds(Theme.chat_msgStickerHalfCheckDrawable, layoutWidth - AndroidUtilities.dp(21.5f) - Theme.chat_msgStickerHalfCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerHalfCheckDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgStickerHalfCheckDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 23.5f : 21.5f) - Theme.chat_msgStickerHalfCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgStickerHalfCheckDrawable.getIntrinsicHeight());
|
||||||
Theme.chat_msgStickerHalfCheckDrawable.draw(canvas);
|
Theme.chat_msgStickerHalfCheckDrawable.draw(canvas);
|
||||||
} else {
|
} else {
|
||||||
setDrawableBounds(Theme.chat_msgMediaHalfCheckDrawable, layoutWidth - AndroidUtilities.dp(21.5f) - Theme.chat_msgMediaHalfCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaHalfCheckDrawable.getIntrinsicHeight());
|
setDrawableBounds(Theme.chat_msgMediaHalfCheckDrawable, layoutWidth - AndroidUtilities.dp(bigRadius ? 23.5f : 21.5f) - Theme.chat_msgMediaHalfCheckDrawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(13.5f) - Theme.chat_msgMediaHalfCheckDrawable.getIntrinsicHeight());
|
||||||
Theme.chat_msgMediaHalfCheckDrawable.setAlpha((int) (255 * timeAlpha));
|
Theme.chat_msgMediaHalfCheckDrawable.setAlpha((int) (255 * timeAlpha));
|
||||||
Theme.chat_msgMediaHalfCheckDrawable.draw(canvas);
|
Theme.chat_msgMediaHalfCheckDrawable.draw(canvas);
|
||||||
Theme.chat_msgMediaHalfCheckDrawable.setAlpha(255);
|
Theme.chat_msgMediaHalfCheckDrawable.setAlpha(255);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Drawable drawable = isDrawSelectionBackground() ? Theme.chat_msgOutHalfCheckSelectedDrawable : Theme.chat_msgOutHalfCheckDrawable;
|
Drawable drawable = isDrawSelectionBackground() ? Theme.chat_msgOutHalfCheckSelectedDrawable : Theme.chat_msgOutHalfCheckDrawable;
|
||||||
setDrawableBounds(drawable, layoutWidth - AndroidUtilities.dp(18) - drawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(8.0f) - drawable.getIntrinsicHeight());
|
setDrawableBounds(drawable, layoutWidth - AndroidUtilities.dp(18) - drawable.getIntrinsicWidth(), layoutHeight - AndroidUtilities.dp(pinnedBottom || pinnedTop ? 9 : 8) - drawable.getIntrinsicHeight());
|
||||||
drawable.draw(canvas);
|
drawable.draw(canvas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9169,7 +9172,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||||
y = layoutHeight - AndroidUtilities.dp(26.5f);
|
y = layoutHeight - AndroidUtilities.dp(26.5f);
|
||||||
} else {
|
} else {
|
||||||
x = layoutWidth - AndroidUtilities.dp(32);
|
x = layoutWidth - AndroidUtilities.dp(32);
|
||||||
y = layoutHeight - AndroidUtilities.dp(21);
|
y = layoutHeight - AndroidUtilities.dp(pinnedBottom || pinnedTop ? 22 : 21);
|
||||||
}
|
}
|
||||||
rect.set(x, y, x + AndroidUtilities.dp(14), y + AndroidUtilities.dp(14));
|
rect.set(x, y, x + AndroidUtilities.dp(14), y + AndroidUtilities.dp(14));
|
||||||
canvas.drawRoundRect(rect, AndroidUtilities.dp(1), AndroidUtilities.dp(1), Theme.chat_msgErrorPaint);
|
canvas.drawRoundRect(rect, AndroidUtilities.dp(1), AndroidUtilities.dp(1), Theme.chat_msgErrorPaint);
|
||||||
|
|
|
@ -134,6 +134,13 @@ public class ManageChatUserCell extends FrameLayout {
|
||||||
super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY));
|
super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64) + (needDivider ? 1 : 0), MeasureSpec.EXACTLY));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getUserId() {
|
||||||
|
if (currentObject instanceof TLRPC.User) {
|
||||||
|
return ((TLRPC.User) currentObject).id;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
public void setStatusColors(int color, int onlineColor) {
|
public void setStatusColors(int color, int onlineColor) {
|
||||||
statusColor = color;
|
statusColor = color;
|
||||||
statusOnlineColor = onlineColor;
|
statusOnlineColor = onlineColor;
|
||||||
|
@ -143,6 +150,10 @@ public class ManageChatUserCell extends FrameLayout {
|
||||||
isAdmin = value;
|
isAdmin = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasAvatarSet() {
|
||||||
|
return avatarImageView.getImageReceiver().hasNotThumb();
|
||||||
|
}
|
||||||
|
|
||||||
public void update(int mask) {
|
public void update(int mask) {
|
||||||
if (currentObject == null) {
|
if (currentObject == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -204,6 +204,14 @@ public class ProfileSearchCell extends BaseCell {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TLRPC.User getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TLRPC.Chat getChat() {
|
||||||
|
return chat;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSublabelOffset(int x, int y) {
|
public void setSublabelOffset(int x, int y) {
|
||||||
sublabelOffsetX = x;
|
sublabelOffsetX = x;
|
||||||
sublabelOffsetY = y;
|
sublabelOffsetY = y;
|
||||||
|
|
|
@ -271,6 +271,24 @@ public class SharedPhotoVideoCell extends FrameLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invalidate() {
|
||||||
|
for (int a = 0; a < 6; a++) {
|
||||||
|
photoVideoViews[a].invalidate();
|
||||||
|
}
|
||||||
|
super.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDetachedFromWindow() {
|
||||||
|
super.onDetachedFromWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onAttachedToWindow() {
|
||||||
|
super.onAttachedToWindow();
|
||||||
|
}
|
||||||
|
|
||||||
public void setDelegate(SharedPhotoVideoCellDelegate delegate) {
|
public void setDelegate(SharedPhotoVideoCellDelegate delegate) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
|
@ -838,7 +838,6 @@ public class ChangePhoneActivity extends BaseFragment {
|
||||||
|
|
||||||
private Timer timeTimer;
|
private Timer timeTimer;
|
||||||
private Timer codeTimer;
|
private Timer codeTimer;
|
||||||
private int openTime;
|
|
||||||
private final Object timerSync = new Object();
|
private final Object timerSync = new Object();
|
||||||
private int time = 60000;
|
private int time = 60000;
|
||||||
private int codeTime = 15000;
|
private int codeTime = 15000;
|
||||||
|
@ -1100,7 +1099,6 @@ public class ChangePhoneActivity extends BaseFragment {
|
||||||
requestPhone = params.getString("phoneFormated");
|
requestPhone = params.getString("phoneFormated");
|
||||||
phoneHash = params.getString("phoneHash");
|
phoneHash = params.getString("phoneHash");
|
||||||
timeout = time = params.getInt("timeout");
|
timeout = time = params.getInt("timeout");
|
||||||
openTime = (int) (System.currentTimeMillis() / 1000);
|
|
||||||
nextType = params.getInt("nextType");
|
nextType = params.getInt("nextType");
|
||||||
pattern = params.getString("pattern");
|
pattern = params.getString("pattern");
|
||||||
length = params.getInt("length");
|
length = params.getInt("length");
|
||||||
|
|
|
@ -32,7 +32,7 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.core.content.FileProvider;
|
import androidx.core.content.FileProvider;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.LinearSmoothScrollerMiddle;
|
import androidx.recyclerview.widget.LinearSmoothScrollerCustom;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
@ -73,6 +73,7 @@ import org.telegram.messenger.MessageObject;
|
||||||
import org.telegram.messenger.MessagesController;
|
import org.telegram.messenger.MessagesController;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
import org.telegram.messenger.Utilities;
|
||||||
import org.telegram.messenger.browser.Browser;
|
import org.telegram.messenger.browser.Browser;
|
||||||
|
@ -556,7 +557,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
avatarContainer.setSubtitle(LocaleController.getString("EventLogAllEvents", R.string.EventLogAllEvents));
|
avatarContainer.setSubtitle(LocaleController.getString("EventLogAllEvents", R.string.EventLogAllEvents));
|
||||||
avatarContainer.setChatAvatar(currentChat);
|
avatarContainer.setChatAvatar(currentChat);
|
||||||
|
|
||||||
fragmentView = new SizeNotifierFrameLayout(context) {
|
fragmentView = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onAttachedToWindow() {
|
protected void onAttachedToWindow() {
|
||||||
|
@ -596,8 +597,6 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
heightSize -= actionBarHeight;
|
heightSize -= actionBarHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
|
||||||
|
|
||||||
int childCount = getChildCount();
|
int childCount = getChildCount();
|
||||||
|
|
||||||
for (int i = 0; i < childCount; i++) {
|
for (int i = 0; i < childCount; i++) {
|
||||||
|
@ -773,7 +772,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
|
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
|
||||||
LinearSmoothScrollerMiddle linearSmoothScroller = new LinearSmoothScrollerMiddle(recyclerView.getContext());
|
LinearSmoothScrollerCustom linearSmoothScroller = new LinearSmoothScrollerCustom(recyclerView.getContext(), LinearSmoothScrollerCustom.POSITION_MIDDLE);
|
||||||
linearSmoothScroller.setTargetPosition(position);
|
linearSmoothScroller.setTargetPosition(position);
|
||||||
startSmoothScroll(linearSmoothScroller);
|
startSmoothScroll(linearSmoothScroller);
|
||||||
}
|
}
|
||||||
|
@ -1958,7 +1957,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
args.putInt("user_id", user.id);
|
args.putInt("user_id", user.id);
|
||||||
addCanBanUser(args, user.id);
|
addCanBanUser(args, user.id);
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
ProfileActivity fragment = new ProfileActivity(args);
|
||||||
fragment.setPlayProfileAnimation(false);
|
fragment.setPlayProfileAnimation(0);
|
||||||
presentFragment(fragment);
|
presentFragment(fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2188,7 +2187,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
args.putInt("user_id", uid);
|
args.putInt("user_id", uid);
|
||||||
addCanBanUser(args, uid);
|
addCanBanUser(args, uid);
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
ProfileActivity fragment = new ProfileActivity(args);
|
||||||
fragment.setPlayProfileAnimation(false);
|
fragment.setPlayProfileAnimation(0);
|
||||||
presentFragment(fragment);
|
presentFragment(fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2429,11 +2428,13 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_avatar_nameInMessagePink),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_avatar_nameInMessagePink),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable.getShadowDrawable(), Theme.chat_msgInMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_inBubbleShadow),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgInDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgInMediaDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgOutDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgOutMediaDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable.getShadowDrawable(), Theme.chat_msgOutMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_outBubbleShadow),
|
|
||||||
new ThemeDescription(chatListView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceText),
|
new ThemeDescription(chatListView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceText),
|
||||||
new ThemeDescription(chatListView, ThemeDescription.FLAG_LINKCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceLink),
|
new ThemeDescription(chatListView, ThemeDescription.FLAG_LINKCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceLink),
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.telegram.messenger.LocaleController;
|
||||||
import org.telegram.messenger.MessagesController;
|
import org.telegram.messenger.MessagesController;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.tgnet.ConnectionsManager;
|
import org.telegram.tgnet.ConnectionsManager;
|
||||||
import org.telegram.tgnet.TLRPC;
|
import org.telegram.tgnet.TLRPC;
|
||||||
import org.telegram.ui.ActionBar.ActionBar;
|
import org.telegram.ui.ActionBar.ActionBar;
|
||||||
|
@ -286,7 +287,7 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC
|
||||||
if (currentStep == 0) {
|
if (currentStep == 0) {
|
||||||
actionBar.setTitle(LocaleController.getString("NewChannel", R.string.NewChannel));
|
actionBar.setTitle(LocaleController.getString("NewChannel", R.string.NewChannel));
|
||||||
|
|
||||||
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
|
||||||
|
@ -300,7 +301,7 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC
|
||||||
|
|
||||||
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize > AndroidUtilities.dp(20)) {
|
if (keyboardSize > AndroidUtilities.dp(20)) {
|
||||||
ignoreLayout = true;
|
ignoreLayout = true;
|
||||||
nameTextView.hideEmojiView();
|
nameTextView.hideEmojiView();
|
||||||
|
@ -333,7 +334,8 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? nameTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? nameTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -387,7 +389,7 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
|
|
@ -48,7 +48,7 @@ import android.provider.MediaStore;
|
||||||
import androidx.core.content.FileProvider;
|
import androidx.core.content.FileProvider;
|
||||||
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.LinearSmoothScrollerMiddle;
|
import androidx.recyclerview.widget.LinearSmoothScrollerCustom;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import android.text.Layout;
|
import android.text.Layout;
|
||||||
|
@ -97,6 +97,7 @@ import org.telegram.PhoneFormat.PhoneFormat;
|
||||||
import org.telegram.messenger.BuildConfig;
|
import org.telegram.messenger.BuildConfig;
|
||||||
import org.telegram.messenger.BuildVars;
|
import org.telegram.messenger.BuildVars;
|
||||||
import org.telegram.messenger.ChatObject;
|
import org.telegram.messenger.ChatObject;
|
||||||
|
import org.telegram.messenger.EmojiData;
|
||||||
import org.telegram.messenger.MediaDataController;
|
import org.telegram.messenger.MediaDataController;
|
||||||
import org.telegram.messenger.Emoji;
|
import org.telegram.messenger.Emoji;
|
||||||
import org.telegram.messenger.ImageLocation;
|
import org.telegram.messenger.ImageLocation;
|
||||||
|
@ -286,6 +287,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
private TextView reportSpamButton;
|
private TextView reportSpamButton;
|
||||||
private ImageView closeReportSpam;
|
private ImageView closeReportSpam;
|
||||||
private FragmentContextView fragmentContextView;
|
private FragmentContextView fragmentContextView;
|
||||||
|
private FragmentContextView fragmentLocationContextView;
|
||||||
private View replyLineView;
|
private View replyLineView;
|
||||||
private TextView emptyView;
|
private TextView emptyView;
|
||||||
private TextView gifHintTextView;
|
private TextView gifHintTextView;
|
||||||
|
@ -537,6 +539,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
|
|
||||||
private FireworksOverlay fireworksOverlay;
|
private FireworksOverlay fireworksOverlay;
|
||||||
|
|
||||||
|
private boolean swipeBackEnabled = true;
|
||||||
|
|
||||||
public static Pattern publicMsgUrlPattern;
|
public static Pattern publicMsgUrlPattern;
|
||||||
public static Pattern privateMsgUrlPattern;
|
public static Pattern privateMsgUrlPattern;
|
||||||
|
|
||||||
|
@ -660,7 +664,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
object.viewX = coords[0];
|
object.viewX = coords[0];
|
||||||
object.viewY = coords[1] - (Build.VERSION.SDK_INT >= 21 ? 0 : AndroidUtilities.statusBarHeight);
|
object.viewY = coords[1] - (Build.VERSION.SDK_INT >= 21 ? 0 : AndroidUtilities.statusBarHeight);
|
||||||
object.parentView = chatListView;
|
object.parentView = chatListView;
|
||||||
object.animatingImageView = pagedownButton != null && pagedownButton.getTag() != null ? animatingImageView : null;
|
object.animatingImageView = !SharedConfig.smoothKeyboard && pagedownButton != null && pagedownButton.getTag() != null ? animatingImageView : null;
|
||||||
object.imageReceiver = imageReceiver;
|
object.imageReceiver = imageReceiver;
|
||||||
if (needPreview) {
|
if (needPreview) {
|
||||||
object.thumb = imageReceiver.getBitmapSafe();
|
object.thumb = imageReceiver.getBitmapSafe();
|
||||||
|
@ -672,7 +676,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (pinnedMessageView != null && pinnedMessageView.getTag() == null || topChatPanelView != null && topChatPanelView.getTag() == null) {
|
if (pinnedMessageView != null && pinnedMessageView.getTag() == null || topChatPanelView != null && topChatPanelView.getTag() == null) {
|
||||||
object.clipTopAddition = AndroidUtilities.dp(48);
|
object.clipTopAddition = AndroidUtilities.dp(48);
|
||||||
}
|
}
|
||||||
object.clipTopAddition += chatListViewClipTop;
|
object.clipTopAddition += chatListViewClipTop + getCurrentPanTranslationY();
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1099,6 +1103,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (chatActivityEnterView != null) {
|
if (chatActivityEnterView != null) {
|
||||||
chatActivityEnterView.onDestroy();
|
chatActivityEnterView.onDestroy();
|
||||||
}
|
}
|
||||||
|
if (avatarContainer != null) {
|
||||||
|
avatarContainer.onDestroy();
|
||||||
|
}
|
||||||
if (mentionsAdapter != null) {
|
if (mentionsAdapter != null) {
|
||||||
mentionsAdapter.onDestroy();
|
mentionsAdapter.onDestroy();
|
||||||
}
|
}
|
||||||
|
@ -1468,6 +1475,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (avatarContainer != null) {
|
||||||
|
avatarContainer.onDestroy();
|
||||||
|
}
|
||||||
avatarContainer = new ChatAvatarContainer(context, this, currentEncryptedChat != null);
|
avatarContainer = new ChatAvatarContainer(context, this, currentEncryptedChat != null);
|
||||||
if (inPreviewMode) {
|
if (inPreviewMode) {
|
||||||
avatarContainer.setOccupyStatusBar(false);
|
avatarContainer.setOccupyStatusBar(false);
|
||||||
|
@ -1741,7 +1751,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
fragmentView = new SizeNotifierFrameLayout(context, parentLayout) {
|
fragmentView = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard, parentLayout) {
|
||||||
|
|
||||||
int inputFieldHeight = 0;
|
int inputFieldHeight = 0;
|
||||||
|
|
||||||
|
@ -1838,7 +1848,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (child == actionBar && parentLayout != null) {
|
if (child == actionBar && parentLayout != null) {
|
||||||
parentLayout.drawHeaderShadow(canvas, actionBar.getVisibility() == VISIBLE ? actionBar.getMeasuredHeight() + (inPreviewMode && Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0) : 0);
|
parentLayout.drawHeaderShadow(canvas, actionBar.getVisibility() == VISIBLE ? (int) actionBar.getTranslationY() + actionBar.getMeasuredHeight() + (inPreviewMode && Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0) : 0);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1869,7 +1879,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), scrimPaint);
|
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), scrimPaint);
|
||||||
int chatListViewTop = (int) chatListView.getY();
|
int chatListViewTop = (int) chatListView.getY();
|
||||||
int chatListViewBottom = chatListViewTop + chatListView.getMeasuredHeight();
|
int chatListViewBottom = chatListViewTop + chatListView.getMeasuredHeight();
|
||||||
int listTop = chatListView.getTop() + chatListView.getPaddingTop() - AndroidUtilities.dp(4) + (chatActivityEnterView.getMeasuredHeight() - AndroidUtilities.dp(51));
|
int listTop = chatListView.getTop() + chatListView.getPaddingTop() - AndroidUtilities.dp(4) + (chatActivityEnterView.getMeasuredHeight() - AndroidUtilities.dp(51)) + getCurrentPanTranslationY();
|
||||||
MessageObject.GroupedMessages scrimGroup;
|
MessageObject.GroupedMessages scrimGroup;
|
||||||
if (scrimView instanceof ChatMessageCell) {
|
if (scrimView instanceof ChatMessageCell) {
|
||||||
scrimGroup = ((ChatMessageCell) scrimView).getCurrentMessagesGroup();
|
scrimGroup = ((ChatMessageCell) scrimView).getCurrentMessagesGroup();
|
||||||
|
@ -2003,13 +2013,17 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
heightSize -= getPaddingTop();
|
heightSize -= getPaddingTop();
|
||||||
|
|
||||||
|
if (SharedConfig.smoothKeyboard && chatActivityEnterView.isPopupShowing()) {
|
||||||
|
setNonNoveTranslation(getCurrentPanTranslationY());
|
||||||
|
}
|
||||||
|
|
||||||
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
||||||
int actionBarHeight = actionBar.getMeasuredHeight();
|
int actionBarHeight = actionBar.getMeasuredHeight();
|
||||||
if (actionBar.getVisibility() == VISIBLE) {
|
if (actionBar.getVisibility() == VISIBLE) {
|
||||||
heightSize -= actionBarHeight;
|
heightSize -= actionBarHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow) {
|
if (!AndroidUtilities.isInMultiwindow) {
|
||||||
|
@ -2160,7 +2174,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow ? chatActivityEnterView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow ? chatActivityEnterView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -2266,6 +2281,45 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
notifyHeightChanged();
|
notifyHeightChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setNonNoveTranslation(int y) {
|
||||||
|
contentView.setTranslationY(y);
|
||||||
|
actionBar.setTranslationY(0);
|
||||||
|
contentView.setBackgroundTranslation(0);
|
||||||
|
if (pinnedMessageView != null) {
|
||||||
|
pinnedMessageView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
if (fragmentContextView != null) {
|
||||||
|
fragmentContextView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
if (fragmentLocationContextView != null) {
|
||||||
|
fragmentLocationContextView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
topChatPanelView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
if (getParentLayout() != null && getParentLayout().isPreviewOpenAnimationInProgress()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (chatAttachAlert != null && chatAttachAlert.isShowing() || chatActivityEnterView.isPopupShowing()) {
|
||||||
|
setNonNoveTranslation(y);
|
||||||
|
} else {
|
||||||
|
actionBar.setTranslationY(y);
|
||||||
|
contentView.setBackgroundTranslation(y);
|
||||||
|
if (pinnedMessageView != null) {
|
||||||
|
pinnedMessageView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (fragmentContextView != null) {
|
||||||
|
fragmentContextView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (fragmentLocationContextView != null) {
|
||||||
|
fragmentLocationContextView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
topChatPanelView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
contentView = (SizeNotifierFrameLayout) fragmentView;
|
contentView = (SizeNotifierFrameLayout) fragmentView;
|
||||||
|
@ -3041,7 +3095,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
|
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
|
||||||
LinearSmoothScrollerMiddle linearSmoothScroller = new LinearSmoothScrollerMiddle(recyclerView.getContext());
|
LinearSmoothScrollerCustom linearSmoothScroller = new LinearSmoothScrollerCustom(recyclerView.getContext(), LinearSmoothScrollerCustom.POSITION_MIDDLE);
|
||||||
linearSmoothScroller.setTargetPosition(position);
|
linearSmoothScroller.setTargetPosition(position);
|
||||||
startSmoothScroll(linearSmoothScroller);
|
startSmoothScroll(linearSmoothScroller);
|
||||||
}
|
}
|
||||||
|
@ -4132,8 +4186,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
mentiondownButton.setContentDescription(LocaleController.getString("AccDescrMentionDown", R.string.AccDescrMentionDown));
|
mentiondownButton.setContentDescription(LocaleController.getString("AccDescrMentionDown", R.string.AccDescrMentionDown));
|
||||||
|
|
||||||
if (!AndroidUtilities.isTablet() || AndroidUtilities.isSmallTablet()) {
|
if (!AndroidUtilities.isTablet() || AndroidUtilities.isSmallTablet()) {
|
||||||
FragmentContextView fragmentLocationContextView = new FragmentContextView(context, this, true);
|
contentView.addView(fragmentLocationContextView = new FragmentContextView(context, this, true), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 39, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
|
||||||
contentView.addView(fragmentLocationContextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 39, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
|
|
||||||
contentView.addView(fragmentContextView = new FragmentContextView(context, this, false), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 39, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
|
contentView.addView(fragmentContextView = new FragmentContextView(context, this, false), LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 39, Gravity.TOP | Gravity.LEFT, 0, -36, 0, 0));
|
||||||
fragmentContextView.setAdditionalContextView(fragmentLocationContextView);
|
fragmentContextView.setAdditionalContextView(fragmentLocationContextView);
|
||||||
fragmentLocationContextView.setAdditionalContextView(fragmentContextView);
|
fragmentLocationContextView.setAdditionalContextView(fragmentContextView);
|
||||||
|
@ -4147,7 +4200,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
messagesSearchListView.setVisibility(View.GONE);
|
messagesSearchListView.setVisibility(View.GONE);
|
||||||
messagesSearchListView.setAlpha(0.0f);
|
messagesSearchListView.setAlpha(0.0f);
|
||||||
messagesSearchListView.setAdapter(messagesSearchAdapter = new MessagesSearchAdapter(context));
|
messagesSearchListView.setAdapter(messagesSearchAdapter = new MessagesSearchAdapter(context));
|
||||||
contentView.addView(messagesSearchListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP));
|
contentView.addView(messagesSearchListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 48));
|
||||||
messagesSearchListView.setOnItemClickListener((view, position) -> {
|
messagesSearchListView.setOnItemClickListener((view, position) -> {
|
||||||
getMediaDataController().jumpToSearchedMessage(classGuid, position);
|
getMediaDataController().jumpToSearchedMessage(classGuid, position);
|
||||||
showMessagesSearchListView(false);
|
showMessagesSearchListView(false);
|
||||||
|
@ -5590,6 +5643,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
return dialog_id;
|
return dialog_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getMergeDialogId() {
|
||||||
|
return mergeDialogId;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasReportSpam() {
|
public boolean hasReportSpam() {
|
||||||
return topChatPanelView != null && topChatPanelView.getTag() == null && reportSpamButton.getVisibility() != View.GONE;
|
return topChatPanelView != null && topChatPanelView.getTag() == null && reportSpamButton.getVisibility() != View.GONE;
|
||||||
}
|
}
|
||||||
|
@ -8406,7 +8463,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (canSave) {
|
if (canSave) {
|
||||||
if (messageObject.getDocument() != null) {
|
if (messageObject.getDocument() != null && !messageObject.isMusic()) {
|
||||||
String mime = messageObject.getDocument().mime_type;
|
String mime = messageObject.getDocument().mime_type;
|
||||||
if (mime != null) {
|
if (mime != null) {
|
||||||
if (messageObject.getDocumentName().toLowerCase().endsWith("attheme")) {
|
if (messageObject.getDocumentName().toLowerCase().endsWith("attheme")) {
|
||||||
|
@ -14036,7 +14093,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
} else {
|
} else {
|
||||||
popupY = AndroidUtilities.statusBarHeight;
|
popupY = AndroidUtilities.statusBarHeight;
|
||||||
}
|
}
|
||||||
scrimPopupWindow.showAtLocation(chatListView, Gravity.LEFT | Gravity.TOP, popupX, popupY);
|
scrimPopupWindow.showAtLocation(chatListView, Gravity.LEFT | Gravity.TOP, popupX, popupY - getCurrentPanTranslationY());
|
||||||
chatListView.stopScroll();
|
chatListView.stopScroll();
|
||||||
chatLayoutManager.setCanScrollVertically(false);
|
chatLayoutManager.setCanScrollVertically(false);
|
||||||
scrimView = v;
|
scrimView = v;
|
||||||
|
@ -14188,7 +14245,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
drawable.restart();
|
drawable.restart();
|
||||||
if (message.isAnimatedEmoji()) {
|
if (message.isAnimatedEmoji()) {
|
||||||
String emoji = message.getStickerEmoji();
|
String emoji = message.getStickerEmoji();
|
||||||
if ("❤".equals(emoji)) {
|
if (EmojiData.isHeartEmoji(emoji)) {
|
||||||
HashMap<Integer, Integer> pattern = new HashMap<>();
|
HashMap<Integer, Integer> pattern = new HashMap<>();
|
||||||
pattern.put(1, 1);
|
pattern.put(1, 1);
|
||||||
pattern.put(13, 0);
|
pattern.put(13, 0);
|
||||||
|
@ -15301,6 +15358,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
return swipeBackEnabled;
|
return swipeBackEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return swipeBackEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
public class ChatActivityAdapter extends RecyclerAnimationScrollHelper.AnimatableAdapter {
|
public class ChatActivityAdapter extends RecyclerAnimationScrollHelper.AnimatableAdapter {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
@ -15487,7 +15549,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt("user_id", user.id);
|
args.putInt("user_id", user.id);
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
ProfileActivity fragment = new ProfileActivity(args);
|
||||||
fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == user.id);
|
fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == user.id ? 1 : 0);
|
||||||
presentFragment(fragment);
|
presentFragment(fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15644,6 +15706,45 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
messageObject.forceSeekTo = seekTime / (float) messageObject.getDuration();
|
messageObject.forceSeekTo = seekTime / (float) messageObject.getDuration();
|
||||||
mediaController.playMessage(messageObject);
|
mediaController.playMessage(messageObject);
|
||||||
}
|
}
|
||||||
|
} else if (str.startsWith("card:")) {
|
||||||
|
String number = str.substring(5);
|
||||||
|
final AlertDialog[] progressDialog = new AlertDialog[]{new AlertDialog(getParentActivity(), 3)};
|
||||||
|
TLRPC.TL_payments_getBankCardData req = new TLRPC.TL_payments_getBankCardData();
|
||||||
|
req.number = number;
|
||||||
|
int requestId = getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||||
|
try {
|
||||||
|
progressDialog[0].dismiss();
|
||||||
|
} catch (Throwable ignore) {
|
||||||
|
|
||||||
|
}
|
||||||
|
progressDialog[0] = null;
|
||||||
|
if (response instanceof TLRPC.TL_payments_bankCardData) {
|
||||||
|
TLRPC.TL_payments_bankCardData data = (TLRPC.TL_payments_bankCardData) response;
|
||||||
|
BottomSheet.Builder builder = new BottomSheet.Builder(getParentActivity());
|
||||||
|
ArrayList<CharSequence> arrayList = new ArrayList<>();
|
||||||
|
for (int a = 0, N = data.open_urls.size(); a < N; a++) {
|
||||||
|
arrayList.add(data.open_urls.get(a).name);
|
||||||
|
}
|
||||||
|
arrayList.add(LocaleController.getString("CopyCardNumber", R.string.CopyCardNumber));
|
||||||
|
builder.setTitle(data.title);
|
||||||
|
builder.setItems(arrayList.toArray(new CharSequence[0]), (dialog, which) -> {
|
||||||
|
if (which < data.open_urls.size()) {
|
||||||
|
Browser.openUrl(getParentActivity(), data.open_urls.get(which).url, inlineReturn == 0, false);
|
||||||
|
} else {
|
||||||
|
AndroidUtilities.addToClipboard(number);
|
||||||
|
Toast.makeText(ApplicationLoader.applicationContext, LocaleController.getString("CardNumberCopied", R.string.CardNumberCopied), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
showDialog(builder.create());
|
||||||
|
}
|
||||||
|
}), null, null, 0, getMessagesController().webFileDatacenterId, ConnectionsManager.ConnectionTypeGeneric, true);
|
||||||
|
AndroidUtilities.runOnUIThread(() -> {
|
||||||
|
if (progressDialog[0] == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
progressDialog[0].setOnCancelListener(dialog -> getConnectionsManager().cancelRequest(requestId, true));
|
||||||
|
showDialog(progressDialog[0]);
|
||||||
|
}, 500);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
final String urlFinal = ((URLSpan) url).getURL();
|
final String urlFinal = ((URLSpan) url).getURL();
|
||||||
|
@ -15706,7 +15807,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
ProfileActivity fragment = new ProfileActivity(args);
|
||||||
fragment.setPlayProfileAnimation(true);
|
fragment.setPlayProfileAnimation(1);
|
||||||
fragment.setChatInfo(chatInfo);
|
fragment.setChatInfo(chatInfo);
|
||||||
fragment.setUserInfo(userInfo);
|
fragment.setUserInfo(userInfo);
|
||||||
presentFragment(fragment);
|
presentFragment(fragment);
|
||||||
|
@ -16015,7 +16116,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
args.putLong("dialog_id", dialog_id);
|
args.putLong("dialog_id", dialog_id);
|
||||||
}
|
}
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
ProfileActivity fragment = new ProfileActivity(args);
|
||||||
fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == uid);
|
fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == uid ? 1 : 0);
|
||||||
presentFragment(fragment);
|
presentFragment(fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16440,6 +16541,16 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
@Override
|
@Override
|
||||||
public void notifyItemRangeInserted(int positionStart, int itemCount) {
|
public void notifyItemRangeInserted(int positionStart, int itemCount) {
|
||||||
updateRows();
|
updateRows();
|
||||||
|
if (positionStart == 1 && itemCount > 0) {
|
||||||
|
int lastPosition = positionStart + itemCount;
|
||||||
|
if (lastPosition >= messagesStartRow && lastPosition < messagesEndRow) {
|
||||||
|
MessageObject m1 = messages.get(lastPosition - messagesStartRow);
|
||||||
|
MessageObject m2 = messages.get(lastPosition - messagesStartRow - 1);
|
||||||
|
if (currentChat != null && m1.messageOwner.from_id == m2.messageOwner.from_id || currentUser != null && m1.isOutOwner() == m2.isOutOwner()) {
|
||||||
|
notifyItemChanged(positionStart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
super.notifyItemRangeInserted(positionStart, itemCount);
|
super.notifyItemRangeInserted(positionStart, itemCount);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -16644,12 +16755,14 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_avatar_nameInMessagePink),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_avatar_nameInMessagePink),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, BotHelpCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, BotHelpCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, BotHelpCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable.getShadowDrawable(), Theme.chat_msgInMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_inBubbleShadow),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgInDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgInMediaDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgOutDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgOutMediaDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutSelectedDrawable}, null, Theme.key_chat_outBubbleGradientSelectedOverlay),
|
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutSelectedDrawable}, null, Theme.key_chat_outBubbleGradientSelectedOverlay),
|
||||||
new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable.getShadowDrawable(), Theme.chat_msgOutMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_outBubbleShadow),
|
|
||||||
new ThemeDescription(chatListView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceText),
|
new ThemeDescription(chatListView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceText),
|
||||||
new ThemeDescription(chatListView, ThemeDescription.FLAG_LINKCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceLink),
|
new ThemeDescription(chatListView, ThemeDescription.FLAG_LINKCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceLink),
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ import org.telegram.messenger.MessagesController;
|
||||||
import org.telegram.messenger.MessagesStorage;
|
import org.telegram.messenger.MessagesStorage;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.tgnet.TLRPC;
|
import org.telegram.tgnet.TLRPC;
|
||||||
import org.telegram.ui.ActionBar.ActionBar;
|
import org.telegram.ui.ActionBar.ActionBar;
|
||||||
|
@ -229,7 +230,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
|
||||||
|
@ -243,7 +244,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image
|
||||||
|
|
||||||
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize > AndroidUtilities.dp(20)) {
|
if (keyboardSize > AndroidUtilities.dp(20)) {
|
||||||
ignoreLayout = true;
|
ignoreLayout = true;
|
||||||
nameTextView.hideEmojiView();
|
nameTextView.hideEmojiView();
|
||||||
|
@ -276,7 +277,8 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? nameTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? nameTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -330,7 +332,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
|
|
@ -21,7 +21,6 @@ import android.util.TypedValue;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
|
@ -294,6 +294,15 @@ public class ChatRightsEditActivity extends BaseFragment {
|
||||||
listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
|
listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
|
||||||
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
||||||
|
|
||||||
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
listView.setOnItemClickListener((view, position) -> {
|
listView.setOnItemClickListener((view, position) -> {
|
||||||
if (!canEdit) {
|
if (!canEdit) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -960,6 +960,11 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente
|
||||||
emptyView.showTextView();
|
emptyView.showTextView();
|
||||||
}
|
}
|
||||||
updateRows();
|
updateRows();
|
||||||
|
|
||||||
|
if (needOpenSearch) {
|
||||||
|
searchItem.openSearch(false);
|
||||||
|
}
|
||||||
|
|
||||||
return fragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1941,7 +1946,6 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
AndroidUtilities.requestAdjustResize(getParentActivity(), classGuid);
|
AndroidUtilities.requestAdjustResize(getParentActivity(), classGuid);
|
||||||
//AndroidUtilities.removeAdjustResize(getParentActivity(), classGuid);
|
|
||||||
if (listViewAdapter != null) {
|
if (listViewAdapter != null) {
|
||||||
listViewAdapter.notifyDataSetChanged();
|
listViewAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
@ -1965,7 +1969,8 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente
|
||||||
@Override
|
@Override
|
||||||
protected void onTransitionAnimationEnd(boolean isOpen, boolean backward) {
|
protected void onTransitionAnimationEnd(boolean isOpen, boolean backward) {
|
||||||
if (isOpen && !backward && needOpenSearch) {
|
if (isOpen && !backward && needOpenSearch) {
|
||||||
searchItem.openSearch(true);
|
searchItem.getSearchField().requestFocus();
|
||||||
|
AndroidUtilities.showKeyboard(searchItem.getSearchField());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,291 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.content.Context;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
|
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
|
||||||
import org.telegram.messenger.LocaleController;
|
|
||||||
import org.telegram.messenger.MessagesController;
|
|
||||||
import org.telegram.messenger.NotificationCenter;
|
|
||||||
import org.telegram.messenger.R;
|
|
||||||
import org.telegram.tgnet.ConnectionsManager;
|
|
||||||
import org.telegram.tgnet.TLRPC;
|
|
||||||
import org.telegram.ui.ActionBar.ActionBar;
|
|
||||||
import org.telegram.ui.ActionBar.BaseFragment;
|
|
||||||
import org.telegram.ui.ActionBar.Theme;
|
|
||||||
import org.telegram.ui.ActionBar.ThemeDescription;
|
|
||||||
import org.telegram.ui.Cells.LoadingCell;
|
|
||||||
import org.telegram.ui.Cells.ProfileSearchCell;
|
|
||||||
import org.telegram.ui.Cells.TextInfoPrivacyCell;
|
|
||||||
import org.telegram.ui.Components.EmptyTextProgressView;
|
|
||||||
import org.telegram.ui.Components.LayoutHelper;
|
|
||||||
import org.telegram.ui.Components.RecyclerListView;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
public class CommonGroupsActivity extends BaseFragment {
|
|
||||||
|
|
||||||
private ListAdapter listViewAdapter;
|
|
||||||
private EmptyTextProgressView emptyView;
|
|
||||||
private RecyclerListView listView;
|
|
||||||
private LinearLayoutManager layoutManager;
|
|
||||||
|
|
||||||
private ArrayList<TLRPC.Chat> chats = new ArrayList<>();
|
|
||||||
private int userId;
|
|
||||||
private boolean loading;
|
|
||||||
private boolean firstLoaded;
|
|
||||||
private boolean endReached;
|
|
||||||
|
|
||||||
public CommonGroupsActivity(int uid) {
|
|
||||||
super();
|
|
||||||
userId = uid;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onFragmentCreate() {
|
|
||||||
super.onFragmentCreate();
|
|
||||||
getChats(0, 50);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View createView(Context context) {
|
|
||||||
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
|
||||||
actionBar.setAllowOverlayTitle(true);
|
|
||||||
actionBar.setTitle(LocaleController.getString("GroupsInCommonTitle", R.string.GroupsInCommonTitle));
|
|
||||||
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
|
|
||||||
@Override
|
|
||||||
public void onItemClick(int id) {
|
|
||||||
if (id == -1) {
|
|
||||||
finishFragment();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
fragmentView = new FrameLayout(context);
|
|
||||||
fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
|
|
||||||
FrameLayout frameLayout = (FrameLayout) fragmentView;
|
|
||||||
|
|
||||||
emptyView = new EmptyTextProgressView(context);
|
|
||||||
emptyView.setText(LocaleController.getString("NoGroupsInCommon", R.string.NoGroupsInCommon));
|
|
||||||
frameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
|
||||||
|
|
||||||
listView = new RecyclerListView(context);
|
|
||||||
listView.setEmptyView(emptyView);
|
|
||||||
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));
|
|
||||||
|
|
||||||
listView.setOnItemClickListener((view, position) -> {
|
|
||||||
if (position < 0 || position >= chats.size()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
TLRPC.Chat chat = chats.get(position);
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putInt("chat_id", chat.id);
|
|
||||||
if (!MessagesController.getInstance(currentAccount).checkCanOpenChat(args, CommonGroupsActivity.this)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.closeChats);
|
|
||||||
presentFragment(new ChatActivity(args), true);
|
|
||||||
});
|
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
|
||||||
@Override
|
|
||||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
|
||||||
int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
|
|
||||||
int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1;
|
|
||||||
if (visibleItemCount > 0) {
|
|
||||||
int totalItemCount = listViewAdapter.getItemCount();
|
|
||||||
if (!endReached && !loading && !chats.isEmpty() && firstVisibleItem + visibleItemCount >= totalItemCount - 5) {
|
|
||||||
getChats(chats.get(chats.size() - 1).id, 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (loading) {
|
|
||||||
emptyView.showProgress();
|
|
||||||
} else {
|
|
||||||
emptyView.showTextView();
|
|
||||||
}
|
|
||||||
return fragmentView;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void getChats(int max_id, final int count) {
|
|
||||||
if (loading) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
loading = true;
|
|
||||||
if (emptyView != null && !firstLoaded) {
|
|
||||||
emptyView.showProgress();
|
|
||||||
}
|
|
||||||
if (listViewAdapter != null) {
|
|
||||||
listViewAdapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
TLRPC.TL_messages_getCommonChats req = new TLRPC.TL_messages_getCommonChats();
|
|
||||||
req.user_id = MessagesController.getInstance(currentAccount).getInputUser(userId);
|
|
||||||
if (req.user_id instanceof TLRPC.TL_inputUserEmpty) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
req.limit = count;
|
|
||||||
req.max_id = max_id;
|
|
||||||
int reqId = ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
|
||||||
if (error == null) {
|
|
||||||
TLRPC.messages_Chats res = (TLRPC.messages_Chats) response;
|
|
||||||
MessagesController.getInstance(currentAccount).putChats(res.chats, false);
|
|
||||||
endReached = res.chats.isEmpty() || res.chats.size() != count;
|
|
||||||
chats.addAll(res.chats);
|
|
||||||
} else {
|
|
||||||
endReached = true;
|
|
||||||
}
|
|
||||||
loading = false;
|
|
||||||
firstLoaded = true;
|
|
||||||
if (emptyView != null) {
|
|
||||||
emptyView.showTextView();
|
|
||||||
}
|
|
||||||
if (listViewAdapter != null) {
|
|
||||||
listViewAdapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
ConnectionsManager.getInstance(currentAccount).bindRequestToGuid(reqId, classGuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
if (listViewAdapter != null) {
|
|
||||||
listViewAdapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ListAdapter extends RecyclerListView.SelectionAdapter {
|
|
||||||
private Context mContext;
|
|
||||||
|
|
||||||
public ListAdapter(Context context) {
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isEnabled(RecyclerView.ViewHolder holder) {
|
|
||||||
return holder.getAdapterPosition() != chats.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemCount() {
|
|
||||||
int count = chats.size();
|
|
||||||
if (!chats.isEmpty()) {
|
|
||||||
count++;
|
|
||||||
if (!endReached) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
View view;
|
|
||||||
switch (viewType) {
|
|
||||||
case 0:
|
|
||||||
view = new ProfileSearchCell(mContext);
|
|
||||||
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
view = new LoadingCell(mContext);
|
|
||||||
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
default:
|
|
||||||
view = new TextInfoPrivacyCell(mContext);
|
|
||||||
view.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return new RecyclerListView.Holder(view);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
|
||||||
if (holder.getItemViewType() == 0) {
|
|
||||||
ProfileSearchCell cell = (ProfileSearchCell) holder.itemView;
|
|
||||||
TLRPC.Chat chat = chats.get(position);
|
|
||||||
cell.setData(chat, null, null, null, false, false);
|
|
||||||
cell.useSeparator = position != chats.size() - 1 || !endReached;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemViewType(int i) {
|
|
||||||
if (i < chats.size()) {
|
|
||||||
return 0;
|
|
||||||
} else if (!endReached && i == chats.size()) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ThemeDescription[] getThemeDescriptions() {
|
|
||||||
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 ProfileSearchCell) {
|
|
||||||
((ProfileSearchCell) child).update(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return new ThemeDescription[]{
|
|
||||||
new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{LoadingCell.class, ProfileSearchCell.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(emptyView, ThemeDescription.FLAG_TEXTCOLOR, null, null, null, null, Theme.key_emptyListPlaceholder),
|
|
||||||
new ThemeDescription(emptyView, ThemeDescription.FLAG_PROGRESSBAR, null, null, null, null, Theme.key_progressCircle),
|
|
||||||
|
|
||||||
new ThemeDescription(listView, ThemeDescription.FLAG_BACKGROUNDFILTER, new Class[]{TextInfoPrivacyCell.class}, null, null, null, Theme.key_windowBackgroundGrayShadow),
|
|
||||||
new ThemeDescription(listView, 0, new Class[]{TextInfoPrivacyCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayText4),
|
|
||||||
|
|
||||||
new ThemeDescription(listView, 0, new Class[]{LoadingCell.class}, new String[]{"progressBar"}, null, null, null, Theme.key_progressCircle),
|
|
||||||
|
|
||||||
new ThemeDescription(listView, 0, new Class[]{ProfileSearchCell.class}, null, new Paint[]{Theme.dialogs_namePaint[0], Theme.dialogs_namePaint[1], Theme.dialogs_searchNamePaint}, null, null, Theme.key_chats_name),
|
|
||||||
new ThemeDescription(listView, 0, new Class[]{ProfileSearchCell.class}, null, new Paint[]{Theme.dialogs_nameEncryptedPaint[0], Theme.dialogs_nameEncryptedPaint[1], Theme.dialogs_searchNameEncryptedPaint}, null, null, Theme.key_chats_secretName),
|
|
||||||
new ThemeDescription(listView, 0, new Class[]{ProfileSearchCell.class}, null, new Drawable[]{Theme.avatar_savedDrawable}, null, Theme.key_avatar_text),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundRed),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundOrange),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundViolet),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundGreen),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundCyan),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundBlue),
|
|
||||||
new ThemeDescription(null, 0, null, null, null, cellDelegate, Theme.key_avatar_backgroundPink),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1159,6 +1159,68 @@ public class AlertsCreator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface BlockDialogCallback {
|
||||||
|
void run(boolean report, boolean delete);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void createBlockDialogAlert(BaseFragment fragment, int count, boolean reportSpam, TLRPC.User user, BlockDialogCallback onProcessRunnable) {
|
||||||
|
if (fragment == null || fragment.getParentActivity() == null || count == 1 && user == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Context context = fragment.getParentActivity();
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
|
|
||||||
|
CheckBoxCell[] cell = new CheckBoxCell[2];
|
||||||
|
|
||||||
|
LinearLayout linearLayout = new LinearLayout(context);
|
||||||
|
linearLayout.setOrientation(LinearLayout.VERTICAL);
|
||||||
|
builder.setView(linearLayout);
|
||||||
|
|
||||||
|
String actionText;
|
||||||
|
if (count == 1) {
|
||||||
|
String name = ContactsController.formatName(user.first_name, user.last_name);
|
||||||
|
builder.setTitle(LocaleController.formatString("BlockUserTitle", R.string.BlockUserTitle, name));
|
||||||
|
actionText = LocaleController.getString("BlockUser", R.string.BlockUser);
|
||||||
|
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("BlockUserMessage", R.string.BlockUserMessage, name)));
|
||||||
|
} else {
|
||||||
|
builder.setTitle(LocaleController.formatString("BlockUserTitle", R.string.BlockUserTitle, LocaleController.formatPluralString("UsersCountTitle", count)));
|
||||||
|
actionText = LocaleController.getString("BlockUsers", R.string.BlockUsers);
|
||||||
|
builder.setMessage(AndroidUtilities.replaceTags(LocaleController.formatString("BlockUsersMessage", R.string.BlockUsersMessage, LocaleController.formatPluralString("UsersCount", count))));
|
||||||
|
}
|
||||||
|
|
||||||
|
final boolean[] checks = new boolean[]{true, true};
|
||||||
|
|
||||||
|
for (int a = 0; a < cell.length; a++) {
|
||||||
|
if (a == 0 && !reportSpam) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int num = a;
|
||||||
|
cell[a] = new CheckBoxCell(context, 1);
|
||||||
|
cell[a].setBackgroundDrawable(Theme.getSelectorDrawable(false));
|
||||||
|
if (a == 0) {
|
||||||
|
cell[a].setText(LocaleController.getString("ReportSpamTitle", R.string.ReportSpamTitle), "", true, false);
|
||||||
|
} else {
|
||||||
|
cell[a].setText(count == 1 ? LocaleController.getString("DeleteThisChat", R.string.DeleteThisChat) : LocaleController.getString("DeleteTheseChats", R.string.DeleteTheseChats), "", true, false);
|
||||||
|
}
|
||||||
|
cell[a].setPadding(LocaleController.isRTL ? AndroidUtilities.dp(16) : AndroidUtilities.dp(8), 0, LocaleController.isRTL ? AndroidUtilities.dp(8) : AndroidUtilities.dp(16), 0);
|
||||||
|
linearLayout.addView(cell[a], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48));
|
||||||
|
cell[a].setOnClickListener(v -> {
|
||||||
|
CheckBoxCell cell1 = (CheckBoxCell) v;
|
||||||
|
checks[num] = !checks[num];
|
||||||
|
cell1.setChecked(checks[num], true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.setPositiveButton(actionText, (dialogInterface, i) -> onProcessRunnable.run(checks[0], checks[1]));
|
||||||
|
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||||
|
AlertDialog alertDialog = builder.create();
|
||||||
|
fragment.showDialog(alertDialog);
|
||||||
|
TextView button = (TextView) alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
||||||
|
if (button != null) {
|
||||||
|
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public interface DatePickerDelegate {
|
public interface DatePickerDelegate {
|
||||||
void didSelectDate(int year, int month, int dayOfMonth);
|
void didSelectDate(int year, int month, int dayOfMonth);
|
||||||
}
|
}
|
||||||
|
|
|
@ -715,7 +715,7 @@ public class AudioPlayerAlert extends BottomSheet implements NotificationCenter.
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getCurrentFocus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,8 +56,12 @@ public class BackupImageView extends View {
|
||||||
setImage(imageLocation, imageFilter, null, null, thumb, null, null, size, parentObject);
|
setImage(imageLocation, imageFilter, null, null, thumb, null, null, size, parentObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setImage(ImageLocation imageLocation, String imageFilter, Bitmap thumb, int size, Object parentObject) {
|
public void setImage(ImageLocation imageLocation, String imageFilter, Bitmap thumbBitmap, int size, int cacheType, Object parentObject) {
|
||||||
setImage(imageLocation, imageFilter, null, null, null, thumb, null, size, parentObject);
|
Drawable thumb = null;
|
||||||
|
if (thumbBitmap != null) {
|
||||||
|
thumb = new BitmapDrawable(null, thumbBitmap);
|
||||||
|
}
|
||||||
|
imageReceiver.setImage(imageLocation, imageFilter, null, null, thumb, size, null, parentObject, cacheType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setImage(ImageLocation imageLocation, String imageFilter, ImageLocation thumbLocation, String thumbFilter, int size, Object parentObject) {
|
public void setImage(ImageLocation imageLocation, String imageFilter, ImageLocation thumbLocation, String thumbFilter, int size, Object parentObject) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import android.graphics.Paint;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.PorterDuffColorFilter;
|
import android.graphics.PorterDuffColorFilter;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
@ -1015,6 +1016,12 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe
|
||||||
parentFragment.extendActionMode(menu);
|
parentFragment.extendActionMode(menu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requestRectangleOnScreen(Rect rectangle) {
|
||||||
|
rectangle.bottom += AndroidUtilities.dp(1000);
|
||||||
|
return super.requestRectangleOnScreen(rectangle);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
messageEditText.setDelegate(() -> {
|
messageEditText.setDelegate(() -> {
|
||||||
if (delegate != null) {
|
if (delegate != null) {
|
||||||
|
|
|
@ -132,6 +132,8 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
|
|
||||||
private View shadow;
|
private View shadow;
|
||||||
|
|
||||||
|
private int currentPanTranslationY;
|
||||||
|
|
||||||
private FrameLayout frameLayout2;
|
private FrameLayout frameLayout2;
|
||||||
private EditTextEmoji commentTextView;
|
private EditTextEmoji commentTextView;
|
||||||
private FrameLayout writeButtonContainer;
|
private FrameLayout writeButtonContainer;
|
||||||
|
@ -610,7 +612,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
|
|
||||||
cameraDrawable = context.getResources().getDrawable(R.drawable.instant_camera).mutate();
|
cameraDrawable = context.getResources().getDrawable(R.drawable.instant_camera).mutate();
|
||||||
|
|
||||||
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, false) {
|
||||||
|
|
||||||
private int lastNotifyWidth;
|
private int lastNotifyWidth;
|
||||||
private RectF rect = new RectF();
|
private RectF rect = new RectF();
|
||||||
|
@ -649,7 +651,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
ignoreLayout = false;
|
ignoreLayout = false;
|
||||||
}
|
}
|
||||||
int availableHeight = totalHeight - getPaddingTop();
|
int availableHeight = totalHeight - getPaddingTop();
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = useSmoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (!AndroidUtilities.isInMultiwindow && keyboardSize <= AndroidUtilities.dp(20)) {
|
if (!AndroidUtilities.isInMultiwindow && keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
availableHeight -= commentTextView.getEmojiPadding();
|
availableHeight -= commentTextView.getEmojiPadding();
|
||||||
}
|
}
|
||||||
|
@ -710,7 +712,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
widthSize -= backgroundPaddingLeft * 2;
|
widthSize -= backgroundPaddingLeft * 2;
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = useSmoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow) {
|
if (!AndroidUtilities.isInMultiwindow) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
|
@ -757,7 +759,8 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
}
|
}
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = useSmoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -811,7 +814,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
@ -917,6 +920,17 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
super.setTranslationY(translationY);
|
super.setTranslationY(translationY);
|
||||||
checkCameraViewPosition();
|
checkCameraViewPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
currentPanTranslationY = y;
|
||||||
|
if (commentTextView.isPopupShowing()) {
|
||||||
|
containerView.setTranslationY(y);
|
||||||
|
actionBar.setTranslationY(0);
|
||||||
|
} else {
|
||||||
|
actionBar.setTranslationY(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
containerView = sizeNotifierFrameLayout;
|
containerView = sizeNotifierFrameLayout;
|
||||||
containerView.setWillNotDraw(false);
|
containerView.setWillNotDraw(false);
|
||||||
|
@ -2996,7 +3010,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N
|
||||||
cameraViewOffsetY = 0;
|
cameraViewOffsetY = 0;
|
||||||
}
|
}
|
||||||
int containerHeight = containerView.getMeasuredHeight();
|
int containerHeight = containerView.getMeasuredHeight();
|
||||||
int keyboardSize = sizeNotifierFrameLayout.getKeyboardHeight();
|
int keyboardSize = useSmoothKeyboard ? 0 : sizeNotifierFrameLayout.getKeyboardHeight();
|
||||||
if (!AndroidUtilities.isInMultiwindow && keyboardSize <= AndroidUtilities.dp(20)) {
|
if (!AndroidUtilities.isInMultiwindow && keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
containerHeight -= commentTextView.getEmojiPadding();
|
containerHeight -= commentTextView.getEmojiPadding();
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.telegram.messenger.ChatObject;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
import org.telegram.messenger.ImageLocation;
|
import org.telegram.messenger.ImageLocation;
|
||||||
import org.telegram.messenger.LocaleController;
|
import org.telegram.messenger.LocaleController;
|
||||||
|
import org.telegram.messenger.MediaDataController;
|
||||||
import org.telegram.messenger.MessagesController;
|
import org.telegram.messenger.MessagesController;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
@ -56,13 +57,22 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent
|
||||||
private CharSequence lastSubtitle;
|
private CharSequence lastSubtitle;
|
||||||
private String lastSubtitleColorKey;
|
private String lastSubtitleColorKey;
|
||||||
|
|
||||||
|
private SharedMediaLayout.SharedMediaPreloader sharedMediaPreloader;
|
||||||
|
|
||||||
public ChatAvatarContainer(Context context, ChatActivity chatActivity, boolean needTime) {
|
public ChatAvatarContainer(Context context, ChatActivity chatActivity, boolean needTime) {
|
||||||
super(context);
|
super(context);
|
||||||
parentFragment = chatActivity;
|
parentFragment = chatActivity;
|
||||||
|
|
||||||
|
if (parentFragment != null) {
|
||||||
|
sharedMediaPreloader = new SharedMediaLayout.SharedMediaPreloader(chatActivity);
|
||||||
|
}
|
||||||
|
|
||||||
avatarImageView = new BackupImageView(context);
|
avatarImageView = new BackupImageView(context);
|
||||||
avatarImageView.setRoundRadius(AndroidUtilities.dp(21));
|
avatarImageView.setRoundRadius(AndroidUtilities.dp(21));
|
||||||
addView(avatarImageView);
|
addView(avatarImageView);
|
||||||
|
if (parentFragment != null && !parentFragment.isInScheduleMode()) {
|
||||||
|
avatarImageView.setOnClickListener(v -> openProfile(true));
|
||||||
|
}
|
||||||
|
|
||||||
titleTextView = new SimpleTextView(context);
|
titleTextView = new SimpleTextView(context);
|
||||||
titleTextView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultTitle));
|
titleTextView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultTitle));
|
||||||
|
@ -90,36 +100,7 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parentFragment != null && !parentFragment.isInScheduleMode()) {
|
if (parentFragment != null && !parentFragment.isInScheduleMode()) {
|
||||||
setOnClickListener(v -> {
|
setOnClickListener(v -> openProfile(false));
|
||||||
TLRPC.User user = parentFragment.getCurrentUser();
|
|
||||||
TLRPC.Chat chat = parentFragment.getCurrentChat();
|
|
||||||
if (user != null) {
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
if (UserObject.isUserSelf(user)) {
|
|
||||||
args.putLong("dialog_id", parentFragment.getDialogId());
|
|
||||||
MediaActivity fragment = new MediaActivity(args, new int[]{-1, -1, -1, -1, -1});
|
|
||||||
fragment.setChatInfo(parentFragment.getCurrentChatInfo());
|
|
||||||
parentFragment.presentFragment(fragment);
|
|
||||||
} else {
|
|
||||||
args.putInt("user_id", user.id);
|
|
||||||
args.putBoolean("reportSpam", parentFragment.hasReportSpam());
|
|
||||||
if (timeItem != null) {
|
|
||||||
args.putLong("dialog_id", parentFragment.getDialogId());
|
|
||||||
}
|
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
|
||||||
fragment.setUserInfo(parentFragment.getCurrentUserInfo());
|
|
||||||
fragment.setPlayProfileAnimation(true);
|
|
||||||
parentFragment.presentFragment(fragment);
|
|
||||||
}
|
|
||||||
} else if (chat != null) {
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putInt("chat_id", chat.id);
|
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
|
||||||
fragment.setChatInfo(parentFragment.getCurrentChatInfo());
|
|
||||||
fragment.setPlayProfileAnimation(true);
|
|
||||||
parentFragment.presentFragment(fragment);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
TLRPC.Chat chat = parentFragment.getCurrentChat();
|
TLRPC.Chat chat = parentFragment.getCurrentChat();
|
||||||
statusDrawables[0] = new TypingDotsDrawable();
|
statusDrawables[0] = new TypingDotsDrawable();
|
||||||
|
@ -133,6 +114,42 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void openProfile(boolean byAvatar) {
|
||||||
|
if (byAvatar && (AndroidUtilities.isTablet() || AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y || !avatarImageView.getImageReceiver().hasNotThumb())) {
|
||||||
|
byAvatar = false;
|
||||||
|
}
|
||||||
|
TLRPC.User user = parentFragment.getCurrentUser();
|
||||||
|
TLRPC.Chat chat = parentFragment.getCurrentChat();
|
||||||
|
if (user != null) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
if (UserObject.isUserSelf(user)) {
|
||||||
|
args.putLong("dialog_id", parentFragment.getDialogId());
|
||||||
|
int[] media = new int[MediaDataController.MEDIA_TYPES_COUNT];
|
||||||
|
System.arraycopy(sharedMediaPreloader.getLastMediaCount(), 0, media, 0, media.length);
|
||||||
|
MediaActivity fragment = new MediaActivity(args, media, sharedMediaPreloader.getSharedMediaData(), -1);
|
||||||
|
fragment.setChatInfo(parentFragment.getCurrentChatInfo());
|
||||||
|
parentFragment.presentFragment(fragment);
|
||||||
|
} else {
|
||||||
|
args.putInt("user_id", user.id);
|
||||||
|
args.putBoolean("reportSpam", parentFragment.hasReportSpam());
|
||||||
|
if (timeItem != null) {
|
||||||
|
args.putLong("dialog_id", parentFragment.getDialogId());
|
||||||
|
}
|
||||||
|
ProfileActivity fragment = new ProfileActivity(args, sharedMediaPreloader);
|
||||||
|
fragment.setUserInfo(parentFragment.getCurrentUserInfo());
|
||||||
|
fragment.setPlayProfileAnimation(byAvatar ? 2 : 1);
|
||||||
|
parentFragment.presentFragment(fragment);
|
||||||
|
}
|
||||||
|
} else if (chat != null) {
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putInt("chat_id", chat.id);
|
||||||
|
ProfileActivity fragment = new ProfileActivity(args, sharedMediaPreloader);
|
||||||
|
fragment.setChatInfo(parentFragment.getCurrentChatInfo());
|
||||||
|
fragment.setPlayProfileAnimation(byAvatar ? 2 : 1);
|
||||||
|
parentFragment.presentFragment(fragment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setOccupyStatusBar(boolean value) {
|
public void setOccupyStatusBar(boolean value) {
|
||||||
occupyStatusBar = value;
|
occupyStatusBar = value;
|
||||||
}
|
}
|
||||||
|
@ -237,6 +254,12 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent
|
||||||
return subtitleTextView;
|
return subtitleTextView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onDestroy() {
|
||||||
|
if (sharedMediaPreloader != null) {
|
||||||
|
sharedMediaPreloader.onDestroy(parentFragment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setTypingAnimation(boolean start) {
|
private void setTypingAnimation(boolean start) {
|
||||||
if (start) {
|
if (start) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -51,6 +51,8 @@ public class ClippingImageView extends View {
|
||||||
private float animationProgress;
|
private float animationProgress;
|
||||||
private float[][] animationValues;
|
private float[][] animationValues;
|
||||||
|
|
||||||
|
private float additionalTranslationY;
|
||||||
|
|
||||||
public ClippingImageView(Context context) {
|
public ClippingImageView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
paint = new Paint(Paint.FILTER_BITMAP_FLAG);
|
paint = new Paint(Paint.FILTER_BITMAP_FLAG);
|
||||||
|
@ -68,6 +70,20 @@ public class ClippingImageView extends View {
|
||||||
animationValues = values;
|
animationValues = values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAdditionalTranslationY(float value) {
|
||||||
|
additionalTranslationY = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTranslationY(float translationY) {
|
||||||
|
super.setTranslationY(translationY + additionalTranslationY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getTranslationY() {
|
||||||
|
return super.getTranslationY() - additionalTranslationY;
|
||||||
|
}
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
public float getAnimationProgress() {
|
public float getAnimationProgress() {
|
||||||
return animationProgress;
|
return animationProgress;
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.telegram.ui.Components;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.PorterDuffColorFilter;
|
import android.graphics.PorterDuffColorFilter;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.InputFilter;
|
import android.text.InputFilter;
|
||||||
|
@ -100,6 +101,12 @@ public class EditTextEmoji extends FrameLayout implements NotificationCenter.Not
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requestRectangleOnScreen(Rect rectangle) {
|
||||||
|
rectangle.bottom += AndroidUtilities.dp(1000);
|
||||||
|
return super.requestRectangleOnScreen(rectangle);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
|
editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
|
||||||
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
|
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
|
||||||
|
|
|
@ -3,28 +3,38 @@ package org.telegram.ui.Components;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.PorterDuffColorFilter;
|
||||||
import android.graphics.RectF;
|
import android.graphics.RectF;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
|
import org.telegram.messenger.ApplicationLoader;
|
||||||
|
import org.telegram.messenger.BuildVars;
|
||||||
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.SharedConfig;
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
import org.telegram.messenger.Utilities;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
public class FireworksOverlay extends View {
|
public class FireworksOverlay extends View {
|
||||||
|
|
||||||
private static Paint[] paint;
|
private static Paint[] paint;
|
||||||
|
private static Paint[] heartPaint;
|
||||||
private RectF rect = new RectF();
|
private RectF rect = new RectF();
|
||||||
private long lastUpdateTime;
|
private long lastUpdateTime;
|
||||||
private boolean started;
|
private boolean started;
|
||||||
private boolean startedFall;
|
private boolean startedFall;
|
||||||
private float speedCoef = 1.0f;
|
private float speedCoef = 1.0f;
|
||||||
private int fallingDownCount;
|
private int fallingDownCount;
|
||||||
|
private static Drawable[] heartDrawable;
|
||||||
private static final int particlesCount = SharedConfig.getDevicePerfomanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW ? 50 : 60;
|
private static final int particlesCount = SharedConfig.getDevicePerfomanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW ? 50 : 60;
|
||||||
private static final int fallParticlesCount = SharedConfig.getDevicePerfomanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW ? 20 : 30;
|
private static final int fallParticlesCount = SharedConfig.getDevicePerfomanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW ? 20 : 30;
|
||||||
|
private boolean isFebruary14;
|
||||||
|
|
||||||
private static int[] colors = new int[] {
|
private static int[] colors = new int[] {
|
||||||
0xff2CBCE8,
|
0xff2CBCE8,
|
||||||
|
@ -35,6 +45,14 @@ public class FireworksOverlay extends View {
|
||||||
0xff59B86C
|
0xff59B86C
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static int[] heartColors = new int[] {
|
||||||
|
0xffE2557B,
|
||||||
|
0xff5FCDF2,
|
||||||
|
0xffFFDA69,
|
||||||
|
0xffDB6363,
|
||||||
|
0xffE376B0
|
||||||
|
};
|
||||||
|
|
||||||
static {
|
static {
|
||||||
paint = new Paint[colors.length];
|
paint = new Paint[colors.length];
|
||||||
for (int a = 0; a < paint.length; a++) {
|
for (int a = 0; a < paint.length; a++) {
|
||||||
|
@ -60,12 +78,22 @@ public class FireworksOverlay extends View {
|
||||||
private void draw(Canvas canvas) {
|
private void draw(Canvas canvas) {
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
canvas.drawCircle(x, y, AndroidUtilities.dp(typeSize), paint[colorType]);
|
canvas.drawCircle(x, y, AndroidUtilities.dp(typeSize), paint[colorType]);
|
||||||
} else {
|
} else if (type == 1) {
|
||||||
rect.set(x - AndroidUtilities.dp(typeSize), y - AndroidUtilities.dp(2), x + AndroidUtilities.dp(typeSize), y + AndroidUtilities.dp(2));
|
rect.set(x - AndroidUtilities.dp(typeSize), y - AndroidUtilities.dp(2), x + AndroidUtilities.dp(typeSize), y + AndroidUtilities.dp(2));
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.rotate(rotation, rect.centerX(), rect.centerY());
|
canvas.rotate(rotation, rect.centerX(), rect.centerY());
|
||||||
canvas.drawRoundRect(rect, AndroidUtilities.dp(2), AndroidUtilities.dp(2), paint[colorType]);
|
canvas.drawRoundRect(rect, AndroidUtilities.dp(2), AndroidUtilities.dp(2), paint[colorType]);
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
|
} else if (type == 2) {
|
||||||
|
Drawable drawable = heartDrawable[colorType];
|
||||||
|
int w = drawable.getIntrinsicWidth() / 2;
|
||||||
|
int h = drawable.getIntrinsicHeight() / 2;
|
||||||
|
drawable.setBounds((int) x - w, (int) y - h, (int) x + w, (int) y + h);
|
||||||
|
canvas.save();
|
||||||
|
canvas.rotate(rotation, x, y);
|
||||||
|
canvas.scale(typeSize / 6.0f, typeSize / 6.0f, x, y);
|
||||||
|
drawable.draw(canvas);
|
||||||
|
canvas.restore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +143,7 @@ public class FireworksOverlay extends View {
|
||||||
if (wasNegative && moveY > yEdge) {
|
if (wasNegative && moveY > yEdge) {
|
||||||
fallingDownCount++;
|
fallingDownCount++;
|
||||||
}
|
}
|
||||||
if (type == 1) {
|
if (type == 1 || type == 2) {
|
||||||
rotation += moveCoef * 10;
|
rotation += moveCoef * 10;
|
||||||
if (rotation > 360) {
|
if (rotation > 360) {
|
||||||
rotation -= 360;
|
rotation -= 360;
|
||||||
|
@ -131,13 +159,29 @@ public class FireworksOverlay extends View {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadHeartDrawables() {
|
||||||
|
if (heartDrawable != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
heartDrawable = new Drawable[heartColors.length];
|
||||||
|
for (int a = 0; a < heartDrawable.length; a++) {
|
||||||
|
heartDrawable[a] = ApplicationLoader.applicationContext.getResources().getDrawable(R.drawable.heart_confetti).mutate();
|
||||||
|
heartDrawable[a].setColorFilter(new PorterDuffColorFilter(heartColors[a], PorterDuff.Mode.MULTIPLY));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Particle createParticle(boolean fall) {
|
private Particle createParticle(boolean fall) {
|
||||||
Particle particle = new Particle();
|
Particle particle = new Particle();
|
||||||
particle.colorType = (byte) Utilities.random.nextInt(paint.length);
|
|
||||||
particle.type = (byte) Utilities.random.nextInt(2);
|
particle.type = (byte) Utilities.random.nextInt(2);
|
||||||
|
if (isFebruary14 && particle.type == 0) {
|
||||||
|
particle.type = 2;
|
||||||
|
particle.colorType = (byte) Utilities.random.nextInt(heartColors.length);
|
||||||
|
} else {
|
||||||
|
particle.colorType = (byte) Utilities.random.nextInt(colors.length);
|
||||||
|
}
|
||||||
particle.side = (byte) Utilities.random.nextInt(2);
|
particle.side = (byte) Utilities.random.nextInt(2);
|
||||||
particle.finishedStart = (byte) (1 + Utilities.random.nextInt(2));
|
particle.finishedStart = (byte) (1 + Utilities.random.nextInt(2));
|
||||||
if (particle.type == 0) {
|
if (particle.type == 0 || particle.type == 2) {
|
||||||
particle.typeSize = (byte) (4 + Utilities.random.nextFloat() * 2);
|
particle.typeSize = (byte) (4 + Utilities.random.nextFloat() * 2);
|
||||||
} else {
|
} else {
|
||||||
particle.typeSize = (byte) (4 + Utilities.random.nextFloat() * 4);
|
particle.typeSize = (byte) (4 + Utilities.random.nextFloat() * 4);
|
||||||
|
@ -170,6 +214,14 @@ public class FireworksOverlay extends View {
|
||||||
startedFall = false;
|
startedFall = false;
|
||||||
fallingDownCount = 0;
|
fallingDownCount = 0;
|
||||||
speedCoef = 1.0f;
|
speedCoef = 1.0f;
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
|
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
|
int month = calendar.get(Calendar.MONTH);
|
||||||
|
isFebruary14 = month == 1 && (BuildVars.DEBUG_PRIVATE_VERSION || day == 14);
|
||||||
|
if (isFebruary14) {
|
||||||
|
loadHeartDrawables();
|
||||||
|
}
|
||||||
for (int a = 0; a < particlesCount; a++) {
|
for (int a = 0; a < particlesCount; a++) {
|
||||||
particles.add(createParticle(false));
|
particles.add(createParticle(false));
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,550 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2008 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.telegram.ui.Components;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.VelocityTracker;
|
||||||
|
import android.view.ViewConfiguration;
|
||||||
|
|
||||||
|
public class GestureDetector2 {
|
||||||
|
|
||||||
|
public interface OnGestureListener {
|
||||||
|
boolean onDown(MotionEvent e);
|
||||||
|
void onUp(MotionEvent e);
|
||||||
|
void onShowPress(MotionEvent e);
|
||||||
|
boolean onSingleTapUp(MotionEvent e);
|
||||||
|
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
|
||||||
|
void onLongPress(MotionEvent e);
|
||||||
|
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The listener that is used to notify when a double-tap or a confirmed
|
||||||
|
* single-tap occur.
|
||||||
|
*/
|
||||||
|
public interface OnDoubleTapListener {
|
||||||
|
/**
|
||||||
|
* Notified when a single-tap occurs.
|
||||||
|
* <p>
|
||||||
|
* Unlike {@link OnGestureListener#onSingleTapUp(MotionEvent)}, this
|
||||||
|
* will only be called after the detector is confident that the user's
|
||||||
|
* first tap is not followed by a second tap leading to a double-tap
|
||||||
|
* gesture.
|
||||||
|
*
|
||||||
|
* @param e The down motion event of the single-tap.
|
||||||
|
* @return true if the event is consumed, else false
|
||||||
|
*/
|
||||||
|
boolean onSingleTapConfirmed(MotionEvent e);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notified when a double-tap occurs.
|
||||||
|
*
|
||||||
|
* @param e The down motion event of the first tap of the double-tap.
|
||||||
|
* @return true if the event is consumed, else false
|
||||||
|
*/
|
||||||
|
boolean onDoubleTap(MotionEvent e);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notified when an event within a double-tap gesture occurs, including
|
||||||
|
* the down, move, and up events.
|
||||||
|
*
|
||||||
|
* @param e The motion event that occurred during the double-tap gesture.
|
||||||
|
* @return true if the event is consumed, else false
|
||||||
|
*/
|
||||||
|
boolean onDoubleTapEvent(MotionEvent e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface OnContextClickListener {
|
||||||
|
/**
|
||||||
|
* Notified when a context click occurs.
|
||||||
|
*
|
||||||
|
* @param e The motion event that occurred during the context click.
|
||||||
|
* @return true if the event is consumed, else false
|
||||||
|
*/
|
||||||
|
boolean onContextClick(MotionEvent e);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience class to extend when you only want to listen for a subset
|
||||||
|
* of all the gestures. This implements all methods in the
|
||||||
|
* {@link OnGestureListener}, {@link OnDoubleTapListener}, and {@link OnContextClickListener}
|
||||||
|
* but does nothing and return {@code false} for all applicable methods.
|
||||||
|
*/
|
||||||
|
public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener,
|
||||||
|
OnContextClickListener {
|
||||||
|
|
||||||
|
public boolean onSingleTapUp(MotionEvent e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onLongPress(MotionEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onScroll(MotionEvent e1, MotionEvent e2,
|
||||||
|
float distanceX, float distanceY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
|
||||||
|
float velocityY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onShowPress(MotionEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onDown(MotionEvent e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onUp(MotionEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onDoubleTap(MotionEvent e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onDoubleTapEvent(MotionEvent e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onSingleTapConfirmed(MotionEvent e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onContextClick(MotionEvent e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int mTouchSlopSquare;
|
||||||
|
private int mDoubleTapTouchSlopSquare;
|
||||||
|
private int mDoubleTapSlopSquare;
|
||||||
|
|
||||||
|
private int mMinimumFlingVelocity;
|
||||||
|
private int mMaximumFlingVelocity;
|
||||||
|
|
||||||
|
private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
|
||||||
|
private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout();
|
||||||
|
private static final int DOUBLE_TAP_TIMEOUT = 150;
|
||||||
|
private static final int DOUBLE_TAP_MIN_TIME = 40;
|
||||||
|
|
||||||
|
private static final int SHOW_PRESS = 1;
|
||||||
|
private static final int LONG_PRESS = 2;
|
||||||
|
private static final int TAP = 3;
|
||||||
|
|
||||||
|
private final Handler mHandler;
|
||||||
|
private final OnGestureListener mListener;
|
||||||
|
private OnDoubleTapListener mDoubleTapListener;
|
||||||
|
|
||||||
|
private boolean mStillDown;
|
||||||
|
private boolean mDeferConfirmSingleTap;
|
||||||
|
private boolean mInLongPress;
|
||||||
|
private boolean mInContextClick;
|
||||||
|
private boolean mAlwaysInTapRegion;
|
||||||
|
private boolean mAlwaysInBiggerTapRegion;
|
||||||
|
private boolean mIgnoreNextUpEvent;
|
||||||
|
|
||||||
|
private MotionEvent mCurrentDownEvent;
|
||||||
|
private MotionEvent mCurrentMotionEvent;
|
||||||
|
private MotionEvent mPreviousUpEvent;
|
||||||
|
|
||||||
|
private boolean mIsDoubleTapping;
|
||||||
|
|
||||||
|
private float mLastFocusX;
|
||||||
|
private float mLastFocusY;
|
||||||
|
private float mDownFocusX;
|
||||||
|
private float mDownFocusY;
|
||||||
|
|
||||||
|
private boolean mIsLongpressEnabled;
|
||||||
|
|
||||||
|
private VelocityTracker mVelocityTracker;
|
||||||
|
|
||||||
|
private class GestureHandler extends Handler {
|
||||||
|
GestureHandler() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
GestureHandler(Handler handler) {
|
||||||
|
super(handler.getLooper());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleMessage(Message msg) {
|
||||||
|
switch (msg.what) {
|
||||||
|
case SHOW_PRESS:
|
||||||
|
mListener.onShowPress(mCurrentDownEvent);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LONG_PRESS:
|
||||||
|
dispatchLongPress();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TAP:
|
||||||
|
if (mDoubleTapListener != null) {
|
||||||
|
if (!mStillDown) {
|
||||||
|
mDoubleTapListener.onSingleTapConfirmed(mCurrentDownEvent);
|
||||||
|
} else {
|
||||||
|
mDeferConfirmSingleTap = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unknown message " + msg); //never
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public GestureDetector2(OnGestureListener listener, Handler handler) {
|
||||||
|
this(null, listener, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public GestureDetector2(OnGestureListener listener) {
|
||||||
|
this(null, listener, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GestureDetector2(Context context, OnGestureListener listener) {
|
||||||
|
this(context, listener, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GestureDetector2(Context context, OnGestureListener listener, Handler handler) {
|
||||||
|
if (handler != null) {
|
||||||
|
mHandler = new GestureHandler(handler);
|
||||||
|
} else {
|
||||||
|
mHandler = new GestureHandler();
|
||||||
|
}
|
||||||
|
mListener = listener;
|
||||||
|
if (listener instanceof OnDoubleTapListener) {
|
||||||
|
setOnDoubleTapListener((OnDoubleTapListener) listener);
|
||||||
|
}
|
||||||
|
init(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GestureDetector2(Context context, OnGestureListener listener, Handler handler, boolean unused) {
|
||||||
|
this(context, listener, handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(Context context) {
|
||||||
|
if (mListener == null) {
|
||||||
|
throw new NullPointerException("OnGestureListener must not be null");
|
||||||
|
}
|
||||||
|
mIsLongpressEnabled = true;
|
||||||
|
|
||||||
|
int touchSlop, doubleTapSlop, doubleTapTouchSlop;
|
||||||
|
if (context == null) {
|
||||||
|
touchSlop = ViewConfiguration.getTouchSlop();
|
||||||
|
doubleTapTouchSlop = touchSlop;
|
||||||
|
doubleTapSlop = 100;
|
||||||
|
mMinimumFlingVelocity = ViewConfiguration.getMinimumFlingVelocity();
|
||||||
|
mMaximumFlingVelocity = ViewConfiguration.getMaximumFlingVelocity();
|
||||||
|
} else {
|
||||||
|
final ViewConfiguration configuration = ViewConfiguration.get(context);
|
||||||
|
touchSlop = configuration.getScaledTouchSlop();
|
||||||
|
doubleTapTouchSlop = configuration.getScaledTouchSlop();
|
||||||
|
doubleTapSlop = configuration.getScaledDoubleTapSlop();
|
||||||
|
mMinimumFlingVelocity = configuration.getScaledMinimumFlingVelocity();
|
||||||
|
mMaximumFlingVelocity = configuration.getScaledMaximumFlingVelocity();
|
||||||
|
}
|
||||||
|
mTouchSlopSquare = touchSlop * touchSlop;
|
||||||
|
mDoubleTapTouchSlopSquare = doubleTapTouchSlop * doubleTapTouchSlop;
|
||||||
|
mDoubleTapSlopSquare = doubleTapSlop * doubleTapSlop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnDoubleTapListener(OnDoubleTapListener onDoubleTapListener) {
|
||||||
|
mDoubleTapListener = onDoubleTapListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsLongpressEnabled(boolean isLongpressEnabled) {
|
||||||
|
mIsLongpressEnabled = isLongpressEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLongpressEnabled() {
|
||||||
|
return mIsLongpressEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean onTouchEvent(MotionEvent ev) {
|
||||||
|
final int action = ev.getAction();
|
||||||
|
|
||||||
|
if (mCurrentMotionEvent != null) {
|
||||||
|
mCurrentMotionEvent.recycle();
|
||||||
|
}
|
||||||
|
mCurrentMotionEvent = MotionEvent.obtain(ev);
|
||||||
|
|
||||||
|
if (mVelocityTracker == null) {
|
||||||
|
mVelocityTracker = VelocityTracker.obtain();
|
||||||
|
}
|
||||||
|
mVelocityTracker.addMovement(ev);
|
||||||
|
|
||||||
|
final boolean pointerUp = (action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP;
|
||||||
|
final int skipIndex = pointerUp ? ev.getActionIndex() : -1;
|
||||||
|
|
||||||
|
// Determine focal point
|
||||||
|
float sumX = 0, sumY = 0;
|
||||||
|
final int count = ev.getPointerCount();
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
if (skipIndex == i) continue;
|
||||||
|
sumX += ev.getX(i);
|
||||||
|
sumY += ev.getY(i);
|
||||||
|
}
|
||||||
|
final int div = pointerUp ? count - 1 : count;
|
||||||
|
final float focusX = sumX / div;
|
||||||
|
final float focusY = sumY / div;
|
||||||
|
|
||||||
|
boolean handled = false;
|
||||||
|
|
||||||
|
switch (action & MotionEvent.ACTION_MASK) {
|
||||||
|
case MotionEvent.ACTION_POINTER_DOWN:
|
||||||
|
mDownFocusX = mLastFocusX = focusX;
|
||||||
|
mDownFocusY = mLastFocusY = focusY;
|
||||||
|
// Cancel long press and taps
|
||||||
|
cancelTaps();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MotionEvent.ACTION_POINTER_UP:
|
||||||
|
mDownFocusX = mLastFocusX = focusX;
|
||||||
|
mDownFocusY = mLastFocusY = focusY;
|
||||||
|
|
||||||
|
// Check the dot product of current velocities.
|
||||||
|
// If the pointer that left was opposing another velocity vector, clear.
|
||||||
|
mVelocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);
|
||||||
|
final int upIndex = ev.getActionIndex();
|
||||||
|
final int id1 = ev.getPointerId(upIndex);
|
||||||
|
final float x1 = mVelocityTracker.getXVelocity(id1);
|
||||||
|
final float y1 = mVelocityTracker.getYVelocity(id1);
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
if (i == upIndex) continue;
|
||||||
|
|
||||||
|
final int id2 = ev.getPointerId(i);
|
||||||
|
final float x = x1 * mVelocityTracker.getXVelocity(id2);
|
||||||
|
final float y = y1 * mVelocityTracker.getYVelocity(id2);
|
||||||
|
|
||||||
|
final float dot = x + y;
|
||||||
|
if (dot < 0) {
|
||||||
|
mVelocityTracker.clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
if (mDoubleTapListener != null) {
|
||||||
|
boolean hadTapMessage = mHandler.hasMessages(TAP);
|
||||||
|
if (hadTapMessage) mHandler.removeMessages(TAP);
|
||||||
|
if ((mCurrentDownEvent != null) && (mPreviousUpEvent != null)
|
||||||
|
&& hadTapMessage
|
||||||
|
&& isConsideredDoubleTap(mCurrentDownEvent, mPreviousUpEvent, ev)) {
|
||||||
|
// This is a second tap
|
||||||
|
mIsDoubleTapping = true;
|
||||||
|
// Give a callback with the first tap of the double-tap
|
||||||
|
handled |= mDoubleTapListener.onDoubleTap(mCurrentDownEvent);
|
||||||
|
// Give a callback with down event of the double-tap
|
||||||
|
handled |= mDoubleTapListener.onDoubleTapEvent(ev);
|
||||||
|
} else {
|
||||||
|
// This is a first tap
|
||||||
|
mHandler.sendEmptyMessageDelayed(TAP, DOUBLE_TAP_TIMEOUT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mDownFocusX = mLastFocusX = focusX;
|
||||||
|
mDownFocusY = mLastFocusY = focusY;
|
||||||
|
if (mCurrentDownEvent != null) {
|
||||||
|
mCurrentDownEvent.recycle();
|
||||||
|
}
|
||||||
|
mCurrentDownEvent = MotionEvent.obtain(ev);
|
||||||
|
mAlwaysInTapRegion = true;
|
||||||
|
mAlwaysInBiggerTapRegion = true;
|
||||||
|
mStillDown = true;
|
||||||
|
mInLongPress = false;
|
||||||
|
mDeferConfirmSingleTap = false;
|
||||||
|
|
||||||
|
if (mIsLongpressEnabled) {
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
mHandler.sendMessageAtTime(
|
||||||
|
mHandler.obtainMessage(LONG_PRESS, 0, 0), mCurrentDownEvent.getDownTime()
|
||||||
|
+ ViewConfiguration.getLongPressTimeout());
|
||||||
|
}
|
||||||
|
mHandler.sendEmptyMessageAtTime(SHOW_PRESS,
|
||||||
|
mCurrentDownEvent.getDownTime() + TAP_TIMEOUT);
|
||||||
|
handled |= mListener.onDown(ev);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MotionEvent.ACTION_MOVE:
|
||||||
|
if (mInLongPress || mInContextClick) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int motionClassification = Build.VERSION.SDK_INT >= 29 ? ev.getClassification() : 0;
|
||||||
|
final boolean hasPendingLongPress = mHandler.hasMessages(LONG_PRESS);
|
||||||
|
|
||||||
|
final float scrollX = mLastFocusX - focusX;
|
||||||
|
final float scrollY = mLastFocusY - focusY;
|
||||||
|
if (mIsDoubleTapping) {
|
||||||
|
handled |= mDoubleTapListener.onDoubleTapEvent(ev);
|
||||||
|
} else if (mAlwaysInTapRegion) {
|
||||||
|
final int deltaX = (int) (focusX - mDownFocusX);
|
||||||
|
final int deltaY = (int) (focusY - mDownFocusY);
|
||||||
|
int distance = (deltaX * deltaX) + (deltaY * deltaY);
|
||||||
|
int slopSquare = mTouchSlopSquare;
|
||||||
|
|
||||||
|
final boolean ambiguousGesture = Build.VERSION.SDK_INT >= 29 && motionClassification == MotionEvent.CLASSIFICATION_AMBIGUOUS_GESTURE;
|
||||||
|
final boolean shouldInhibitDefaultAction = hasPendingLongPress && ambiguousGesture;
|
||||||
|
if (shouldInhibitDefaultAction) {
|
||||||
|
final float multiplier = 2f;
|
||||||
|
if (distance > slopSquare) {
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
final long longPressTimeout = ViewConfiguration.getLongPressTimeout();
|
||||||
|
mHandler.sendMessageAtTime(mHandler.obtainMessage(LONG_PRESS, 0, 0), ev.getDownTime() + (long) (longPressTimeout * multiplier));
|
||||||
|
}
|
||||||
|
slopSquare *= multiplier * multiplier;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (distance > slopSquare) {
|
||||||
|
handled = mListener.onScroll(mCurrentDownEvent, ev, scrollX, scrollY);
|
||||||
|
mLastFocusX = focusX;
|
||||||
|
mLastFocusY = focusY;
|
||||||
|
mAlwaysInTapRegion = false;
|
||||||
|
mHandler.removeMessages(TAP);
|
||||||
|
mHandler.removeMessages(SHOW_PRESS);
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
}
|
||||||
|
int doubleTapSlopSquare = mDoubleTapTouchSlopSquare;
|
||||||
|
if (distance > doubleTapSlopSquare) {
|
||||||
|
mAlwaysInBiggerTapRegion = false;
|
||||||
|
}
|
||||||
|
} else if ((Math.abs(scrollX) >= 1) || (Math.abs(scrollY) >= 1)) {
|
||||||
|
handled = mListener.onScroll(mCurrentDownEvent, ev, scrollX, scrollY);
|
||||||
|
mLastFocusX = focusX;
|
||||||
|
mLastFocusY = focusY;
|
||||||
|
}
|
||||||
|
if (Build.VERSION.SDK_INT >= 29) {
|
||||||
|
final boolean deepPress = motionClassification == MotionEvent.CLASSIFICATION_DEEP_PRESS;
|
||||||
|
if (deepPress && hasPendingLongPress) {
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
mHandler.sendMessage(mHandler.obtainMessage(LONG_PRESS, 0, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
mStillDown = false;
|
||||||
|
mListener.onUp(ev);
|
||||||
|
MotionEvent currentUpEvent = MotionEvent.obtain(ev);
|
||||||
|
if (mIsDoubleTapping) {
|
||||||
|
handled |= mDoubleTapListener.onDoubleTapEvent(ev);
|
||||||
|
} else if (mInLongPress) {
|
||||||
|
mHandler.removeMessages(TAP);
|
||||||
|
mInLongPress = false;
|
||||||
|
} else if (mAlwaysInTapRegion && !mIgnoreNextUpEvent) {
|
||||||
|
handled = mListener.onSingleTapUp(ev);
|
||||||
|
if (mDeferConfirmSingleTap && mDoubleTapListener != null) {
|
||||||
|
mDoubleTapListener.onSingleTapConfirmed(ev);
|
||||||
|
}
|
||||||
|
} else if (!mIgnoreNextUpEvent) {
|
||||||
|
final VelocityTracker velocityTracker = mVelocityTracker;
|
||||||
|
final int pointerId = ev.getPointerId(0);
|
||||||
|
velocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);
|
||||||
|
final float velocityY = velocityTracker.getYVelocity(pointerId);
|
||||||
|
final float velocityX = velocityTracker.getXVelocity(pointerId);
|
||||||
|
|
||||||
|
if ((Math.abs(velocityY) > mMinimumFlingVelocity)
|
||||||
|
|| (Math.abs(velocityX) > mMinimumFlingVelocity)) {
|
||||||
|
handled = mListener.onFling(mCurrentDownEvent, ev, velocityX, velocityY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mPreviousUpEvent != null) {
|
||||||
|
mPreviousUpEvent.recycle();
|
||||||
|
}
|
||||||
|
mPreviousUpEvent = currentUpEvent;
|
||||||
|
if (mVelocityTracker != null) {
|
||||||
|
mVelocityTracker.recycle();
|
||||||
|
mVelocityTracker = null;
|
||||||
|
}
|
||||||
|
mIsDoubleTapping = false;
|
||||||
|
mDeferConfirmSingleTap = false;
|
||||||
|
mIgnoreNextUpEvent = false;
|
||||||
|
mHandler.removeMessages(SHOW_PRESS);
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
cancel();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cancel() {
|
||||||
|
mHandler.removeMessages(SHOW_PRESS);
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
mHandler.removeMessages(TAP);
|
||||||
|
mVelocityTracker.recycle();
|
||||||
|
mVelocityTracker = null;
|
||||||
|
mIsDoubleTapping = false;
|
||||||
|
mStillDown = false;
|
||||||
|
mAlwaysInTapRegion = false;
|
||||||
|
mAlwaysInBiggerTapRegion = false;
|
||||||
|
mDeferConfirmSingleTap = false;
|
||||||
|
mInLongPress = false;
|
||||||
|
mInContextClick = false;
|
||||||
|
mIgnoreNextUpEvent = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cancelTaps() {
|
||||||
|
mHandler.removeMessages(SHOW_PRESS);
|
||||||
|
mHandler.removeMessages(LONG_PRESS);
|
||||||
|
mHandler.removeMessages(TAP);
|
||||||
|
mIsDoubleTapping = false;
|
||||||
|
mAlwaysInTapRegion = false;
|
||||||
|
mAlwaysInBiggerTapRegion = false;
|
||||||
|
mDeferConfirmSingleTap = false;
|
||||||
|
mInLongPress = false;
|
||||||
|
mInContextClick = false;
|
||||||
|
mIgnoreNextUpEvent = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isConsideredDoubleTap(MotionEvent firstDown, MotionEvent firstUp, MotionEvent secondDown) {
|
||||||
|
if (!mAlwaysInBiggerTapRegion) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final long deltaTime = secondDown.getEventTime() - firstUp.getEventTime();
|
||||||
|
if (deltaTime > DOUBLE_TAP_TIMEOUT || deltaTime < DOUBLE_TAP_MIN_TIME) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int deltaX = (int) firstDown.getX() - (int) secondDown.getX();
|
||||||
|
int deltaY = (int) firstDown.getY() - (int) secondDown.getY();
|
||||||
|
int slopSquare = mDoubleTapSlopSquare;
|
||||||
|
return (deltaX * deltaX + deltaY * deltaY < slopSquare);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dispatchLongPress() {
|
||||||
|
mHandler.removeMessages(TAP);
|
||||||
|
mDeferConfirmSingleTap = false;
|
||||||
|
mInLongPress = true;
|
||||||
|
mListener.onLongPress(mCurrentDownEvent);
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ import android.animation.AnimatorSet;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.InputFilter;
|
import android.text.InputFilter;
|
||||||
|
@ -151,6 +152,12 @@ public class PhotoViewerCaptionEnterView extends FrameLayout implements Notifica
|
||||||
protected int getActionModeStyle() {
|
protected int getActionModeStyle() {
|
||||||
return FloatingToolbar.STYLE_BLACK;
|
return FloatingToolbar.STYLE_BLACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean requestRectangleOnScreen(Rect rectangle) {
|
||||||
|
rectangle.bottom += AndroidUtilities.dp(1000);
|
||||||
|
return super.requestRectangleOnScreen(rectangle);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
messageEditText.setWindowView(windowView);
|
messageEditText.setWindowView(windowView);
|
||||||
|
|
|
@ -808,7 +808,7 @@ public class PollVotesAlert extends BottomSheet {
|
||||||
args.putInt("user_id", userCell.currentUser.id);
|
args.putInt("user_id", userCell.currentUser.id);
|
||||||
dismiss();
|
dismiss();
|
||||||
ProfileActivity fragment = new ProfileActivity(args);
|
ProfileActivity fragment = new ProfileActivity(args);
|
||||||
fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == userCell.currentUser.id);
|
fragment.setPlayProfileAnimation(currentUser != null && currentUser.id == userCell.currentUser.id ? 1 : 0);
|
||||||
parentFragment.presentFragment(fragment);
|
parentFragment.presentFragment(fragment);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -42,6 +42,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio
|
||||||
private final ViewPagerAdapter adapter;
|
private final ViewPagerAdapter adapter;
|
||||||
private final int parentClassGuid;
|
private final int parentClassGuid;
|
||||||
private final long dialogId;
|
private final long dialogId;
|
||||||
|
private boolean scrolledByUser;
|
||||||
|
|
||||||
private int currentAccount = UserConfig.selectedAccount;
|
private int currentAccount = UserConfig.selectedAccount;
|
||||||
|
|
||||||
|
@ -145,6 +146,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio
|
||||||
if (action == MotionEvent.ACTION_DOWN) {
|
if (action == MotionEvent.ACTION_DOWN) {
|
||||||
isScrollingListView = true;
|
isScrollingListView = true;
|
||||||
isSwipingViewPager = true;
|
isSwipingViewPager = true;
|
||||||
|
scrolledByUser = true;
|
||||||
downPoint.set(ev.getX(), ev.getY());
|
downPoint.set(ev.getX(), ev.getY());
|
||||||
} else if (action == MotionEvent.ACTION_MOVE) {
|
} else if (action == MotionEvent.ACTION_MOVE) {
|
||||||
final float dx = ev.getX() - downPoint.x;
|
final float dx = ev.getX() - downPoint.x;
|
||||||
|
@ -226,7 +228,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio
|
||||||
}
|
}
|
||||||
|
|
||||||
public BackupImageView getCurrentItemView() {
|
public BackupImageView getCurrentItemView() {
|
||||||
if (adapter != null) {
|
if (adapter != null && !adapter.objects.isEmpty()) {
|
||||||
return adapter.objects.get(getCurrentItem()).imageView;
|
return adapter.objects.get(getCurrentItem()).imageView;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
@ -237,6 +239,14 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio
|
||||||
setCurrentItem(adapter.getExtraCount(), false);
|
setCurrentItem(adapter.getExtraCount(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getRealCount() {
|
||||||
|
return adapter.getCount() - adapter.getExtraCount() * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRealPosition() {
|
||||||
|
return adapter.getRealPosition(getCurrentItem());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onInterceptTouchEvent(MotionEvent e) {
|
public boolean onInterceptTouchEvent(MotionEvent e) {
|
||||||
if (parentListView.getScrollState() != RecyclerView.SCROLL_STATE_IDLE) {
|
if (parentListView.getScrollState() != RecyclerView.SCROLL_STATE_IDLE) {
|
||||||
|
@ -318,6 +328,9 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio
|
||||||
}
|
}
|
||||||
loadNeighboringThumbs();
|
loadNeighboringThumbs();
|
||||||
getAdapter().notifyDataSetChanged();
|
getAdapter().notifyDataSetChanged();
|
||||||
|
if (!scrolledByUser) {
|
||||||
|
resetCurrentItem();
|
||||||
|
}
|
||||||
if (fromCache) {
|
if (fromCache) {
|
||||||
MessagesController.getInstance(currentAccount).loadDialogPhotos(did, 80, 0, false, parentClassGuid);
|
MessagesController.getInstance(currentAccount).loadDialogPhotos(did, 80, 0, false, parentClassGuid);
|
||||||
}
|
}
|
||||||
|
@ -398,9 +411,9 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio
|
||||||
{
|
{
|
||||||
final int realPosition = getRealPosition(position);
|
final int realPosition = getRealPosition(position);
|
||||||
if (realPosition == 0) {
|
if (realPosition == 0) {
|
||||||
setImage(imagesLocations.get(realPosition), null, parentAvatarImageView.getImageReceiver().getBitmap(), imagesLocationsSizes.get(realPosition), null);
|
setImage(imagesLocations.get(realPosition), null, parentAvatarImageView.getImageReceiver().getBitmap(), imagesLocationsSizes.get(realPosition), 1, null);
|
||||||
} else {
|
} else {
|
||||||
setImage(imagesLocations.get(realPosition), null, thumbsLocations.get(realPosition), null, null, null, null, imagesLocationsSizes.get(realPosition), null);
|
setImage(imagesLocations.get(realPosition), null, thumbsLocations.get(realPosition), null, null, 0, 1, imagesLocationsSizes.get(realPosition));
|
||||||
radialProgress = new RadialProgress2(this);
|
radialProgress = new RadialProgress2(this);
|
||||||
radialProgress.setOverrideAlpha(0.0f);
|
radialProgress.setOverrideAlpha(0.0f);
|
||||||
radialProgress.setIcon(MediaActionDrawable.ICON_EMPTY, false, false);
|
radialProgress.setIcon(MediaActionDrawable.ICON_EMPTY, false, false);
|
||||||
|
|
|
@ -8,8 +8,6 @@ import android.view.View;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.google.android.exoplayer2.util.Log;
|
|
||||||
|
|
||||||
import org.telegram.ui.Cells.ChatMessageCell;
|
import org.telegram.ui.Cells.ChatMessageCell;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -24,11 +22,11 @@ public class RecyclerAnimationScrollHelper {
|
||||||
private LinearLayoutManager layoutManager;
|
private LinearLayoutManager layoutManager;
|
||||||
|
|
||||||
private int scrollDirection;
|
private int scrollDirection;
|
||||||
ValueAnimator animator;
|
private ValueAnimator animator;
|
||||||
|
|
||||||
ScrollListener scrollListener;
|
private ScrollListener scrollListener;
|
||||||
|
|
||||||
AnimationCallback animationCallback;
|
private AnimationCallback animationCallback;
|
||||||
|
|
||||||
public RecyclerAnimationScrollHelper(RecyclerListView recyclerView, LinearLayoutManager layoutManager) {
|
public RecyclerAnimationScrollHelper(RecyclerListView recyclerView, LinearLayoutManager layoutManager) {
|
||||||
this.recyclerView = recyclerView;
|
this.recyclerView = recyclerView;
|
||||||
|
|
|
@ -32,6 +32,9 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
public interface ScrollSlidingTabStripDelegate {
|
public interface ScrollSlidingTabStripDelegate {
|
||||||
void onPageSelected(int page, boolean forward);
|
void onPageSelected(int page, boolean forward);
|
||||||
void onPageScrolled(float progress);
|
void onPageScrolled(float progress);
|
||||||
|
default void onSamePageSelected() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private LinearLayout tabsContainer;
|
private LinearLayout tabsContainer;
|
||||||
|
@ -56,6 +59,8 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
private boolean animatingIndicator;
|
private boolean animatingIndicator;
|
||||||
private float animationIdicatorProgress;
|
private float animationIdicatorProgress;
|
||||||
|
|
||||||
|
private int scrollingToChild = -1;
|
||||||
|
|
||||||
private GradientDrawable selectorDrawable;
|
private GradientDrawable selectorDrawable;
|
||||||
|
|
||||||
private String tabLineColorKey = Theme.key_actionBarTabLine;
|
private String tabLineColorKey = Theme.key_actionBarTabLine;
|
||||||
|
@ -115,6 +120,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
setHorizontalScrollBarEnabled(false);
|
setHorizontalScrollBarEnabled(false);
|
||||||
tabsContainer = new LinearLayout(context);
|
tabsContainer = new LinearLayout(context);
|
||||||
tabsContainer.setOrientation(LinearLayout.HORIZONTAL);
|
tabsContainer.setOrientation(LinearLayout.HORIZONTAL);
|
||||||
|
tabsContainer.setPadding(AndroidUtilities.dp(7), 0, AndroidUtilities.dp(7), 0);
|
||||||
tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
||||||
addView(tabsContainer);
|
addView(tabsContainer);
|
||||||
}
|
}
|
||||||
|
@ -128,6 +134,9 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAnimationProgressInernal(TextView newTab, TextView prevTab, float value) {
|
private void setAnimationProgressInernal(TextView newTab, TextView prevTab, float value) {
|
||||||
|
if (newTab == null || prevTab == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
int newColor = Theme.getColor(activeTextColorKey);
|
int newColor = Theme.getColor(activeTextColorKey);
|
||||||
int prevColor = Theme.getColor(unactiveTextColorKey);
|
int prevColor = Theme.getColor(unactiveTextColorKey);
|
||||||
|
|
||||||
|
@ -154,6 +163,9 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
|
|
||||||
TextView newTab = (TextView) tabsContainer.getChildAt(currentPosition);
|
TextView newTab = (TextView) tabsContainer.getChildAt(currentPosition);
|
||||||
TextView prevTab = (TextView) tabsContainer.getChildAt(previousPosition);
|
TextView prevTab = (TextView) tabsContainer.getChildAt(previousPosition);
|
||||||
|
if (prevTab == null || newTab == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
setAnimationProgressInernal(newTab, prevTab, value);
|
setAnimationProgressInernal(newTab, prevTab, value);
|
||||||
|
|
||||||
if (value >= 1f) {
|
if (value >= 1f) {
|
||||||
|
@ -218,16 +230,21 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
tab.setGravity(Gravity.CENTER);
|
tab.setGravity(Gravity.CENTER);
|
||||||
tab.setText(text);
|
tab.setText(text);
|
||||||
tab.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(selectorColorKey), 3));
|
tab.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(selectorColorKey), 3));
|
||||||
tab.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
|
tab.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
|
||||||
tab.setSingleLine(true);
|
tab.setSingleLine(true);
|
||||||
tab.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
|
tab.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
|
||||||
tab.setPadding(AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8), 0);
|
tab.setPadding(AndroidUtilities.dp(16), 0, AndroidUtilities.dp(16), 0);
|
||||||
tab.setOnClickListener(v -> {
|
tab.setOnClickListener(v -> {
|
||||||
int position1 = tabsContainer.indexOfChild(v);
|
int position1 = tabsContainer.indexOfChild(v);
|
||||||
if (position1 < 0 || position1 == currentPosition) {
|
if (position1 < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (position1 == currentPosition && delegate != null) {
|
||||||
|
delegate.onSamePageSelected();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean scrollingForward = currentPosition < position1;
|
boolean scrollingForward = currentPosition < position1;
|
||||||
|
scrollingToChild = -1;
|
||||||
previousPosition = currentPosition;
|
previousPosition = currentPosition;
|
||||||
currentPosition = position1;
|
currentPosition = position1;
|
||||||
selectedTabId = id;
|
selectedTabId = id;
|
||||||
|
@ -254,7 +271,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
}
|
}
|
||||||
scrollToChild(position1);
|
scrollToChild(position1);
|
||||||
});
|
});
|
||||||
int tabWidth = (int) Math.ceil(tab.getPaint().measureText(text, 0, text.length())) + AndroidUtilities.dp(16);
|
int tabWidth = (int) Math.ceil(tab.getPaint().measureText(text, 0, text.length())) + tab.getPaddingLeft() + tab.getPaddingRight();
|
||||||
allTextWidth += tabWidth;
|
allTextWidth += tabWidth;
|
||||||
positionToWidth.put(position, tabWidth);
|
positionToWidth.put(position, tabWidth);
|
||||||
tabsContainer.addView(tab, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT));
|
tabsContainer.addView(tab, LayoutHelper.createLinear(0, LayoutHelper.MATCH_PARENT));
|
||||||
|
@ -266,6 +283,9 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
TextView tab = (TextView) tabsContainer.getChildAt(a);
|
TextView tab = (TextView) tabsContainer.getChildAt(a);
|
||||||
tab.setTag(currentPosition == a ? activeTextColorKey : unactiveTextColorKey);
|
tab.setTag(currentPosition == a ? activeTextColorKey : unactiveTextColorKey);
|
||||||
tab.setTextColor(Theme.getColor(currentPosition == a ? activeTextColorKey : unactiveTextColorKey));
|
tab.setTextColor(Theme.getColor(currentPosition == a ? activeTextColorKey : unactiveTextColorKey));
|
||||||
|
if (a == 0) {
|
||||||
|
tab.getLayoutParams().width = count == 1 ? LayoutHelper.WRAP_CONTENT : 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,6 +303,14 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
|
|
||||||
public void setInitialTabId(int id) {
|
public void setInitialTabId(int id) {
|
||||||
selectedTabId = id;
|
selectedTabId = id;
|
||||||
|
int pos = idToPosition.get(id);
|
||||||
|
TextView child = (TextView) tabsContainer.getChildAt(pos);
|
||||||
|
if (child != null) {
|
||||||
|
currentPosition = pos;
|
||||||
|
prevLayoutWidth = 0;
|
||||||
|
finishAddingTabs();
|
||||||
|
requestLayout();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFirstTabId() {
|
public int getFirstTabId() {
|
||||||
|
@ -302,7 +330,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
int width = MeasureSpec.getSize(widthMeasureSpec);
|
int width = MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(22);
|
||||||
int count = tabsContainer.getChildCount();
|
int count = tabsContainer.getChildCount();
|
||||||
for (int a = 0; a < count; a++) {
|
for (int a = 0; a < count; a++) {
|
||||||
View child = tabsContainer.getChildAt(a);
|
View child = tabsContainer.getChildAt(a);
|
||||||
|
@ -313,12 +341,17 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
} else if (useSameWidth) {
|
} else if (useSameWidth) {
|
||||||
layoutParams.weight = 1.0f / count;
|
layoutParams.weight = 1.0f / count;
|
||||||
layoutParams.width = 0;
|
layoutParams.width = 0;
|
||||||
|
} else {
|
||||||
|
if (a == 0 && count == 1) {
|
||||||
|
layoutParams.weight = 0.0f;
|
||||||
|
layoutParams.width = LayoutHelper.WRAP_CONTENT;
|
||||||
} else {
|
} else {
|
||||||
layoutParams.weight = 1.0f / allTextWidth * positionToWidth.get(a);
|
layoutParams.weight = 1.0f / allTextWidth * positionToWidth.get(a);
|
||||||
layoutParams.width = 0;
|
layoutParams.width = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (allTextWidth > width) {
|
}
|
||||||
|
if (count == 1 || allTextWidth > width) {
|
||||||
tabsContainer.setWeightSum(0.0f);
|
tabsContainer.setWeightSum(0.0f);
|
||||||
} else {
|
} else {
|
||||||
tabsContainer.setWeightSum(1.0f);
|
tabsContainer.setWeightSum(1.0f);
|
||||||
|
@ -328,9 +361,10 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scrollToChild(int position) {
|
private void scrollToChild(int position) {
|
||||||
if (tabCount == 0) {
|
if (tabCount == 0 || scrollingToChild == position) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
scrollingToChild = position;
|
||||||
TextView child = (TextView) tabsContainer.getChildAt(position);
|
TextView child = (TextView) tabsContainer.getChildAt(position);
|
||||||
if (child == null) {
|
if (child == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -351,6 +385,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
|
|
||||||
if (prevLayoutWidth != r - l) {
|
if (prevLayoutWidth != r - l) {
|
||||||
prevLayoutWidth = r - l;
|
prevLayoutWidth = r - l;
|
||||||
|
scrollingToChild = -1;
|
||||||
if (animatingIndicator) {
|
if (animatingIndicator) {
|
||||||
AndroidUtilities.cancelRunOnUIThread(animationRunnable);
|
AndroidUtilities.cancelRunOnUIThread(animationRunnable);
|
||||||
animatingIndicator = false;
|
animatingIndicator = false;
|
||||||
|
@ -403,6 +438,7 @@ public class ScrollSlidingTextTabStrip extends HorizontalScrollView {
|
||||||
child.setTag(unactiveTextColorKey);
|
child.setTag(unactiveTextColorKey);
|
||||||
nextChild.setTag(activeTextColorKey);
|
nextChild.setTag(activeTextColorKey);
|
||||||
}
|
}
|
||||||
|
scrollToChild(tabsContainer.indexOfChild(nextChild));
|
||||||
}
|
}
|
||||||
if (progress >= 1.0f) {
|
if (progress >= 1.0f) {
|
||||||
currentPosition = position;
|
currentPosition = position;
|
||||||
|
|
|
@ -56,6 +56,7 @@ import org.telegram.messenger.MessagesStorage;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.SendMessagesHelper;
|
import org.telegram.messenger.SendMessagesHelper;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.Utilities;
|
import org.telegram.messenger.Utilities;
|
||||||
import org.telegram.tgnet.ConnectionsManager;
|
import org.telegram.tgnet.ConnectionsManager;
|
||||||
|
@ -294,7 +295,7 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, false) {
|
||||||
|
|
||||||
private boolean ignoreLayout = false;
|
private boolean ignoreLayout = false;
|
||||||
private RectF rect1 = new RectF();
|
private RectF rect1 = new RectF();
|
||||||
|
@ -309,7 +310,7 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi
|
||||||
ignoreLayout = false;
|
ignoreLayout = false;
|
||||||
}
|
}
|
||||||
int availableHeight = totalHeight - getPaddingTop();
|
int availableHeight = totalHeight - getPaddingTop();
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (!AndroidUtilities.isInMultiwindow && keyboardSize <= AndroidUtilities.dp(20)) {
|
if (!AndroidUtilities.isInMultiwindow && keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
availableHeight -= commentTextView.getEmojiPadding();
|
availableHeight -= commentTextView.getEmojiPadding();
|
||||||
}
|
}
|
||||||
|
@ -333,7 +334,7 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
widthSize -= backgroundPaddingLeft * 2;
|
widthSize -= backgroundPaddingLeft * 2;
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow) {
|
if (!AndroidUtilities.isInMultiwindow) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
|
@ -382,7 +383,8 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -436,7 +438,7 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
|
|
@ -18,14 +18,14 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.FrameLayout;
|
|
||||||
|
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
import org.telegram.ui.ActionBar.ActionBar;
|
import org.telegram.ui.ActionBar.ActionBar;
|
||||||
import org.telegram.ui.ActionBar.ActionBarLayout;
|
import org.telegram.ui.ActionBar.ActionBarLayout;
|
||||||
|
import org.telegram.ui.ActionBar.AdjustPanFrameLayout;
|
||||||
import org.telegram.ui.ActionBar.Theme;
|
import org.telegram.ui.ActionBar.Theme;
|
||||||
|
|
||||||
public class SizeNotifierFrameLayout extends FrameLayout {
|
public class SizeNotifierFrameLayout extends AdjustPanFrameLayout {
|
||||||
|
|
||||||
private Rect rect = new Rect();
|
private Rect rect = new Rect();
|
||||||
private Drawable backgroundDrawable;
|
private Drawable backgroundDrawable;
|
||||||
|
@ -37,21 +37,24 @@ public class SizeNotifierFrameLayout extends FrameLayout {
|
||||||
private float translationX;
|
private float translationX;
|
||||||
private float translationY;
|
private float translationY;
|
||||||
private float parallaxScale = 1.0f;
|
private float parallaxScale = 1.0f;
|
||||||
|
private int backgroundTranslationY;
|
||||||
private boolean paused = true;
|
private boolean paused = true;
|
||||||
private Drawable oldBackgroundDrawable;
|
private Drawable oldBackgroundDrawable;
|
||||||
private ActionBarLayout parentLayout;
|
private ActionBarLayout parentLayout;
|
||||||
|
private boolean useSmoothKeyboard;
|
||||||
|
|
||||||
public interface SizeNotifierFrameLayoutDelegate {
|
public interface SizeNotifierFrameLayoutDelegate {
|
||||||
void onSizeChanged(int keyboardHeight, boolean isWidthGreater);
|
void onSizeChanged(int keyboardHeight, boolean isWidthGreater);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeNotifierFrameLayout(Context context) {
|
public SizeNotifierFrameLayout(Context context, boolean smoothKeyboard) {
|
||||||
this(context, null);
|
this(context, smoothKeyboard, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeNotifierFrameLayout(Context context, ActionBarLayout layout) {
|
public SizeNotifierFrameLayout(Context context, boolean smoothKeyboard, ActionBarLayout layout) {
|
||||||
super(context);
|
super(context);
|
||||||
setWillNotDraw(false);
|
setWillNotDraw(false);
|
||||||
|
useSmoothKeyboard = smoothKeyboard;
|
||||||
parentLayout = layout;
|
parentLayout = layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,6 +146,10 @@ public class SizeNotifierFrameLayout extends FrameLayout {
|
||||||
bottomClip = value;
|
bottomClip = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBackgroundTranslation(int translation) {
|
||||||
|
backgroundTranslationY = translation;
|
||||||
|
}
|
||||||
|
|
||||||
public int getHeightWithKeyboard() {
|
public int getHeightWithKeyboard() {
|
||||||
return getKeyboardHeight() + getMeasuredHeight();
|
return getKeyboardHeight() + getMeasuredHeight();
|
||||||
}
|
}
|
||||||
|
@ -153,6 +160,7 @@ public class SizeNotifierFrameLayout extends FrameLayout {
|
||||||
super.onDraw(canvas);
|
super.onDraw(canvas);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int kbHeight = useSmoothKeyboard ? 0 : keyboardHeight;
|
||||||
Drawable newDrawable = Theme.getCachedWallpaperNonBlocking();
|
Drawable newDrawable = Theme.getCachedWallpaperNonBlocking();
|
||||||
if (newDrawable != backgroundDrawable && newDrawable != null) {
|
if (newDrawable != backgroundDrawable && newDrawable != null) {
|
||||||
if (Theme.isAnimatingColor()) {
|
if (Theme.isAnimatingColor()) {
|
||||||
|
@ -186,7 +194,7 @@ public class SizeNotifierFrameLayout extends FrameLayout {
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.clipRect(0, 0, getMeasuredWidth(), getMeasuredHeight() - bottomClip);
|
canvas.clipRect(0, 0, getMeasuredWidth(), getMeasuredHeight() - bottomClip);
|
||||||
}
|
}
|
||||||
drawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight() + keyboardHeight);
|
drawable.setBounds(0, backgroundTranslationY, getMeasuredWidth(), backgroundTranslationY + getMeasuredHeight() + kbHeight);
|
||||||
drawable.draw(canvas);
|
drawable.draw(canvas);
|
||||||
if (bottomClip != 0) {
|
if (bottomClip != 0) {
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
|
@ -204,12 +212,12 @@ public class SizeNotifierFrameLayout extends FrameLayout {
|
||||||
int actionBarHeight = (isActionBarVisible() ? ActionBar.getCurrentActionBarHeight() : 0) + (Build.VERSION.SDK_INT >= 21 && occupyStatusBar ? AndroidUtilities.statusBarHeight : 0);
|
int actionBarHeight = (isActionBarVisible() ? ActionBar.getCurrentActionBarHeight() : 0) + (Build.VERSION.SDK_INT >= 21 && occupyStatusBar ? AndroidUtilities.statusBarHeight : 0);
|
||||||
int viewHeight = getMeasuredHeight() - actionBarHeight;
|
int viewHeight = getMeasuredHeight() - actionBarHeight;
|
||||||
float scaleX = (float) getMeasuredWidth() / (float) drawable.getIntrinsicWidth();
|
float scaleX = (float) getMeasuredWidth() / (float) drawable.getIntrinsicWidth();
|
||||||
float scaleY = (float) (viewHeight + keyboardHeight) / (float) drawable.getIntrinsicHeight();
|
float scaleY = (float) (viewHeight + kbHeight) / (float) drawable.getIntrinsicHeight();
|
||||||
float scale = scaleX < scaleY ? scaleY : scaleX;
|
float scale = scaleX < scaleY ? scaleY : scaleX;
|
||||||
int width = (int) Math.ceil(drawable.getIntrinsicWidth() * scale * parallaxScale);
|
int width = (int) Math.ceil(drawable.getIntrinsicWidth() * scale * parallaxScale);
|
||||||
int height = (int) Math.ceil(drawable.getIntrinsicHeight() * scale * parallaxScale);
|
int height = (int) Math.ceil(drawable.getIntrinsicHeight() * scale * parallaxScale);
|
||||||
int x = (getMeasuredWidth() - width) / 2 + (int) translationX;
|
int x = (getMeasuredWidth() - width) / 2 + (int) translationX;
|
||||||
int y = (viewHeight - height + keyboardHeight) / 2 + actionBarHeight + (int) translationY;
|
int y = backgroundTranslationY + (viewHeight - height + kbHeight) / 2 + actionBarHeight + (int) translationY;
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.clipRect(0, actionBarHeight, width, getMeasuredHeight() - bottomClip);
|
canvas.clipRect(0, actionBarHeight, width, getMeasuredHeight() - bottomClip);
|
||||||
drawable.setBounds(x, y, x + width, y + height);
|
drawable.setBounds(x, y, x + width, y + height);
|
||||||
|
|
|
@ -12,24 +12,26 @@ import android.content.Context;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.FrameLayout;
|
|
||||||
|
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
|
import org.telegram.ui.ActionBar.AdjustPanFrameLayout;
|
||||||
|
|
||||||
public class SizeNotifierFrameLayoutPhoto extends FrameLayout {
|
public class SizeNotifierFrameLayoutPhoto extends AdjustPanFrameLayout {
|
||||||
|
|
||||||
private Rect rect = new Rect();
|
private Rect rect = new Rect();
|
||||||
private int keyboardHeight;
|
private int keyboardHeight;
|
||||||
private SizeNotifierFrameLayoutPhotoDelegate delegate;
|
private SizeNotifierFrameLayoutPhotoDelegate delegate;
|
||||||
private WindowManager windowManager;
|
private WindowManager windowManager;
|
||||||
private boolean withoutWindow;
|
private boolean withoutWindow;
|
||||||
|
private boolean useSmoothKeyboard;
|
||||||
|
|
||||||
public interface SizeNotifierFrameLayoutPhotoDelegate {
|
public interface SizeNotifierFrameLayoutPhotoDelegate {
|
||||||
void onSizeChanged(int keyboardHeight, boolean isWidthGreater);
|
void onSizeChanged(int keyboardHeight, boolean isWidthGreater);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SizeNotifierFrameLayoutPhoto(Context context) {
|
public SizeNotifierFrameLayoutPhoto(Context context, boolean smoothKeyboard) {
|
||||||
super(context);
|
super(context);
|
||||||
|
useSmoothKeyboard = smoothKeyboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDelegate(SizeNotifierFrameLayoutPhotoDelegate sizeNotifierFrameLayoutPhotoDelegate) {
|
public void setDelegate(SizeNotifierFrameLayoutPhotoDelegate sizeNotifierFrameLayoutPhotoDelegate) {
|
||||||
|
@ -55,7 +57,12 @@ public class SizeNotifierFrameLayoutPhoto extends FrameLayout {
|
||||||
} else {
|
} else {
|
||||||
int usableViewHeight = rootView.getHeight() - AndroidUtilities.getViewInset(rootView);
|
int usableViewHeight = rootView.getHeight() - AndroidUtilities.getViewInset(rootView);
|
||||||
int top = rect.top;
|
int top = rect.top;
|
||||||
int size = AndroidUtilities.displaySize.y - top - usableViewHeight;
|
int size;
|
||||||
|
if (useSmoothKeyboard) {
|
||||||
|
size = Math.max(0, usableViewHeight - (rect.bottom - rect.top));
|
||||||
|
} else {
|
||||||
|
size = AndroidUtilities.displaySize.y - top - usableViewHeight;
|
||||||
|
}
|
||||||
if (size <= Math.max(AndroidUtilities.dp(10), AndroidUtilities.statusBarHeight)) {
|
if (size <= Math.max(AndroidUtilities.dp(10), AndroidUtilities.statusBarHeight)) {
|
||||||
size = 0;
|
size = 0;
|
||||||
}
|
}
|
||||||
|
@ -67,13 +74,10 @@ public class SizeNotifierFrameLayoutPhoto extends FrameLayout {
|
||||||
if (delegate != null) {
|
if (delegate != null) {
|
||||||
keyboardHeight = getKeyboardHeight();
|
keyboardHeight = getKeyboardHeight();
|
||||||
final boolean isWidthGreater = AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y;
|
final boolean isWidthGreater = AndroidUtilities.displaySize.x > AndroidUtilities.displaySize.y;
|
||||||
post(new Runnable() {
|
post(() -> {
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (delegate != null) {
|
if (delegate != null) {
|
||||||
delegate.onSizeChanged(keyboardHeight, isWidthGreater);
|
delegate.onSizeChanged(keyboardHeight, isWidthGreater);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ public class CountrySelectActivity extends BaseFragment {
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,8 @@ public class DataUsageActivity extends BaseFragment {
|
||||||
return t * t * t * t * t + 1.0F;
|
return t * t * t * t * t + 1.0F;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private boolean swipeBackEnabled = true;
|
||||||
|
|
||||||
public DataUsageActivity() {
|
public DataUsageActivity() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -548,6 +550,11 @@ public class DataUsageActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return swipeBackEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
private void setScrollY(float value) {
|
private void setScrollY(float value) {
|
||||||
actionBar.setTranslationY(value);
|
actionBar.setTranslationY(value);
|
||||||
for (int a = 0; a < viewPages.length; a++) {
|
for (int a = 0; a < viewPages.length; a++) {
|
||||||
|
@ -560,9 +567,9 @@ public class DataUsageActivity extends BaseFragment {
|
||||||
if (scrollSlidingTextTabStrip == null) {
|
if (scrollSlidingTextTabStrip == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("NetworkUsageMobile", R.string.NetworkUsageMobile));
|
scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("NetworkUsageMobileTab", R.string.NetworkUsageMobileTab));
|
||||||
scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("NetworkUsageWiFi", R.string.NetworkUsageWiFi));
|
scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("NetworkUsageWiFiTab", R.string.NetworkUsageWiFiTab));
|
||||||
scrollSlidingTextTabStrip.addTextTab(2, LocaleController.getString("NetworkUsageRoaming", R.string.NetworkUsageRoaming));
|
scrollSlidingTextTabStrip.addTextTab(2, LocaleController.getString("NetworkUsageRoamingTab", R.string.NetworkUsageRoamingTab));
|
||||||
scrollSlidingTextTabStrip.setVisibility(View.VISIBLE);
|
scrollSlidingTextTabStrip.setVisibility(View.VISIBLE);
|
||||||
actionBar.setExtraHeight(AndroidUtilities.dp(44));
|
actionBar.setExtraHeight(AndroidUtilities.dp(44));
|
||||||
int id = scrollSlidingTextTabStrip.getCurrentTabId();
|
int id = scrollSlidingTextTabStrip.getCurrentTabId();
|
||||||
|
|
|
@ -78,6 +78,8 @@ public class DialogOrContactPickerActivity extends BaseFragment {
|
||||||
return t * t * t * t * t + 1.0F;
|
return t * t * t * t * t + 1.0F;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private boolean swipeBackEnabled = true;
|
||||||
|
|
||||||
public DialogOrContactPickerActivity() {
|
public DialogOrContactPickerActivity() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
@ -582,6 +584,11 @@ public class DialogOrContactPickerActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return swipeBackEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFragmentDestroy() {
|
public void onFragmentDestroy() {
|
||||||
if (dialogsActivity != null) {
|
if (dialogsActivity != null) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ import android.os.Vibrator;
|
||||||
|
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.LinearSmoothScrollerMiddle;
|
import androidx.recyclerview.widget.LinearSmoothScrollerCustom;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
@ -183,6 +183,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
private ActionBarMenuSubItem archiveItem;
|
private ActionBarMenuSubItem archiveItem;
|
||||||
private ActionBarMenuSubItem clearItem;
|
private ActionBarMenuSubItem clearItem;
|
||||||
private ActionBarMenuSubItem readItem;
|
private ActionBarMenuSubItem readItem;
|
||||||
|
private ActionBarMenuSubItem blockItem;
|
||||||
|
|
||||||
private float additionalFloatingTranslation;
|
private float additionalFloatingTranslation;
|
||||||
private float floatingButtonTranslation;
|
private float floatingButtonTranslation;
|
||||||
|
@ -250,6 +251,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
private int canMuteCount;
|
private int canMuteCount;
|
||||||
private int canUnmuteCount;
|
private int canUnmuteCount;
|
||||||
private int canClearCacheCount;
|
private int canClearCacheCount;
|
||||||
|
private int canReportSpamCount;
|
||||||
|
|
||||||
private int folderId;
|
private int folderId;
|
||||||
|
|
||||||
|
@ -259,6 +261,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
private final static int clear = 103;
|
private final static int clear = 103;
|
||||||
private final static int mute = 104;
|
private final static int mute = 104;
|
||||||
private final static int archive = 105;
|
private final static int archive = 105;
|
||||||
|
private final static int block = 106;
|
||||||
|
|
||||||
private final static int ARCHIVE_ITEM_STATE_PINNED = 0;
|
private final static int ARCHIVE_ITEM_STATE_PINNED = 0;
|
||||||
private final static int ARCHIVE_ITEM_STATE_SHOWED = 1;
|
private final static int ARCHIVE_ITEM_STATE_SHOWED = 1;
|
||||||
|
@ -277,7 +280,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
private int inputFieldHeight;
|
private int inputFieldHeight;
|
||||||
|
|
||||||
public ContentView(Context context) {
|
public ContentView(Context context) {
|
||||||
super(context);
|
super(context, SharedConfig.smoothKeyboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -290,7 +293,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
|
|
||||||
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
int childCount = getChildCount();
|
int childCount = getChildCount();
|
||||||
|
|
||||||
if (commentView != null) {
|
if (commentView != null) {
|
||||||
|
@ -304,6 +307,12 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
} else {
|
} else {
|
||||||
inputFieldHeight = 0;
|
inputFieldHeight = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SharedConfig.smoothKeyboard && commentView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(getCurrentPanTranslationY());
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
searchListView.setTranslationY(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < childCount; i++) {
|
for (int i = 0; i < childCount; i++) {
|
||||||
|
@ -338,8 +347,9 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
|
|
||||||
int paddingBottom;
|
int paddingBottom;
|
||||||
Object tag = commentView != null ? commentView.getTag() : null;
|
Object tag = commentView != null ? commentView.getTag() : null;
|
||||||
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (tag != null && tag.equals(2)) {
|
if (tag != null && tag.equals(2)) {
|
||||||
paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow ? commentView.getEmojiPadding() : 0;
|
paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow ? commentView.getEmojiPadding() : 0;
|
||||||
} else {
|
} else {
|
||||||
paddingBottom = 0;
|
paddingBottom = 0;
|
||||||
}
|
}
|
||||||
|
@ -1164,7 +1174,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
DialogsActivity dialogsActivity = new DialogsActivity(arguments);
|
DialogsActivity dialogsActivity = new DialogsActivity(arguments);
|
||||||
dialogsActivity.setDelegate(oldDelegate);
|
dialogsActivity.setDelegate(oldDelegate);
|
||||||
launchActivity.presentFragment(dialogsActivity, false, true);
|
launchActivity.presentFragment(dialogsActivity, false, true);
|
||||||
} else if (id == pin || id == read || id == delete || id == clear || id == mute || id == archive) {
|
} else if (id == pin || id == read || id == delete || id == clear || id == mute || id == archive || id == block) {
|
||||||
perfromSelectedDialogsAction(id, true);
|
perfromSelectedDialogsAction(id, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1192,6 +1202,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
archiveItem = otherItem.addSubItem(archive, R.drawable.msg_archive, LocaleController.getString("Archive", R.string.Archive));
|
archiveItem = otherItem.addSubItem(archive, R.drawable.msg_archive, LocaleController.getString("Archive", R.string.Archive));
|
||||||
readItem = otherItem.addSubItem(read, R.drawable.msg_markread, LocaleController.getString("MarkAsRead", R.string.MarkAsRead));
|
readItem = otherItem.addSubItem(read, R.drawable.msg_markread, LocaleController.getString("MarkAsRead", R.string.MarkAsRead));
|
||||||
clearItem = otherItem.addSubItem(clear, R.drawable.msg_clear, LocaleController.getString("ClearHistory", R.string.ClearHistory));
|
clearItem = otherItem.addSubItem(clear, R.drawable.msg_clear, LocaleController.getString("ClearHistory", R.string.ClearHistory));
|
||||||
|
blockItem = otherItem.addSubItem(block, R.drawable.msg_block, LocaleController.getString("BlockUser", R.string.BlockUser));
|
||||||
|
|
||||||
actionModeViews.add(pinItem);
|
actionModeViews.add(pinItem);
|
||||||
actionModeViews.add(muteItem);
|
actionModeViews.add(muteItem);
|
||||||
|
@ -1259,7 +1270,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
if (hasHiddenArchive() && position == 1) {
|
if (hasHiddenArchive() && position == 1) {
|
||||||
super.smoothScrollToPosition(recyclerView, state, position);
|
super.smoothScrollToPosition(recyclerView, state, position);
|
||||||
} else {
|
} else {
|
||||||
LinearSmoothScrollerMiddle linearSmoothScroller = new LinearSmoothScrollerMiddle(recyclerView.getContext());
|
LinearSmoothScrollerCustom linearSmoothScroller = new LinearSmoothScrollerCustom(recyclerView.getContext(), LinearSmoothScrollerCustom.POSITION_MIDDLE);
|
||||||
linearSmoothScroller.setTargetPosition(position);
|
linearSmoothScroller.setTargetPosition(position);
|
||||||
startSmoothScroll(linearSmoothScroller);
|
startSmoothScroll(linearSmoothScroller);
|
||||||
}
|
}
|
||||||
|
@ -2001,6 +2012,21 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
return fragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
if (listView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (commentView != null && commentView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(y);
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
searchListView.setTranslationY(0);
|
||||||
|
} else {
|
||||||
|
listView.setTranslationY(y);
|
||||||
|
searchListView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
@ -2674,7 +2700,6 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if ((action == delete || action == clear) && count > 1 && alert) {
|
} else if ((action == delete || action == clear) && count > 1 && alert) {
|
||||||
if (alert) {
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||||
if (action == delete) {
|
if (action == delete) {
|
||||||
builder.setTitle(LocaleController.formatString("DeleteFewChatsTitle", R.string.DeleteFewChatsTitle, LocaleController.formatPluralString("ChatsSelected", count)));
|
builder.setTitle(LocaleController.formatString("DeleteFewChatsTitle", R.string.DeleteFewChatsTitle, LocaleController.formatPluralString("ChatsSelected", count)));
|
||||||
|
@ -2709,7 +2734,30 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
|
button.setTextColor(Theme.getColor(Theme.key_dialogTextRed2));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
} else if (action == block && alert) {
|
||||||
|
TLRPC.User user;
|
||||||
|
if (count == 1) {
|
||||||
|
long did = selectedDialogs.get(0);
|
||||||
|
user = getMessagesController().getUser((int) did);
|
||||||
|
} else {
|
||||||
|
user = null;
|
||||||
}
|
}
|
||||||
|
AlertsCreator.createBlockDialogAlert(DialogsActivity.this, count, canReportSpamCount != 0, user, (report, delete) -> {
|
||||||
|
for (int a = 0, N = selectedDialogs.size(); a < N; a++) {
|
||||||
|
long did = selectedDialogs.get(a);
|
||||||
|
int lowerId = (int) did;
|
||||||
|
if (report) {
|
||||||
|
TLRPC.User u = getMessagesController().getUser(lowerId);
|
||||||
|
getMessagesController().reportSpam(did, u, null, null, false);
|
||||||
|
}
|
||||||
|
if (delete) {
|
||||||
|
getMessagesController().deleteDialog(did, 0, true);
|
||||||
|
}
|
||||||
|
getMessagesController().blockUser(lowerId);
|
||||||
|
}
|
||||||
|
hideActionMode(false);
|
||||||
|
});
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
boolean scrollToTop = false;
|
boolean scrollToTop = false;
|
||||||
for (int a = 0; a < count; a++) {
|
for (int a = 0; a < count; a++) {
|
||||||
|
@ -2844,6 +2892,8 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
getNotificationsController().setDialogNotificationsSettings(selectedDialog, NotificationsController.SETTING_MUTE_FOREVER);
|
getNotificationsController().setDialogNotificationsSettings(selectedDialog, NotificationsController.SETTING_MUTE_FOREVER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (action == block) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (action == pin) {
|
if (action == pin) {
|
||||||
|
@ -2878,11 +2928,15 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
canPinCount = 0;
|
canPinCount = 0;
|
||||||
canReadCount = 0;
|
canReadCount = 0;
|
||||||
canClearCacheCount = 0;
|
canClearCacheCount = 0;
|
||||||
|
int cantBlockCount = 0;
|
||||||
|
canReportSpamCount = 0;
|
||||||
if (hide) {
|
if (hide) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ArrayList<Long> selectedDialogs = dialogsAdapter.getSelectedDialogs();
|
ArrayList<Long> selectedDialogs = dialogsAdapter.getSelectedDialogs();
|
||||||
int count = selectedDialogs.size();
|
int count = selectedDialogs.size();
|
||||||
|
int selfUserId = getUserConfig().getClientUserId();
|
||||||
|
SharedPreferences preferences = getNotificationsSettings();
|
||||||
for (int a = 0; a < count; a++) {
|
for (int a = 0; a < count; a++) {
|
||||||
TLRPC.Dialog dialog = getMessagesController().dialogs_dict.get(selectedDialogs.get(a));
|
TLRPC.Dialog dialog = getMessagesController().dialogs_dict.get(selectedDialogs.get(a));
|
||||||
if (dialog == null) {
|
if (dialog == null) {
|
||||||
|
@ -2904,13 +2958,26 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
|
|
||||||
if (folderId == 1) {
|
if (folderId == 1) {
|
||||||
canUnarchiveCount++;
|
canUnarchiveCount++;
|
||||||
} else if (selectedDialog != getUserConfig().getClientUserId() && selectedDialog != 777000 && !getMessagesController().isProxyDialog(selectedDialog, false)) {
|
} else if (selectedDialog != selfUserId && selectedDialog != 777000 && !getMessagesController().isProxyDialog(selectedDialog, false)) {
|
||||||
canArchiveCount++;
|
canArchiveCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lower_id = (int) selectedDialog;
|
int lower_id = (int) selectedDialog;
|
||||||
int high_id = (int) (selectedDialog >> 32);
|
int high_id = (int) (selectedDialog >> 32);
|
||||||
|
|
||||||
|
if (lower_id <= 0 || lower_id == selfUserId) {
|
||||||
|
cantBlockCount++;
|
||||||
|
} else {
|
||||||
|
TLRPC.User user = getMessagesController().getUser(lower_id);
|
||||||
|
if (MessagesController.isSupportUser(user)) {
|
||||||
|
cantBlockCount++;
|
||||||
|
} else {
|
||||||
|
if (lower_id == 0 || preferences.getBoolean("dialog_bar_report" + selectedDialog, true)) {
|
||||||
|
canReportSpamCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (DialogObject.isChannel(dialog)) {
|
if (DialogObject.isChannel(dialog)) {
|
||||||
final TLRPC.Chat chat = getMessagesController().getChat(-lower_id);
|
final TLRPC.Chat chat = getMessagesController().getChat(-lower_id);
|
||||||
CharSequence[] items;
|
CharSequence[] items;
|
||||||
|
@ -2988,6 +3055,11 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter.
|
||||||
} else {
|
} else {
|
||||||
pinItem.setVisibility(View.VISIBLE);
|
pinItem.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
if (cantBlockCount != 0) {
|
||||||
|
blockItem.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
blockItem.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
if (canUnmuteCount != 0) {
|
if (canUnmuteCount != 0) {
|
||||||
muteItem.setIcon(R.drawable.msg_unmute);
|
muteItem.setIcon(R.drawable.msg_unmute);
|
||||||
muteItem.setContentDescription(LocaleController.getString("ChatsUnmute", R.string.ChatsUnmute));
|
muteItem.setContentDescription(LocaleController.getString("ChatsUnmute", R.string.ChatsUnmute));
|
||||||
|
|
|
@ -309,7 +309,7 @@ public class DocumentSelectActivity extends BaseFragment {
|
||||||
|
|
||||||
selectedFiles.clear();
|
selectedFiles.clear();
|
||||||
|
|
||||||
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private int lastNotifyWidth;
|
private int lastNotifyWidth;
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
@ -322,18 +322,27 @@ public class DocumentSelectActivity extends BaseFragment {
|
||||||
|
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int kbHeight = getKeyboardHeight();
|
||||||
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : kbHeight;
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow && commentTextView != null && frameLayout2.getParent() == this) {
|
if (!AndroidUtilities.isInMultiwindow && commentTextView != null && frameLayout2.getParent() == this) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
|
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
|
||||||
}
|
}
|
||||||
} else if (commentTextView != null) {
|
}
|
||||||
|
|
||||||
|
if (kbHeight > AndroidUtilities.dp(20) && commentTextView != null) {
|
||||||
ignoreLayout = true;
|
ignoreLayout = true;
|
||||||
commentTextView.hideEmojiView();
|
commentTextView.hideEmojiView();
|
||||||
ignoreLayout = false;
|
ignoreLayout = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SharedConfig.smoothKeyboard && commentTextView != null && commentTextView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(getCurrentPanTranslationY());
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
emptyView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
|
||||||
int childCount = getChildCount();
|
int childCount = getChildCount();
|
||||||
for (int i = 0; i < childCount; i++) {
|
for (int i = 0; i < childCount; i++) {
|
||||||
View child = getChildAt(i);
|
View child = getChildAt(i);
|
||||||
|
@ -366,7 +375,8 @@ public class DocumentSelectActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = commentTextView != null && frameLayout2.getParent() == this && getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = commentTextView != null && frameLayout2.getParent() == this && keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -420,7 +430,7 @@ public class DocumentSelectActivity extends BaseFragment {
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
@ -480,7 +490,7 @@ public class DocumentSelectActivity extends BaseFragment {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
scrolling = newState != RecyclerView.SCROLL_STATE_IDLE;
|
scrolling = newState != RecyclerView.SCROLL_STATE_IDLE;
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -769,6 +779,21 @@ public class DocumentSelectActivity extends BaseFragment {
|
||||||
return fragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
if (listView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (commentTextView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(y);
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
emptyView.setTranslationY(0);
|
||||||
|
} else {
|
||||||
|
listView.setTranslationY(y);
|
||||||
|
emptyView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean onItemClick(View view, ListItem item) {
|
private boolean onItemClick(View view, ListItem item) {
|
||||||
if (item == null || item.file == null || item.file.isDirectory()) {
|
if (item == null || item.file == null || item.file.isDirectory()) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -983,7 +983,8 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
|
||||||
if (selectedContacts.size() == 0) {
|
if (selectedContacts.size() == 0) {
|
||||||
actionBar.setSubtitle(LocaleController.formatString("MembersCountZero", R.string.MembersCountZero, LocaleController.formatPluralString("Members", maxCount)));
|
actionBar.setSubtitle(LocaleController.formatString("MembersCountZero", R.string.MembersCountZero, LocaleController.formatPluralString("Members", maxCount)));
|
||||||
} else {
|
} else {
|
||||||
actionBar.setSubtitle(LocaleController.formatString("MembersCount", R.string.MembersCount, selectedContacts.size(), maxCount));
|
String str = LocaleController.getPluralString("MembersCountSelected", selectedContacts.size());
|
||||||
|
actionBar.setSubtitle(String.format(str, selectedContacts.size(), maxCount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.telegram.messenger.ChatObject;
|
||||||
import org.telegram.messenger.ImageLocation;
|
import org.telegram.messenger.ImageLocation;
|
||||||
import org.telegram.messenger.LocaleController;
|
import org.telegram.messenger.LocaleController;
|
||||||
import org.telegram.messenger.MessagesStorage;
|
import org.telegram.messenger.MessagesStorage;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.tgnet.ConnectionsManager;
|
import org.telegram.tgnet.ConnectionsManager;
|
||||||
import org.telegram.tgnet.TLRPC;
|
import org.telegram.tgnet.TLRPC;
|
||||||
import org.telegram.messenger.FileLog;
|
import org.telegram.messenger.FileLog;
|
||||||
|
@ -231,7 +232,7 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
SizeNotifierFrameLayout sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
|
||||||
|
@ -245,7 +246,7 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati
|
||||||
|
|
||||||
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize > AndroidUtilities.dp(20)) {
|
if (keyboardSize > AndroidUtilities.dp(20)) {
|
||||||
ignoreLayout = true;
|
ignoreLayout = true;
|
||||||
editText.hideEmojiView();
|
editText.hideEmojiView();
|
||||||
|
@ -278,7 +279,8 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? editText.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? editText.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -332,7 +334,7 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
|
|
@ -196,7 +196,7 @@ public class LanguageSelectActivity extends BaseFragment implements Notification
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import android.graphics.Color;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Shader;
|
import android.graphics.Shader;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -231,7 +232,31 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getWindow().setBackgroundDrawableResource(R.drawable.transparent);
|
getWindow().setBackgroundDrawable(new ColorDrawable(0xffffffff) {
|
||||||
|
@Override
|
||||||
|
public void setBounds(int left, int top, int right, int bottom) {
|
||||||
|
bottom += AndroidUtilities.dp(500);
|
||||||
|
super.setBounds(left, top, right, bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Canvas canvas) {
|
||||||
|
if (SharedConfig.smoothKeyboard) {
|
||||||
|
int color = getColor();
|
||||||
|
int newColor;
|
||||||
|
if (PhotoViewer.hasInstance() && PhotoViewer.getInstance().isVisible()) {
|
||||||
|
newColor = 0xff000000;
|
||||||
|
} else {
|
||||||
|
newColor = Theme.getColor(Theme.key_windowBackgroundWhite);
|
||||||
|
}
|
||||||
|
if (color != newColor) {
|
||||||
|
setColor(newColor);
|
||||||
|
}
|
||||||
|
super.draw(canvas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture) {
|
if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture) {
|
||||||
try {
|
try {
|
||||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
|
||||||
|
|
|
@ -405,7 +405,6 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
|
||||||
@Override
|
@Override
|
||||||
public boolean onFragmentCreate() {
|
public boolean onFragmentCreate() {
|
||||||
super.onFragmentCreate();
|
super.onFragmentCreate();
|
||||||
swipeBackEnabled = false;
|
|
||||||
getNotificationCenter().addObserver(this, NotificationCenter.closeChats);
|
getNotificationCenter().addObserver(this, NotificationCenter.closeChats);
|
||||||
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.locationPermissionGranted);
|
NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.locationPermissionGranted);
|
||||||
if (messageObject != null && messageObject.isLiveLocation()) {
|
if (messageObject != null && messageObject.isLiveLocation()) {
|
||||||
|
@ -452,6 +451,11 @@ public class LocationActivity extends BaseFragment implements NotificationCenter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View createView(Context context) {
|
public View createView(Context context) {
|
||||||
searchWas = false;
|
searchWas = false;
|
||||||
|
|
|
@ -92,6 +92,7 @@ import org.telegram.ui.Components.NumberTextView;
|
||||||
import org.telegram.ui.Components.RadialProgressView;
|
import org.telegram.ui.Components.RadialProgressView;
|
||||||
import org.telegram.ui.Components.RecyclerListView;
|
import org.telegram.ui.Components.RecyclerListView;
|
||||||
import org.telegram.ui.Components.ScrollSlidingTextTabStrip;
|
import org.telegram.ui.Components.ScrollSlidingTextTabStrip;
|
||||||
|
import org.telegram.ui.Components.SharedMediaLayout;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -164,8 +165,10 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
private boolean animatingForward;
|
private boolean animatingForward;
|
||||||
private boolean backAnimation;
|
private boolean backAnimation;
|
||||||
|
|
||||||
|
private boolean swipeBackEnabled;
|
||||||
|
|
||||||
private long dialog_id;
|
private long dialog_id;
|
||||||
private int columnsCount = 4;
|
private int columnsCount = 3;
|
||||||
|
|
||||||
private static final Interpolator interpolator = t -> {
|
private static final Interpolator interpolator = t -> {
|
||||||
--t;
|
--t;
|
||||||
|
@ -265,91 +268,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static class SharedMediaData {
|
private SharedMediaLayout.SharedMediaData[] sharedMediaData = new SharedMediaLayout.SharedMediaData[5];
|
||||||
private ArrayList<MessageObject> messages = new ArrayList<>();
|
|
||||||
private SparseArray<MessageObject>[] messagesDict = new SparseArray[]{new SparseArray<>(), new SparseArray<>()};
|
|
||||||
private ArrayList<String> sections = new ArrayList<>();
|
|
||||||
private HashMap<String, ArrayList<MessageObject>> sectionArrays = new HashMap<>();
|
|
||||||
private int totalCount;
|
|
||||||
private boolean loading;
|
|
||||||
private boolean[] endReached = new boolean[]{false, true};
|
|
||||||
private int[] max_id = new int[]{0, 0};
|
|
||||||
|
|
||||||
public void setTotalCount(int count) {
|
|
||||||
totalCount = count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxId(int num, int value) {
|
|
||||||
max_id[num] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEndReached(int num, boolean value) {
|
|
||||||
endReached[num] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean addMessage(MessageObject messageObject, int loadIndex, boolean isNew, boolean enc) {
|
|
||||||
if (messagesDict[loadIndex].indexOfKey(messageObject.getId()) >= 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ArrayList<MessageObject> messageObjects = sectionArrays.get(messageObject.monthKey);
|
|
||||||
if (messageObjects == null) {
|
|
||||||
messageObjects = new ArrayList<>();
|
|
||||||
sectionArrays.put(messageObject.monthKey, messageObjects);
|
|
||||||
if (isNew) {
|
|
||||||
sections.add(0, messageObject.monthKey);
|
|
||||||
} else {
|
|
||||||
sections.add(messageObject.monthKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isNew) {
|
|
||||||
messageObjects.add(0, messageObject);
|
|
||||||
messages.add(0, messageObject);
|
|
||||||
} else {
|
|
||||||
messageObjects.add(messageObject);
|
|
||||||
messages.add(messageObject);
|
|
||||||
}
|
|
||||||
messagesDict[loadIndex].put(messageObject.getId(), messageObject);
|
|
||||||
if (!enc) {
|
|
||||||
if (messageObject.getId() > 0) {
|
|
||||||
max_id[loadIndex] = Math.min(messageObject.getId(), max_id[loadIndex]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
max_id[loadIndex] = Math.max(messageObject.getId(), max_id[loadIndex]);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean deleteMessage(int mid, int loadIndex) {
|
|
||||||
MessageObject messageObject = messagesDict[loadIndex].get(mid);
|
|
||||||
if (messageObject == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ArrayList<MessageObject> messageObjects = sectionArrays.get(messageObject.monthKey);
|
|
||||||
if (messageObjects == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
messageObjects.remove(messageObject);
|
|
||||||
messages.remove(messageObject);
|
|
||||||
messagesDict[loadIndex].remove(messageObject.getId());
|
|
||||||
if (messageObjects.isEmpty()) {
|
|
||||||
sectionArrays.remove(messageObject.monthKey);
|
|
||||||
sections.remove(messageObject.monthKey);
|
|
||||||
}
|
|
||||||
totalCount--;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void replaceMid(int oldMid, int newMid) {
|
|
||||||
MessageObject obj = messagesDict[0].get(oldMid);
|
|
||||||
if (obj != null) {
|
|
||||||
messagesDict[0].remove(oldMid);
|
|
||||||
messagesDict[0].put(newMid, obj);
|
|
||||||
obj.messageOwner.id = newMid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private SharedMediaData[] sharedMediaData = new SharedMediaData[5];
|
|
||||||
|
|
||||||
private final static int forward = 3;
|
private final static int forward = 3;
|
||||||
private final static int delete = 4;
|
private final static int delete = 4;
|
||||||
|
@ -359,13 +278,13 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
this(args, media, null, MediaDataController.MEDIA_PHOTOVIDEO);
|
this(args, media, null, MediaDataController.MEDIA_PHOTOVIDEO);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MediaActivity(Bundle args, int[] media, SharedMediaData[] mediaData, int initTab) {
|
public MediaActivity(Bundle args, int[] media, SharedMediaLayout.SharedMediaData[] mediaData, int initTab) {
|
||||||
super(args);
|
super(args);
|
||||||
hasMedia = media;
|
hasMedia = media;
|
||||||
initialTab = initTab;
|
initialTab = initTab;
|
||||||
dialog_id = args.getLong("dialog_id", 0);
|
dialog_id = args.getLong("dialog_id", 0);
|
||||||
for (int a = 0; a < sharedMediaData.length; a++) {
|
for (int a = 0; a < sharedMediaData.length; a++) {
|
||||||
sharedMediaData[a] = new SharedMediaData();
|
sharedMediaData[a] = new SharedMediaLayout.SharedMediaData();
|
||||||
sharedMediaData[a].max_id[0] = ((int) dialog_id) == 0 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
|
sharedMediaData[a].max_id[0] = ((int) dialog_id) == 0 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
|
||||||
if (mergeDialogId != 0 && info != null) {
|
if (mergeDialogId != 0 && info != null) {
|
||||||
sharedMediaData[a].max_id[1] = info.migrated_from_max_id;
|
sharedMediaData[a].max_id[1] = info.migrated_from_max_id;
|
||||||
|
@ -373,13 +292,13 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
}
|
}
|
||||||
if (mediaData != null) {
|
if (mediaData != null) {
|
||||||
sharedMediaData[a].totalCount = mediaData[a].totalCount;
|
sharedMediaData[a].totalCount = mediaData[a].totalCount;
|
||||||
//sharedMediaData[a].endReached = mediaData[a].endReached;
|
|
||||||
sharedMediaData[a].messages.addAll(mediaData[a].messages);
|
sharedMediaData[a].messages.addAll(mediaData[a].messages);
|
||||||
sharedMediaData[a].sections.addAll(mediaData[a].sections);
|
sharedMediaData[a].sections.addAll(mediaData[a].sections);
|
||||||
for (HashMap.Entry<String, ArrayList<MessageObject>> entry : mediaData[a].sectionArrays.entrySet()) {
|
for (HashMap.Entry<String, ArrayList<MessageObject>> entry : mediaData[a].sectionArrays.entrySet()) {
|
||||||
sharedMediaData[a].sectionArrays.put(entry.getKey(), new ArrayList<>(entry.getValue()));
|
sharedMediaData[a].sectionArrays.put(entry.getKey(), new ArrayList<>(entry.getValue()));
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
|
sharedMediaData[a].endReached[i] = mediaData[a].endReached[i];
|
||||||
sharedMediaData[a].messagesDict[i] = mediaData[a].messagesDict[i].clone();
|
sharedMediaData[a].messagesDict[i] = mediaData[a].messagesDict[i].clone();
|
||||||
sharedMediaData[a].max_id[i] = mediaData[a].max_id[i];
|
sharedMediaData[a].max_id[i] = mediaData[a].max_id[i];
|
||||||
}
|
}
|
||||||
|
@ -1181,7 +1100,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
}
|
}
|
||||||
scrolling = newState != RecyclerView.SCROLL_STATE_IDLE;
|
scrolling = newState != RecyclerView.SCROLL_STATE_IDLE;
|
||||||
|
@ -1343,6 +1262,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setScrollY(float value) {
|
private void setScrollY(float value) {
|
||||||
actionBar.setTranslationY(value);
|
actionBar.setTranslationY(value);
|
||||||
if (fragmentContextView != null) {
|
if (fragmentContextView != null) {
|
||||||
|
@ -1470,7 +1390,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
boolean updated = false;
|
boolean updated = false;
|
||||||
for (int a = 0, N = markAsDeletedMessages.size(); a < N; a++) {
|
for (int a = 0, N = markAsDeletedMessages.size(); a < N; a++) {
|
||||||
for (int b = 0; b < sharedMediaData.length; b++) {
|
for (int b = 0; b < sharedMediaData.length; b++) {
|
||||||
if (sharedMediaData[b].deleteMessage(markAsDeletedMessages.get(a), loadIndex)) {
|
if (sharedMediaData[b].deleteMessage(markAsDeletedMessages.get(a), loadIndex) != null) {
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1554,8 +1474,8 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
}
|
}
|
||||||
Integer msgId = (Integer) args[0];
|
Integer msgId = (Integer) args[0];
|
||||||
Integer newMsgId = (Integer) args[1];
|
Integer newMsgId = (Integer) args[1];
|
||||||
for (SharedMediaData data : sharedMediaData) {
|
for (int a = 0; a < sharedMediaData.length; a++) {
|
||||||
data.replaceMid(msgId, newMsgId);
|
sharedMediaData[a].replaceMid(msgId, newMsgId);
|
||||||
}
|
}
|
||||||
} else if (id == NotificationCenter.messagePlayingDidStart || id == NotificationCenter.messagePlayingPlayStateChanged || id == NotificationCenter.messagePlayingDidReset) {
|
} else if (id == NotificationCenter.messagePlayingDidStart || id == NotificationCenter.messagePlayingPlayStateChanged || id == NotificationCenter.messagePlayingDidReset) {
|
||||||
if (id == NotificationCenter.messagePlayingDidReset || id == NotificationCenter.messagePlayingPlayStateChanged) {
|
if (id == NotificationCenter.messagePlayingDidReset || id == NotificationCenter.messagePlayingPlayStateChanged) {
|
||||||
|
@ -1612,6 +1532,11 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return swipeBackEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
|
public void onConfigurationChanged(android.content.res.Configuration newConfig) {
|
||||||
super.onConfigurationChanged(newConfig);
|
super.onConfigurationChanged(newConfig);
|
||||||
|
@ -1772,23 +1697,23 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
scrollSlidingTextTabStrip.removeTabs();
|
scrollSlidingTextTabStrip.removeTabs();
|
||||||
if (hasMedia[0] != 0 || hasMedia[1] == 0 && hasMedia[2] == 0 && hasMedia[3] == 0 && hasMedia[4] == 0) {
|
if (hasMedia[0] != 0 || hasMedia[1] == 0 && hasMedia[2] == 0 && hasMedia[3] == 0 && hasMedia[4] == 0) {
|
||||||
if (!scrollSlidingTextTabStrip.hasTab(0)) {
|
if (!scrollSlidingTextTabStrip.hasTab(0)) {
|
||||||
scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("SharedMediaTab", R.string.SharedMediaTab));
|
scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("SharedMediaTab2", R.string.SharedMediaTab2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasMedia[1] != 0) {
|
if (hasMedia[1] != 0) {
|
||||||
if (!scrollSlidingTextTabStrip.hasTab(1)) {
|
if (!scrollSlidingTextTabStrip.hasTab(1)) {
|
||||||
scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("SharedFilesTab", R.string.SharedFilesTab));
|
scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("SharedFilesTab2", R.string.SharedFilesTab2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((int) dialog_id != 0) {
|
if ((int) dialog_id != 0) {
|
||||||
if (hasMedia[3] != 0) {
|
if (hasMedia[3] != 0) {
|
||||||
if (!scrollSlidingTextTabStrip.hasTab(3)) {
|
if (!scrollSlidingTextTabStrip.hasTab(3)) {
|
||||||
scrollSlidingTextTabStrip.addTextTab(3, LocaleController.getString("SharedLinksTab", R.string.SharedLinksTab));
|
scrollSlidingTextTabStrip.addTextTab(3, LocaleController.getString("SharedLinksTab2", R.string.SharedLinksTab2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasMedia[4] != 0) {
|
if (hasMedia[4] != 0) {
|
||||||
if (!scrollSlidingTextTabStrip.hasTab(4)) {
|
if (!scrollSlidingTextTabStrip.hasTab(4)) {
|
||||||
scrollSlidingTextTabStrip.addTextTab(4, LocaleController.getString("SharedMusicTab", R.string.SharedMusicTab));
|
scrollSlidingTextTabStrip.addTextTab(4, LocaleController.getString("SharedMusicTab2", R.string.SharedMusicTab2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -1796,14 +1721,14 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
if (currentEncryptedChat != null && AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 46) {
|
if (currentEncryptedChat != null && AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 46) {
|
||||||
if (hasMedia[4] != 0) {
|
if (hasMedia[4] != 0) {
|
||||||
if (!scrollSlidingTextTabStrip.hasTab(4)) {
|
if (!scrollSlidingTextTabStrip.hasTab(4)) {
|
||||||
scrollSlidingTextTabStrip.addTextTab(4, LocaleController.getString("SharedMusicTab", R.string.SharedMusicTab));
|
scrollSlidingTextTabStrip.addTextTab(4, LocaleController.getString("SharedMusicTab2", R.string.SharedMusicTab2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasMedia[2] != 0) {
|
if (hasMedia[2] != 0) {
|
||||||
if (!scrollSlidingTextTabStrip.hasTab(2)) {
|
if (!scrollSlidingTextTabStrip.hasTab(2)) {
|
||||||
scrollSlidingTextTabStrip.addTextTab(2, LocaleController.getString("SharedVoiceTab", R.string.SharedVoiceTab));
|
scrollSlidingTextTabStrip.addTextTab(2, LocaleController.getString("SharedVoiceTab2", R.string.SharedVoiceTab2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2177,14 +2102,14 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
columnsCount = 4;
|
columnsCount = 3;
|
||||||
mediaPages[num].emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128));
|
mediaPages[num].emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128));
|
||||||
} else {
|
} else {
|
||||||
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
|
||||||
columnsCount = 6;
|
columnsCount = 6;
|
||||||
mediaPages[num].emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), 0);
|
mediaPages[num].emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), 0);
|
||||||
} else {
|
} else {
|
||||||
columnsCount = 4;
|
columnsCount = 3;
|
||||||
mediaPages[num].emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128));
|
mediaPages[num].emptyTextView.setPadding(AndroidUtilities.dp(40), 0, AndroidUtilities.dp(40), AndroidUtilities.dp(128));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2766,14 +2691,14 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
|
||||||
} else {
|
} else {
|
||||||
for (int a = 0; a < mediaPages.length; a++) {
|
for (int a = 0; a < mediaPages.length; a++) {
|
||||||
if (mediaPages[a].selectedType == currentType) {
|
if (mediaPages[a].selectedType == currentType) {
|
||||||
if (getItemCount() != 0) {
|
//if (getItemCount() != 0) {
|
||||||
mediaPages[a].listView.setEmptyView(mediaPages[a].emptyView);
|
mediaPages[a].listView.setEmptyView(mediaPages[a].emptyView);
|
||||||
mediaPages[a].progressView.setVisibility(View.GONE);
|
mediaPages[a].progressView.setVisibility(View.GONE);
|
||||||
} else {
|
/*} else {
|
||||||
mediaPages[a].listView.setEmptyView(null);
|
mediaPages[a].listView.setEmptyView(null);
|
||||||
mediaPages[a].emptyView.setVisibility(View.GONE);
|
mediaPages[a].emptyView.setVisibility(View.GONE);
|
||||||
mediaPages[a].progressView.setVisibility(View.VISIBLE);
|
mediaPages[a].progressView.setVisibility(View.VISIBLE);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -527,7 +527,7 @@ public class NotificationsCustomSettingsActivity extends BaseFragment {
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
|
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
|
||||||
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -185,6 +185,8 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen
|
||||||
private boolean shouldNavigateBack;
|
private boolean shouldNavigateBack;
|
||||||
private ScrollView scrollView;
|
private ScrollView scrollView;
|
||||||
|
|
||||||
|
private boolean swipeBackEnabled = true;
|
||||||
|
|
||||||
private TextView textView;
|
private TextView textView;
|
||||||
private HeaderCell[] headerCell = new HeaderCell[3];
|
private HeaderCell[] headerCell = new HeaderCell[3];
|
||||||
private ArrayList<View> dividers = new ArrayList<>();
|
private ArrayList<View> dividers = new ArrayList<>();
|
||||||
|
@ -3043,13 +3045,19 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen
|
||||||
AndroidUtilities.runOnUIThread(() -> {
|
AndroidUtilities.runOnUIThread(() -> {
|
||||||
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.paymentFinished);
|
NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.paymentFinished);
|
||||||
setDonePressed(false);
|
setDonePressed(false);
|
||||||
webView.setVisibility(View.VISIBLE);
|
|
||||||
webviewLoading = true;
|
webviewLoading = true;
|
||||||
showEditDoneProgress(true, true);
|
showEditDoneProgress(true, true);
|
||||||
|
if (progressView != null) {
|
||||||
progressView.setVisibility(View.VISIBLE);
|
progressView.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
if (doneItem != null) {
|
||||||
doneItem.setEnabled(false);
|
doneItem.setEnabled(false);
|
||||||
doneItem.getContentView().setVisibility(View.INVISIBLE);
|
doneItem.getContentView().setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
if (webView != null) {
|
||||||
|
webView.setVisibility(View.VISIBLE);
|
||||||
webView.loadUrl(webViewUrl = ((TLRPC.TL_payments_paymentVerificationNeeded) response).url);
|
webView.loadUrl(webViewUrl = ((TLRPC.TL_payments_paymentVerificationNeeded) response).url);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3085,6 +3093,11 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return swipeBackEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
private void checkPassword() {
|
private void checkPassword() {
|
||||||
if (UserConfig.getInstance(currentAccount).tmpPassword != null) {
|
if (UserConfig.getInstance(currentAccount).tmpPassword != null) {
|
||||||
if (UserConfig.getInstance(currentAccount).tmpPassword.valid_until < ConnectionsManager.getInstance(currentAccount).getCurrentTime() + 60) {
|
if (UserConfig.getInstance(currentAccount).tmpPassword.valid_until < ConnectionsManager.getInstance(currentAccount).getCurrentTime() + 60) {
|
||||||
|
|
|
@ -13,8 +13,11 @@ import android.animation.AnimatorListenerAdapter;
|
||||||
import android.animation.AnimatorSet;
|
import android.animation.AnimatorSet;
|
||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Paint;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
@ -33,6 +36,7 @@ import org.telegram.messenger.LocaleController;
|
||||||
import org.telegram.messenger.LocationController;
|
import org.telegram.messenger.LocationController;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.tgnet.TLRPC;
|
import org.telegram.tgnet.TLRPC;
|
||||||
import org.telegram.ui.ActionBar.ActionBar;
|
import org.telegram.ui.ActionBar.ActionBar;
|
||||||
import org.telegram.ui.ActionBar.AlertDialog;
|
import org.telegram.ui.ActionBar.AlertDialog;
|
||||||
|
@ -61,6 +65,10 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
private RecyclerListView listView;
|
private RecyclerListView listView;
|
||||||
private ActionIntroActivity groupCreateActivity;
|
private ActionIntroActivity groupCreateActivity;
|
||||||
private UndoView undoView;
|
private UndoView undoView;
|
||||||
|
private LinearLayoutManager layoutManager;
|
||||||
|
|
||||||
|
private View actionBarBackground;
|
||||||
|
private AnimatorSet actionBarAnimator;
|
||||||
|
|
||||||
private String currentGroupCreateAddress;
|
private String currentGroupCreateAddress;
|
||||||
private String currentGroupCreateDisplayAddress;
|
private String currentGroupCreateDisplayAddress;
|
||||||
|
@ -70,6 +78,8 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
private boolean canCreateGroup;
|
private boolean canCreateGroup;
|
||||||
private AlertDialog loadingDialog;
|
private AlertDialog loadingDialog;
|
||||||
|
|
||||||
|
private boolean expanded;
|
||||||
|
|
||||||
private Runnable checkExpiredRunnable;
|
private Runnable checkExpiredRunnable;
|
||||||
private int reqId;
|
private int reqId;
|
||||||
|
|
||||||
|
@ -88,7 +98,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (shortPollRunnable != null) {
|
if (shortPollRunnable != null) {
|
||||||
sendRequest(true);
|
sendRequest(true, 0);
|
||||||
AndroidUtilities.cancelRunOnUIThread(shortPollRunnable);
|
AndroidUtilities.cancelRunOnUIThread(shortPollRunnable);
|
||||||
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
@ -99,12 +109,15 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
private ArrayList<TLRPC.TL_peerLocated> chats;
|
private ArrayList<TLRPC.TL_peerLocated> chats;
|
||||||
|
|
||||||
private int currentChatId;
|
private int currentChatId;
|
||||||
|
private boolean showingMe;
|
||||||
|
|
||||||
private int helpRow;
|
private int helpRow;
|
||||||
|
private int helpSectionRow;
|
||||||
private int usersHeaderRow;
|
private int usersHeaderRow;
|
||||||
|
private int showMeRow;
|
||||||
private int usersStartRow;
|
private int usersStartRow;
|
||||||
private int usersEndRow;
|
private int usersEndRow;
|
||||||
private int usersEmptyRow;
|
private int showMoreRow;
|
||||||
private int usersSectionRow;
|
private int usersSectionRow;
|
||||||
private int chatsHeaderRow;
|
private int chatsHeaderRow;
|
||||||
private int chatsStartRow;
|
private int chatsStartRow;
|
||||||
|
@ -125,19 +138,29 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
rowCount = 0;
|
rowCount = 0;
|
||||||
usersStartRow = -1;
|
usersStartRow = -1;
|
||||||
usersEndRow = -1;
|
usersEndRow = -1;
|
||||||
usersEmptyRow = -1;
|
showMoreRow = -1;
|
||||||
chatsStartRow = -1;
|
chatsStartRow = -1;
|
||||||
chatsEndRow = -1;
|
chatsEndRow = -1;
|
||||||
chatsCreateRow = -1;
|
chatsCreateRow = -1;
|
||||||
|
showMeRow = -1;
|
||||||
|
|
||||||
helpRow = rowCount++;
|
helpRow = rowCount++;
|
||||||
|
helpSectionRow = rowCount++;
|
||||||
usersHeaderRow = rowCount++;
|
usersHeaderRow = rowCount++;
|
||||||
if (users.isEmpty()) {
|
showMeRow = rowCount++;
|
||||||
usersEmptyRow = rowCount++;
|
if (!users.isEmpty()) {
|
||||||
|
int count;
|
||||||
|
if (expanded) {
|
||||||
|
count = users.size();
|
||||||
} else {
|
} else {
|
||||||
|
count = Math.min(5, users.size());
|
||||||
|
}
|
||||||
usersStartRow = rowCount;
|
usersStartRow = rowCount;
|
||||||
rowCount += users.size();
|
rowCount += count;
|
||||||
usersEndRow = rowCount;
|
usersEndRow = rowCount;
|
||||||
|
if (count != users.size()) {
|
||||||
|
showMoreRow = rowCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
usersSectionRow = rowCount++;
|
usersSectionRow = rowCount++;
|
||||||
|
|
||||||
|
@ -162,7 +185,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
getNotificationCenter().addObserver(this, NotificationCenter.newPeopleNearbyAvailable);
|
getNotificationCenter().addObserver(this, NotificationCenter.newPeopleNearbyAvailable);
|
||||||
getNotificationCenter().addObserver(this, NotificationCenter.needDeleteDialog);
|
getNotificationCenter().addObserver(this, NotificationCenter.needDeleteDialog);
|
||||||
checkCanCreateGroup();
|
checkCanCreateGroup();
|
||||||
sendRequest(false);
|
sendRequest(false, 0);
|
||||||
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
AndroidUtilities.runOnUIThread(shortPollRunnable, SHORT_POLL_TIMEOUT);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -193,8 +216,18 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
@Override
|
@Override
|
||||||
public View createView(Context context) {
|
public View createView(Context context) {
|
||||||
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
||||||
actionBar.setAllowOverlayTitle(true);
|
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.setTitle(LocaleController.getString("PeopleNearby", R.string.PeopleNearby));
|
||||||
|
actionBar.getTitleTextView().setAlpha(0.0f);
|
||||||
|
if (!AndroidUtilities.isTablet()) {
|
||||||
|
actionBar.showActionModeTop();
|
||||||
|
}
|
||||||
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
|
actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(int id) {
|
public void onItemClick(int id) {
|
||||||
|
@ -204,24 +237,45 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
fragmentView = new FrameLayout(context);
|
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.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray));
|
||||||
fragmentView.setTag(Theme.key_windowBackgroundGray);
|
fragmentView.setTag(Theme.key_windowBackgroundGray);
|
||||||
FrameLayout frameLayout = (FrameLayout) fragmentView;
|
FrameLayout frameLayout = (FrameLayout) fragmentView;
|
||||||
|
|
||||||
listView = new RecyclerListView(context);
|
listView = new RecyclerListView(context);
|
||||||
listView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
|
listView.setGlowColor(0);
|
||||||
|
listView.setLayoutManager(layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
|
||||||
listView.setAdapter(listViewAdapter = new ListAdapter(context));
|
listView.setAdapter(listViewAdapter = new ListAdapter(context));
|
||||||
listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
|
listView.setVerticalScrollbarPosition(LocaleController.isRTL ? RecyclerListView.SCROLLBAR_POSITION_LEFT : RecyclerListView.SCROLLBAR_POSITION_RIGHT);
|
||||||
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
||||||
|
|
||||||
listView.setOnItemClickListener((view, position) -> {
|
listView.setOnItemClickListener((view, position) -> {
|
||||||
|
if (getParentActivity() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (position >= usersStartRow && position < usersEndRow) {
|
if (position >= usersStartRow && position < usersEndRow) {
|
||||||
|
ManageChatUserCell cell = (ManageChatUserCell) view;
|
||||||
TLRPC.TL_peerLocated peerLocated = users.get(position - usersStartRow);
|
TLRPC.TL_peerLocated peerLocated = users.get(position - usersStartRow);
|
||||||
Bundle args1 = new Bundle();
|
Bundle args1 = new Bundle();
|
||||||
args1.putInt("user_id", peerLocated.peer.user_id);
|
args1.putInt("user_id", peerLocated.peer.user_id);
|
||||||
ChatActivity chatActivity = new ChatActivity(args1);
|
if (cell.hasAvatarSet()) {
|
||||||
presentFragment(chatActivity);
|
args1.putBoolean("expandPhoto", true);
|
||||||
|
}
|
||||||
|
presentFragment(new ProfileActivity(args1));
|
||||||
} else if (position >= chatsStartRow && position < chatsEndRow) {
|
} else if (position >= chatsStartRow && position < chatsEndRow) {
|
||||||
TLRPC.TL_peerLocated peerLocated = chats.get(position - chatsStartRow);
|
TLRPC.TL_peerLocated peerLocated = chats.get(position - chatsStartRow);
|
||||||
Bundle args1 = new Bundle();
|
Bundle args1 = new Bundle();
|
||||||
|
@ -242,8 +296,54 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
openGroupCreate();
|
openGroupCreate();
|
||||||
|
} else if (position == showMeRow) {
|
||||||
|
UserConfig userConfig = getUserConfig();
|
||||||
|
if (showingMe) {
|
||||||
|
userConfig.sharingMyLocationUntil = 0;
|
||||||
|
userConfig.saveConfig(false);
|
||||||
|
sendRequest(false, 2);
|
||||||
|
updateRows();
|
||||||
|
} 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();
|
||||||
|
});
|
||||||
|
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||||
|
showDialog(builder.create());
|
||||||
|
}
|
||||||
|
userConfig.saveConfig(false);
|
||||||
|
} else if (position == showMoreRow) {
|
||||||
|
expanded = true;
|
||||||
|
updateRows();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
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);
|
undoView = new UndoView(context);
|
||||||
frameLayout.addView(undoView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
|
frameLayout.addView(undoView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8));
|
||||||
|
@ -252,6 +352,52 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
return fragmentView;
|
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() {
|
private void openGroupCreate() {
|
||||||
if (!canCreateGroup) {
|
if (!canCreateGroup) {
|
||||||
AlertsCreator.showSimpleAlert(PeopleNearbyActivity.this, LocaleController.getString("YourLocatedChannelsTooMuch", R.string.YourLocatedChannelsTooMuch));
|
AlertsCreator.showSimpleAlert(PeopleNearbyActivity.this, LocaleController.getString("YourLocatedChannelsTooMuch", R.string.YourLocatedChannelsTooMuch));
|
||||||
|
@ -324,7 +470,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
showProgressAnimation.start();
|
showProgressAnimation.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendRequest(boolean shortpoll) {
|
private void sendRequest(boolean shortpoll, int share) {
|
||||||
if (!firstLoaded) {
|
if (!firstLoaded) {
|
||||||
AndroidUtilities.runOnUIThread(showProgressRunnable = () -> {
|
AndroidUtilities.runOnUIThread(showProgressRunnable = () -> {
|
||||||
showLoadingProgress(true);
|
showLoadingProgress(true);
|
||||||
|
@ -342,7 +488,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
if (BuildVars.DEBUG_VERSION) {
|
if (BuildVars.DEBUG_VERSION) {
|
||||||
FileLog.d("located distance = " + distance);
|
FileLog.d("located distance = " + distance);
|
||||||
}
|
}
|
||||||
if ((SystemClock.elapsedRealtime() - lastLoadedLocationTime) >= 3000L && lastLoadedLocation.distanceTo(location) > 20) {
|
if (share != 0 || (SystemClock.elapsedRealtime() - lastLoadedLocationTime) >= 3000L && lastLoadedLocation.distanceTo(location) > 20) {
|
||||||
if (reqId != 0) {
|
if (reqId != 0) {
|
||||||
getConnectionsManager().cancelRequest(reqId, true);
|
getConnectionsManager().cancelRequest(reqId, true);
|
||||||
reqId = 0;
|
reqId = 0;
|
||||||
|
@ -361,6 +507,10 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
req.geo_point = new TLRPC.TL_inputGeoPoint();
|
req.geo_point = new TLRPC.TL_inputGeoPoint();
|
||||||
req.geo_point.lat = location.getLatitude();
|
req.geo_point.lat = location.getLatitude();
|
||||||
req.geo_point._long = location.getLongitude();
|
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 = getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> {
|
||||||
reqId = 0;
|
reqId = 0;
|
||||||
if (showProgressRunnable != null) {
|
if (showProgressRunnable != null) {
|
||||||
|
@ -368,26 +518,50 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
showProgressRunnable = null;
|
showProgressRunnable = null;
|
||||||
}
|
}
|
||||||
showLoadingProgress(false);
|
showLoadingProgress(false);
|
||||||
if (response != null) {
|
if (response != null && share != 2) {
|
||||||
TLRPC.Updates updates = (TLRPC.TL_updates) response;
|
TLRPC.Updates updates = (TLRPC.TL_updates) response;
|
||||||
getMessagesController().putUsers(updates.users, false);
|
getMessagesController().putUsers(updates.users, false);
|
||||||
getMessagesController().putChats(updates.chats, false);
|
getMessagesController().putChats(updates.chats, false);
|
||||||
users.clear();
|
users.clear();
|
||||||
chats.clear();
|
chats.clear();
|
||||||
|
boolean hasSelf = false;
|
||||||
|
UserConfig userConfig = getUserConfig();
|
||||||
|
boolean saveConfig = false;
|
||||||
|
if (userConfig.sharingMyLocationUntil != 0) {
|
||||||
|
userConfig.lastMyLocationShareTime = (int) (System.currentTimeMillis() / 1000);
|
||||||
|
saveConfig = true;
|
||||||
|
}
|
||||||
for (int a = 0, N = updates.updates.size(); a < N; a++) {
|
for (int a = 0, N = updates.updates.size(); a < N; a++) {
|
||||||
TLRPC.Update baseUpdate = updates.updates.get(a);
|
TLRPC.Update baseUpdate = updates.updates.get(a);
|
||||||
if (baseUpdate instanceof TLRPC.TL_updatePeerLocated) {
|
if (baseUpdate instanceof TLRPC.TL_updatePeerLocated) {
|
||||||
TLRPC.TL_updatePeerLocated update = (TLRPC.TL_updatePeerLocated) baseUpdate;
|
TLRPC.TL_updatePeerLocated update = (TLRPC.TL_updatePeerLocated) baseUpdate;
|
||||||
for (int b = 0, N2 = update.peers.size(); b < N2; b++) {
|
for (int b = 0, N2 = update.peers.size(); b < N2; b++) {
|
||||||
TLRPC.TL_peerLocated peerLocated = update.peers.get(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) {
|
if (peerLocated.peer instanceof TLRPC.TL_peerUser) {
|
||||||
users.add(peerLocated);
|
users.add(peerLocated);
|
||||||
} else {
|
} else {
|
||||||
chats.add(peerLocated);
|
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;
|
||||||
|
}
|
||||||
|
if (saveConfig) {
|
||||||
|
userConfig.saveConfig(false);
|
||||||
|
}
|
||||||
checkForExpiredLocations(true);
|
checkForExpiredLocations(true);
|
||||||
updateRows();
|
updateRows();
|
||||||
}
|
}
|
||||||
|
@ -453,11 +627,13 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
@Override
|
@Override
|
||||||
public void didReceivedNotification(int id, int account, Object... args) {
|
public void didReceivedNotification(int id, int account, Object... args) {
|
||||||
if (id == NotificationCenter.newLocationAvailable) {
|
if (id == NotificationCenter.newLocationAvailable) {
|
||||||
sendRequest(false);
|
sendRequest(false, 0);
|
||||||
} else if (id == NotificationCenter.newPeopleNearbyAvailable) {
|
} else if (id == NotificationCenter.newPeopleNearbyAvailable) {
|
||||||
TLRPC.TL_updatePeerLocated update = (TLRPC.TL_updatePeerLocated) args[0];
|
TLRPC.TL_updatePeerLocated update = (TLRPC.TL_updatePeerLocated) args[0];
|
||||||
for (int b = 0, N2 = update.peers.size(); b < N2; b++) {
|
for (int b = 0, N2 = update.peers.size(); b < N2; b++) {
|
||||||
TLRPC.TL_peerLocated peerLocated = update.peers.get(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;
|
boolean found = false;
|
||||||
ArrayList<TLRPC.TL_peerLocated> arrayList;
|
ArrayList<TLRPC.TL_peerLocated> arrayList;
|
||||||
if (peerLocated.peer instanceof TLRPC.TL_peerUser) {
|
if (peerLocated.peer instanceof TLRPC.TL_peerUser) {
|
||||||
|
@ -476,6 +652,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
arrayList.add(peerLocated);
|
arrayList.add(peerLocated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
checkForExpiredLocations(true);
|
checkForExpiredLocations(true);
|
||||||
updateRows();
|
updateRows();
|
||||||
} else if (id == NotificationCenter.needDeleteDialog) {
|
} else if (id == NotificationCenter.needDeleteDialog) {
|
||||||
|
@ -559,26 +736,37 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("FieldCanBeLocal")
|
||||||
public class HintInnerCell extends FrameLayout {
|
public class HintInnerCell extends FrameLayout {
|
||||||
|
|
||||||
private ImageView imageView;
|
private ImageView imageView;
|
||||||
|
private TextView titleTextView;
|
||||||
private TextView messageTextView;
|
private TextView messageTextView;
|
||||||
|
|
||||||
public HintInnerCell(Context context) {
|
public HintInnerCell(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
|
||||||
|
int top = (int) ((ActionBar.getCurrentActionBarHeight() + (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0)) / AndroidUtilities.density) - 44;
|
||||||
|
|
||||||
imageView = new ImageView(context);
|
imageView = new ImageView(context);
|
||||||
imageView.setBackgroundDrawable(Theme.createCircleDrawable(AndroidUtilities.dp(74), Theme.getColor(Theme.key_chats_archiveBackground)));
|
imageView.setBackgroundDrawable(Theme.createCircleDrawable(AndroidUtilities.dp(74), Theme.getColor(Theme.key_chats_archiveBackground)));
|
||||||
imageView.setImageDrawable(new ShareLocationDrawable(context, 2));
|
imageView.setImageDrawable(new ShareLocationDrawable(context, 2));
|
||||||
imageView.setScaleType(ImageView.ScaleType.CENTER);
|
imageView.setScaleType(ImageView.ScaleType.CENTER);
|
||||||
addView(imageView, LayoutHelper.createFrame(74, 74, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 27, 0, 0));
|
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 = new TextView(context);
|
||||||
messageTextView.setTextColor(Theme.getColor(Theme.key_chats_message));
|
messageTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText));
|
||||||
messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
|
messageTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
|
||||||
messageTextView.setGravity(Gravity.CENTER);
|
messageTextView.setGravity(Gravity.CENTER);
|
||||||
messageTextView.setText(AndroidUtilities.replaceTags(LocaleController.formatString("PeopleNearbyInfo", R.string.PeopleNearbyInfo)));
|
messageTextView.setText(AndroidUtilities.replaceTags(LocaleController.formatString("PeopleNearbyInfo2", R.string.PeopleNearbyInfo2)));
|
||||||
addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 52, 125, 52, 27));
|
addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 40, top + 161, 40, 27));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,7 +798,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
view = new ShadowSectionCell(mContext, 22);
|
view = new ShadowSectionCell(mContext);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
view = new ManageChatTextCell(mContext);
|
view = new ManageChatTextCell(mContext);
|
||||||
|
@ -637,6 +825,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
case 5:
|
case 5:
|
||||||
default:
|
default:
|
||||||
view = new HintInnerCell(mContext);
|
view = new HintInnerCell(mContext);
|
||||||
|
view.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
view.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
|
@ -666,7 +855,7 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
TLRPC.TL_peerLocated peerLocated = users.get(index);
|
TLRPC.TL_peerLocated peerLocated = users.get(index);
|
||||||
TLRPC.User user = getMessagesController().getUser(peerLocated.peer.user_id);
|
TLRPC.User user = getMessagesController().getUser(peerLocated.peer.user_id);
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
userCell.setData(user, null, formatDistance(peerLocated), index != users.size() - 1);
|
userCell.setData(user, null, formatDistance(peerLocated), showMoreRow != -1 || position != usersEndRow - 1);
|
||||||
}
|
}
|
||||||
} else if (position >= chatsStartRow && position < chatsEndRow) {
|
} else if (position >= chatsStartRow && position < chatsEndRow) {
|
||||||
int index = position - chatsStartRow;
|
int index = position - chatsStartRow;
|
||||||
|
@ -693,6 +882,8 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
privacyCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow));
|
privacyCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider, Theme.key_windowBackgroundGrayShadow));
|
||||||
} else if (position == chatsSectionRow) {
|
} else if (position == chatsSectionRow) {
|
||||||
privacyCell.setBackgroundDrawable(Theme.getThemedDrawable(mContext, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow));
|
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;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -700,6 +891,15 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton);
|
actionCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton);
|
||||||
if (position == chatsCreateRow) {
|
if (position == chatsCreateRow) {
|
||||||
actionCell.setText(LocaleController.getString("NearbyCreateGroup", R.string.NearbyCreateGroup), null, R.drawable.groups_create, chatsStartRow != -1);
|
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, chatsStartRow != -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;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -710,12 +910,6 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
headerCell.setText(LocaleController.getString("ChatsNearbyHeader", R.string.ChatsNearbyHeader));
|
headerCell.setText(LocaleController.getString("ChatsNearbyHeader", R.string.ChatsNearbyHeader));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
TextView textView = (TextView) holder.itemView;
|
|
||||||
if (position == usersEmptyRow) {
|
|
||||||
textView.setText(AndroidUtilities.replaceTags(LocaleController.getString("PeopleNearbyEmpty", R.string.PeopleNearbyEmpty)));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -730,14 +924,12 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
public int getItemViewType(int position) {
|
public int getItemViewType(int position) {
|
||||||
if (position == helpRow) {
|
if (position == helpRow) {
|
||||||
return 5;
|
return 5;
|
||||||
} else if (position == chatsCreateRow) {
|
} else if (position == chatsCreateRow || position == showMeRow || position == showMoreRow) {
|
||||||
return 2;
|
return 2;
|
||||||
} else if (position == usersHeaderRow || position == chatsHeaderRow) {
|
} else if (position == usersHeaderRow || position == chatsHeaderRow) {
|
||||||
return 3;
|
return 3;
|
||||||
} else if (position == usersSectionRow || position == chatsSectionRow) {
|
} else if (position == usersSectionRow || position == chatsSectionRow || position == helpSectionRow) {
|
||||||
return 1;
|
return 1;
|
||||||
} else if (position == usersEmptyRow) {
|
|
||||||
return 4;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -758,15 +950,14 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
};
|
};
|
||||||
|
|
||||||
return new ThemeDescription[]{
|
return new ThemeDescription[]{
|
||||||
new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{ManageChatUserCell.class, ManageChatTextCell.class, HeaderCell.class, TextView.class}, null, null, null, Theme.key_windowBackgroundWhite),
|
new ThemeDescription(listView, ThemeDescription.FLAG_CELLBACKGROUNDCOLOR, new Class[]{ManageChatUserCell.class, ManageChatTextCell.class, HeaderCell.class, TextView.class, HintInnerCell.class}, null, null, null, Theme.key_windowBackgroundWhite),
|
||||||
new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND | ThemeDescription.FLAG_CHECKTAG, null, null, null, null, Theme.key_windowBackgroundGray),
|
new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND | ThemeDescription.FLAG_CHECKTAG, null, null, null, null, Theme.key_windowBackgroundGray),
|
||||||
new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND | ThemeDescription.FLAG_CHECKTAG, null, null, null, null, Theme.key_windowBackgroundWhite),
|
new ThemeDescription(fragmentView, ThemeDescription.FLAG_BACKGROUND | ThemeDescription.FLAG_CHECKTAG, null, null, null, null, Theme.key_windowBackgroundWhite),
|
||||||
|
|
||||||
new ThemeDescription(actionBar, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_actionBarDefault),
|
new ThemeDescription(actionBarBackground, ThemeDescription.FLAG_BACKGROUND, null, null, null, null, Theme.key_windowBackgroundWhite),
|
||||||
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_windowBackgroundWhiteBlackText),
|
||||||
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_windowBackgroundWhiteBlackText),
|
||||||
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_listSelector),
|
||||||
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, ThemeDescription.FLAG_SELECTOR, null, null, null, null, Theme.key_listSelector),
|
||||||
|
|
||||||
|
@ -796,6 +987,8 @@ public class PeopleNearbyActivity extends BaseFragment implements NotificationCe
|
||||||
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayIcon),
|
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayIcon),
|
||||||
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueButton),
|
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueButton),
|
||||||
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueIcon),
|
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteBlueIcon),
|
||||||
|
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"imageView"}, null, null, null, Theme.key_windowBackgroundWhiteRedText5),
|
||||||
|
new ThemeDescription(listView, ThemeDescription.FLAG_CHECKTAG, new Class[]{ManageChatTextCell.class}, new String[]{"textView"}, null, null, null, Theme.key_windowBackgroundWhiteRedText5),
|
||||||
|
|
||||||
new ThemeDescription(undoView, ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_undo_background),
|
new ThemeDescription(undoView, ThemeDescription.FLAG_BACKGROUNDFILTER, null, null, null, null, Theme.key_undo_background),
|
||||||
new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"undoImageView"}, null, null, null, Theme.key_undo_cancelColor),
|
new ThemeDescription(undoView, 0, new Class[]{UndoView.class}, new String[]{"undoImageView"}, null, null, null, Theme.key_undo_cancelColor),
|
||||||
|
|
|
@ -43,6 +43,7 @@ import org.telegram.messenger.NotificationCenter;
|
||||||
import org.telegram.messenger.ApplicationLoader;
|
import org.telegram.messenger.ApplicationLoader;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
import org.telegram.messenger.SendMessagesHelper;
|
import org.telegram.messenger.SendMessagesHelper;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.UserObject;
|
import org.telegram.messenger.UserObject;
|
||||||
import org.telegram.tgnet.TLRPC;
|
import org.telegram.tgnet.TLRPC;
|
||||||
|
@ -180,7 +181,7 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati
|
||||||
menuItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
|
menuItem.setContentDescription(LocaleController.getString("AccDescrMoreOptions", R.string.AccDescrMoreOptions));
|
||||||
menuItem.addSubItem(1, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp));
|
menuItem.addSubItem(1, R.drawable.msg_openin, LocaleController.getString("OpenInExternalApp", R.string.OpenInExternalApp));
|
||||||
|
|
||||||
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private int lastNotifyWidth;
|
private int lastNotifyWidth;
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
@ -192,7 +193,7 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati
|
||||||
|
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow) {
|
if (!AndroidUtilities.isInMultiwindow) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
|
@ -236,7 +237,8 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati
|
||||||
}
|
}
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -290,7 +292,7 @@ public class PhotoAlbumPickerActivity extends BaseFragment implements Notificati
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
|
|
@ -372,7 +372,6 @@ public class PhotoCropActivity extends BaseFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onFragmentCreate() {
|
public boolean onFragmentCreate() {
|
||||||
swipeBackEnabled = false;
|
|
||||||
if (imageToCrop == null) {
|
if (imageToCrop == null) {
|
||||||
String photoPath = getArguments().getString("photoPath");
|
String photoPath = getArguments().getString("photoPath");
|
||||||
Uri photoUri = getArguments().getParcelable("photoUri");
|
Uri photoUri = getArguments().getParcelable("photoUri");
|
||||||
|
@ -454,6 +453,11 @@ public class PhotoCropActivity extends BaseFragment {
|
||||||
return fragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void setDelegate(PhotoEditActivityDelegate delegate) {
|
public void setDelegate(PhotoEditActivityDelegate delegate) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ import org.telegram.messenger.MediaController;
|
||||||
import org.telegram.messenger.MessagesController;
|
import org.telegram.messenger.MessagesController;
|
||||||
import org.telegram.messenger.MessagesStorage;
|
import org.telegram.messenger.MessagesStorage;
|
||||||
import org.telegram.messenger.NotificationCenter;
|
import org.telegram.messenger.NotificationCenter;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.messenger.UserConfig;
|
import org.telegram.messenger.UserConfig;
|
||||||
import org.telegram.messenger.UserObject;
|
import org.telegram.messenger.UserObject;
|
||||||
import org.telegram.messenger.VideoEditedInfo;
|
import org.telegram.messenger.VideoEditedInfo;
|
||||||
|
@ -543,7 +544,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private int lastNotifyWidth;
|
private int lastNotifyWidth;
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
@ -585,18 +586,26 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
|
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
|
|
||||||
int keyboardSize = getKeyboardHeight();
|
int kbHeight = getKeyboardHeight();
|
||||||
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : kbHeight;
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow && commentTextView != null && frameLayout2.getParent() == this) {
|
if (!AndroidUtilities.isInMultiwindow && commentTextView != null && frameLayout2.getParent() == this) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
|
heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
|
||||||
}
|
}
|
||||||
} else if (commentTextView != null) {
|
}
|
||||||
|
if (kbHeight > AndroidUtilities.dp(20) && commentTextView != null) {
|
||||||
ignoreLayout = true;
|
ignoreLayout = true;
|
||||||
commentTextView.hideEmojiView();
|
commentTextView.hideEmojiView();
|
||||||
ignoreLayout = false;
|
ignoreLayout = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SharedConfig.smoothKeyboard && commentTextView != null && commentTextView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(getCurrentPanTranslationY());
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
emptyView.setTranslationY(0);
|
||||||
|
}
|
||||||
|
|
||||||
int childCount = getChildCount();
|
int childCount = getChildCount();
|
||||||
for (int i = 0; i < childCount; i++) {
|
for (int i = 0; i < childCount; i++) {
|
||||||
View child = getChildAt(i);
|
View child = getChildAt(i);
|
||||||
|
@ -632,7 +641,8 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
}
|
}
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = commentTextView != null && frameLayout2.getParent() == this && getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = commentTextView != null && frameLayout2.getParent() == this && keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -686,7 +696,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
@ -866,7 +876,6 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
}
|
}
|
||||||
sizeNotifierFrameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, selectPhotoType != 0 ? 0 : 48));
|
sizeNotifierFrameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.LEFT | Gravity.TOP, 0, 0, 0, selectPhotoType != 0 ? 0 : 48));
|
||||||
|
|
||||||
if (selectedAlbum == null) {
|
|
||||||
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||||
|
@ -877,6 +886,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
if (selectedAlbum == null) {
|
||||||
int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
|
int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
|
||||||
int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1;
|
int visibleItemCount = firstVisibleItem == RecyclerView.NO_POSITION ? 0 : Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1;
|
||||||
if (visibleItemCount > 0) {
|
if (visibleItemCount > 0) {
|
||||||
|
@ -888,8 +898,10 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (selectedAlbum == null) {
|
||||||
updateSearchInterface();
|
updateSearchInterface();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1108,6 +1120,21 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
return fragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
if (listView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (commentTextView.isPopupShowing()) {
|
||||||
|
fragmentView.setTranslationY(y);
|
||||||
|
listView.setTranslationY(0);
|
||||||
|
emptyView.setTranslationY(0);
|
||||||
|
} else {
|
||||||
|
listView.setTranslationY(y);
|
||||||
|
emptyView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setLayoutViews(FrameLayout f2, FrameLayout button, View count, View s, EditTextEmoji emoji) {
|
public void setLayoutViews(FrameLayout f2, FrameLayout button, View count, View s, EditTextEmoji emoji) {
|
||||||
frameLayout2 = f2;
|
frameLayout2 = f2;
|
||||||
writeButtonContainer = button;
|
writeButtonContainer = button;
|
||||||
|
@ -1173,7 +1200,7 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen
|
||||||
initialSearchString = null;
|
initialSearchString = null;
|
||||||
processSearch(searchItem.getSearchField());
|
processSearch(searchItem.getSearchField());
|
||||||
}
|
}
|
||||||
getParentActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
getParentActivity().getWindow().setSoftInputMode(SharedConfig.smoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import android.widget.TextView;
|
||||||
import org.telegram.messenger.AndroidUtilities;
|
import org.telegram.messenger.AndroidUtilities;
|
||||||
import org.telegram.messenger.LocaleController;
|
import org.telegram.messenger.LocaleController;
|
||||||
import org.telegram.messenger.R;
|
import org.telegram.messenger.R;
|
||||||
|
import org.telegram.messenger.SharedConfig;
|
||||||
import org.telegram.ui.ActionBar.ActionBar;
|
import org.telegram.ui.ActionBar.ActionBar;
|
||||||
import org.telegram.ui.ActionBar.ActionBarMenu;
|
import org.telegram.ui.ActionBar.ActionBarMenu;
|
||||||
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
import org.telegram.ui.ActionBar.ActionBarMenuItem;
|
||||||
|
@ -66,6 +67,8 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
private int selectPhotoType;
|
private int selectPhotoType;
|
||||||
private ChatActivity chatActivity;
|
private ChatActivity chatActivity;
|
||||||
|
|
||||||
|
private boolean swipeBackEnabled = true;
|
||||||
|
|
||||||
private final static int search_button = 0;
|
private final static int search_button = 0;
|
||||||
|
|
||||||
private Paint backgroundPaint = new Paint();
|
private Paint backgroundPaint = new Paint();
|
||||||
|
@ -193,7 +196,7 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
maximumVelocity = configuration.getScaledMaximumFlingVelocity();
|
maximumVelocity = configuration.getScaledMaximumFlingVelocity();
|
||||||
|
|
||||||
SizeNotifierFrameLayout sizeNotifierFrameLayout;
|
SizeNotifierFrameLayout sizeNotifierFrameLayout;
|
||||||
fragmentView = sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context) {
|
fragmentView = sizeNotifierFrameLayout = new SizeNotifierFrameLayout(context, SharedConfig.smoothKeyboard) {
|
||||||
|
|
||||||
private int startedTrackingPointerId;
|
private int startedTrackingPointerId;
|
||||||
private boolean startedTracking;
|
private boolean startedTracking;
|
||||||
|
@ -239,7 +242,7 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
setMeasuredDimension(widthSize, heightSize);
|
setMeasuredDimension(widthSize, heightSize);
|
||||||
|
|
||||||
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
measureChildWithMargins(actionBar, widthMeasureSpec, 0, heightMeasureSpec, 0);
|
||||||
int keyboardSize = getKeyboardHeight();
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
if (keyboardSize <= AndroidUtilities.dp(20)) {
|
||||||
if (!AndroidUtilities.isInMultiwindow) {
|
if (!AndroidUtilities.isInMultiwindow) {
|
||||||
heightSize -= commentTextView.getEmojiPadding();
|
heightSize -= commentTextView.getEmojiPadding();
|
||||||
|
@ -289,7 +292,8 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
protected void onLayout(boolean changed, int l, int t, int r, int b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
|
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
int keyboardSize = SharedConfig.smoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow && !AndroidUtilities.isTablet() ? commentTextView.getEmojiPadding() : 0;
|
||||||
setBottomClip(paddingBottom);
|
setBottomClip(paddingBottom);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
|
@ -343,7 +347,7 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
if (AndroidUtilities.isTablet()) {
|
if (AndroidUtilities.isTablet()) {
|
||||||
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() - child.getMeasuredHeight();
|
||||||
} else {
|
} else {
|
||||||
childTop = getMeasuredHeight() + getKeyboardHeight() - child.getMeasuredHeight();
|
childTop = getMeasuredHeight() + keyboardSize - child.getMeasuredHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
child.layout(childLeft, childTop, childLeft + width, childTop + height);
|
||||||
|
@ -661,7 +665,7 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (searchItem != null) {
|
if (searchItem != null) {
|
||||||
searchItem.openSearch(true);
|
searchItem.openSearch(true);
|
||||||
getParentActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
getParentActivity().getWindow().setSoftInputMode(SharedConfig.smoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||||
}
|
}
|
||||||
if (imagesSearch != null) {
|
if (imagesSearch != null) {
|
||||||
imagesSearch.onResume();
|
imagesSearch.onResume();
|
||||||
|
@ -688,6 +692,11 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return swipeBackEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFragmentDestroy() {
|
public void onFragmentDestroy() {
|
||||||
if (imagesSearch != null) {
|
if (imagesSearch != null) {
|
||||||
|
@ -762,8 +771,8 @@ public class PhotoPickerSearchActivity extends BaseFragment {
|
||||||
if (scrollSlidingTextTabStrip == null) {
|
if (scrollSlidingTextTabStrip == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("ImagesTab", R.string.ImagesTab));
|
scrollSlidingTextTabStrip.addTextTab(0, LocaleController.getString("ImagesTab2", R.string.ImagesTab2));
|
||||||
scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("GifsTab", R.string.GifsTab));
|
scrollSlidingTextTabStrip.addTextTab(1, LocaleController.getString("GifsTab2", R.string.GifsTab2));
|
||||||
scrollSlidingTextTabStrip.setVisibility(View.VISIBLE);
|
scrollSlidingTextTabStrip.setVisibility(View.VISIBLE);
|
||||||
actionBar.setExtraHeight(AndroidUtilities.dp(44));
|
actionBar.setExtraHeight(AndroidUtilities.dp(44));
|
||||||
int id = scrollSlidingTextTabStrip.getCurrentTabId();
|
int id = scrollSlidingTextTabStrip.getCurrentTabId();
|
||||||
|
|
|
@ -36,6 +36,7 @@ import android.graphics.SurfaceTexture;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.media.MediaCodecInfo;
|
import android.media.MediaCodecInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -64,7 +65,6 @@ import android.util.SparseArray;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.ActionMode;
|
import android.view.ActionMode;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.GestureDetector;
|
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.HapticFeedbackConstants;
|
import android.view.HapticFeedbackConstants;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -147,6 +147,7 @@ import org.telegram.ui.Components.ChatAttachAlert;
|
||||||
import org.telegram.ui.Components.CheckBox;
|
import org.telegram.ui.Components.CheckBox;
|
||||||
import org.telegram.ui.Components.ClippingImageView;
|
import org.telegram.ui.Components.ClippingImageView;
|
||||||
import org.telegram.messenger.ImageReceiver;
|
import org.telegram.messenger.ImageReceiver;
|
||||||
|
import org.telegram.ui.Components.GestureDetector2;
|
||||||
import org.telegram.ui.Components.GroupedPhotosListView;
|
import org.telegram.ui.Components.GroupedPhotosListView;
|
||||||
import org.telegram.ui.Components.LayoutHelper;
|
import org.telegram.ui.Components.LayoutHelper;
|
||||||
import org.telegram.ui.Components.NumberPicker;
|
import org.telegram.ui.Components.NumberPicker;
|
||||||
|
@ -179,7 +180,7 @@ import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class PhotoViewer implements NotificationCenter.NotificationCenterDelegate, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
|
public class PhotoViewer implements NotificationCenter.NotificationCenterDelegate, GestureDetector2.OnGestureListener, GestureDetector2.OnDoubleTapListener {
|
||||||
|
|
||||||
private int classGuid;
|
private int classGuid;
|
||||||
private PhotoViewerProvider placeProvider;
|
private PhotoViewerProvider placeProvider;
|
||||||
|
@ -249,6 +250,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
private ImageReceiver sideImage;
|
private ImageReceiver sideImage;
|
||||||
private boolean isCurrentVideo;
|
private boolean isCurrentVideo;
|
||||||
|
|
||||||
|
private GradientDrawable[] pressedDrawable = new GradientDrawable[2];
|
||||||
|
private boolean[] drawPressedDrawable = new boolean[2];
|
||||||
|
private float[] pressedDrawableAlpha = new float[2];
|
||||||
|
|
||||||
|
private boolean useSmoothKeyboard;
|
||||||
|
|
||||||
private VideoForwardDrawable videoForwardDrawable;
|
private VideoForwardDrawable videoForwardDrawable;
|
||||||
|
|
||||||
private AnimatorSet currentListViewAnimation;
|
private AnimatorSet currentListViewAnimation;
|
||||||
|
@ -331,6 +338,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
private long lastBufferedPositionCheck;
|
private long lastBufferedPositionCheck;
|
||||||
private View playButtonAccessibilityOverlay;
|
private View playButtonAccessibilityOverlay;
|
||||||
|
|
||||||
|
private int currentPanTranslationY;
|
||||||
|
|
||||||
public final static int SELECT_TYPE_AVATAR = 1;
|
public final static int SELECT_TYPE_AVATAR = 1;
|
||||||
public final static int SELECT_TYPE_WALLPAPER = 3;
|
public final static int SELECT_TYPE_WALLPAPER = 3;
|
||||||
public final static int SELECT_TYPE_QR = 10;
|
public final static int SELECT_TYPE_QR = 10;
|
||||||
|
@ -632,7 +641,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
private long animationStartTime;
|
private long animationStartTime;
|
||||||
private AnimatorSet imageMoveAnimation;
|
private AnimatorSet imageMoveAnimation;
|
||||||
private AnimatorSet changeModeAnimation;
|
private AnimatorSet changeModeAnimation;
|
||||||
private GestureDetector gestureDetector;
|
private GestureDetector2 gestureDetector;
|
||||||
private boolean doubleTapEnabled;
|
private boolean doubleTapEnabled;
|
||||||
private DecelerateInterpolator interpolator = new DecelerateInterpolator(1.5f);
|
private DecelerateInterpolator interpolator = new DecelerateInterpolator(1.5f);
|
||||||
private float pinchStartDistance;
|
private float pinchStartDistance;
|
||||||
|
@ -1034,6 +1043,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
public float scale = 1.0f;
|
public float scale = 1.0f;
|
||||||
public boolean isEvent;
|
public boolean isEvent;
|
||||||
public ClippingImageView animatingImageView;
|
public ClippingImageView animatingImageView;
|
||||||
|
public int animatingImageViewYOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class EmptyPhotoViewerProvider implements PhotoViewerProvider {
|
public static class EmptyPhotoViewerProvider implements PhotoViewerProvider {
|
||||||
|
@ -1193,7 +1203,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
private boolean ignoreLayout;
|
private boolean ignoreLayout;
|
||||||
|
|
||||||
public FrameLayoutDrawer(Context context) {
|
public FrameLayoutDrawer(Context context) {
|
||||||
super(context);
|
super(context, false);
|
||||||
setWillNotDraw(false);
|
setWillNotDraw(false);
|
||||||
paint.setColor(0x33000000);
|
paint.setColor(0x33000000);
|
||||||
}
|
}
|
||||||
|
@ -1243,7 +1253,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
@Override
|
@Override
|
||||||
protected void onLayout(boolean changed, int _l, int t, int _r, int _b) {
|
protected void onLayout(boolean changed, int _l, int t, int _r, int _b) {
|
||||||
final int count = getChildCount();
|
final int count = getChildCount();
|
||||||
int paddingBottom = getKeyboardHeight() <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow ? captionEditText.getEmojiPadding() : 0;
|
int keyboardSize = useSmoothKeyboard ? 0 : getKeyboardHeight();
|
||||||
|
int paddingBottom = keyboardSize <= AndroidUtilities.dp(20) && !AndroidUtilities.isInMultiwindow ? captionEditText.getEmojiPadding() : 0;
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
final View child = getChildAt(i);
|
final View child = getChildAt(i);
|
||||||
|
@ -1336,7 +1347,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= 21 && AndroidUtilities.statusBarHeight != 0 && actionBar != null) {
|
if (Build.VERSION.SDK_INT >= 21 && AndroidUtilities.statusBarHeight != 0 && actionBar != null) {
|
||||||
paint.setAlpha((int) (255 * actionBar.getAlpha() * 0.2f));
|
paint.setAlpha((int) (255 * actionBar.getAlpha() * 0.2f));
|
||||||
canvas.drawRect(0, 0, getMeasuredWidth(), AndroidUtilities.statusBarHeight, paint);
|
canvas.drawRect(0, currentPanTranslationY, getMeasuredWidth(), currentPanTranslationY + AndroidUtilities.statusBarHeight, paint);
|
||||||
paint.setAlpha((int) (255 * actionBar.getAlpha() * 0.498f));
|
paint.setAlpha((int) (255 * actionBar.getAlpha() * 0.498f));
|
||||||
if (getPaddingRight() > 0) {
|
if (getPaddingRight() > 0) {
|
||||||
canvas.drawRect(getMeasuredWidth() - getPaddingRight(), 0, getMeasuredWidth(), getMeasuredHeight(), paint);
|
canvas.drawRect(getMeasuredWidth() - getPaddingRight(), 0, getMeasuredWidth(), getMeasuredHeight(), paint);
|
||||||
|
@ -1388,6 +1399,43 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
}
|
}
|
||||||
super.requestLayout();
|
super.requestLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPanTranslationUpdate(int y) {
|
||||||
|
currentPanTranslationY = y;
|
||||||
|
actionBar.setTranslationY(y);
|
||||||
|
if (miniProgressView != null) {
|
||||||
|
miniProgressView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (progressView != null) {
|
||||||
|
progressView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (checkImageView != null) {
|
||||||
|
checkImageView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (photosCounterView != null) {
|
||||||
|
photosCounterView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (selectedPhotosListView != null) {
|
||||||
|
selectedPhotosListView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (aspectRatioFrameLayout != null) {
|
||||||
|
aspectRatioFrameLayout.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (textureImageView != null) {
|
||||||
|
textureImageView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (photoCropView != null) {
|
||||||
|
photoCropView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (photoFilterView != null) {
|
||||||
|
photoFilterView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
if (photoPaintView != null) {
|
||||||
|
photoPaintView.setTranslationY(y);
|
||||||
|
}
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
|
@ -2410,6 +2458,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
bottomLayout.setBackgroundColor(0x7f000000);
|
bottomLayout.setBackgroundColor(0x7f000000);
|
||||||
containerView.addView(bottomLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.LEFT));
|
containerView.addView(bottomLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.LEFT));
|
||||||
|
|
||||||
|
pressedDrawable[0] = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[] {0x32000000, 0});
|
||||||
|
pressedDrawable[0].setShape(GradientDrawable.RECTANGLE);
|
||||||
|
pressedDrawable[1] = new GradientDrawable(GradientDrawable.Orientation.RIGHT_LEFT, new int[] {0x32000000, 0});
|
||||||
|
pressedDrawable[1].setShape(GradientDrawable.RECTANGLE);
|
||||||
|
|
||||||
groupedPhotosListView = new GroupedPhotosListView(actvityContext);
|
groupedPhotosListView = new GroupedPhotosListView(actvityContext);
|
||||||
containerView.addView(groupedPhotosListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 62, Gravity.BOTTOM | Gravity.LEFT, 0, 0, 0, 48));
|
containerView.addView(groupedPhotosListView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 62, Gravity.BOTTOM | Gravity.LEFT, 0, 0, 0, 48));
|
||||||
groupedPhotosListView.setDelegate(new GroupedPhotosListView.GroupedPhotosListViewDelegate() {
|
groupedPhotosListView.setDelegate(new GroupedPhotosListView.GroupedPhotosListViewDelegate() {
|
||||||
|
@ -3108,7 +3161,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
editorDoneLayout.addView(resetButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.CENTER));
|
editorDoneLayout.addView(resetButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.CENTER));
|
||||||
resetButton.setOnClickListener(v -> photoCropView.reset());
|
resetButton.setOnClickListener(v -> photoCropView.reset());
|
||||||
|
|
||||||
gestureDetector = new GestureDetector(containerView.getContext(), this);
|
gestureDetector = new GestureDetector2(containerView.getContext(), this);
|
||||||
|
gestureDetector.setIsLongpressEnabled(false);
|
||||||
setDoubleTapEnabled(true);
|
setDoubleTapEnabled(true);
|
||||||
|
|
||||||
ImageReceiver.ImageReceiverDelegate imageReceiverDelegate = (imageReceiver, set, thumb) -> {
|
ImageReceiver.ImageReceiverDelegate imageReceiverDelegate = (imageReceiver, set, thumb) -> {
|
||||||
|
@ -3279,8 +3333,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (Build.VERSION.SDK_INT >= 19)
|
if (Build.VERSION.SDK_INT >= 19) {
|
||||||
captionEditText.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
|
captionEditText.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
|
||||||
|
}
|
||||||
containerView.addView(captionEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT));
|
containerView.addView(captionEditText, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT));
|
||||||
|
|
||||||
mentionListView = new RecyclerListView(actvityContext) {
|
mentionListView = new RecyclerListView(actvityContext) {
|
||||||
|
@ -5040,7 +5095,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
changeModeAnimation.start();
|
changeModeAnimation.start();
|
||||||
} else if (mode == 3) { // painting/text/masks
|
} else if (mode == 3) {
|
||||||
if (photoPaintView == null) {
|
if (photoPaintView == null) {
|
||||||
photoPaintView = new PhotoPaintView(parentActivity, centerImage.getBitmap(), centerImage.getOrientation());
|
photoPaintView = new PhotoPaintView(parentActivity, centerImage.getBitmap(), centerImage.getOrientation());
|
||||||
containerView.addView(photoPaintView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
containerView.addView(photoPaintView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
|
||||||
|
@ -7154,7 +7209,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
} else {
|
} else {
|
||||||
windowLayoutParams.flags &=~ WindowManager.LayoutParams.FLAG_SECURE;
|
windowLayoutParams.flags &=~ WindowManager.LayoutParams.FLAG_SECURE;
|
||||||
}
|
}
|
||||||
windowLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
|
windowLayoutParams.softInputMode = (useSmoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
|
||||||
windowView.setFocusable(false);
|
windowView.setFocusable(false);
|
||||||
containerView.setFocusable(false);
|
containerView.setFocusable(false);
|
||||||
wm.addView(windowView, windowLayoutParams);
|
wm.addView(windowView, windowLayoutParams);
|
||||||
|
@ -7399,7 +7454,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
} else {
|
} else {
|
||||||
windowLayoutParams.flags = 0;
|
windowLayoutParams.flags = 0;
|
||||||
}
|
}
|
||||||
windowLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
|
windowLayoutParams.softInputMode = (useSmoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
|
||||||
WindowManager wm1 = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE);
|
WindowManager wm1 = (WindowManager) parentActivity.getSystemService(Context.WINDOW_SERVICE);
|
||||||
wm1.updateViewLayout(windowView, windowLayoutParams);
|
wm1.updateViewLayout(windowView, windowLayoutParams);
|
||||||
windowView.setFocusable(true);
|
windowView.setFocusable(true);
|
||||||
|
@ -7474,7 +7529,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
} else {
|
} else {
|
||||||
windowLayoutParams.flags = 0;
|
windowLayoutParams.flags = 0;
|
||||||
}
|
}
|
||||||
windowLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
|
windowLayoutParams.softInputMode = (useSmoothKeyboard ? WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN : WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) | WindowManager.LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION;
|
||||||
wm.updateViewLayout(windowView, windowLayoutParams);
|
wm.updateViewLayout(windowView, windowLayoutParams);
|
||||||
windowView.setFocusable(true);
|
windowView.setFocusable(true);
|
||||||
containerView.setFocusable(true);
|
containerView.setFocusable(true);
|
||||||
|
@ -7806,6 +7861,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
animatingImageViews[0] = animatingImageView;
|
animatingImageViews[0] = animatingImageView;
|
||||||
if (hasSecondAnimatingImageView) {
|
if (hasSecondAnimatingImageView) {
|
||||||
animatingImageViews[1] = object.animatingImageView;
|
animatingImageViews[1] = object.animatingImageView;
|
||||||
|
object.animatingImageView.setAdditionalTranslationY(object.animatingImageViewYOffset);
|
||||||
}
|
}
|
||||||
return animatingImageViews;
|
return animatingImageViews;
|
||||||
}
|
}
|
||||||
|
@ -8069,6 +8125,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
pinchStartY = translationY;
|
pinchStartY = translationY;
|
||||||
zooming = true;
|
zooming = true;
|
||||||
moving = false;
|
moving = false;
|
||||||
|
hidePressedDrawables();
|
||||||
if (velocityTracker != null) {
|
if (velocityTracker != null) {
|
||||||
velocityTracker.clear();
|
velocityTracker.clear();
|
||||||
}
|
}
|
||||||
|
@ -8098,12 +8155,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
float dy = Math.abs(ev.getY() - dragY);
|
float dy = Math.abs(ev.getY() - dragY);
|
||||||
if (dx > AndroidUtilities.dp(3) || dy > AndroidUtilities.dp(3)) {
|
if (dx > AndroidUtilities.dp(3) || dy > AndroidUtilities.dp(3)) {
|
||||||
discardTap = true;
|
discardTap = true;
|
||||||
|
hidePressedDrawables();
|
||||||
if (qualityChooseView != null && qualityChooseView.getVisibility() == View.VISIBLE) {
|
if (qualityChooseView != null && qualityChooseView.getVisibility() == View.VISIBLE) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (placeProvider.canScrollAway() && currentEditMode == 0 && sendPhotoType != SELECT_TYPE_AVATAR && canDragDown && !draggingDown && scale == 1 && dy >= AndroidUtilities.dp(30) && dy / 2 > dx) {
|
if (placeProvider.canScrollAway() && currentEditMode == 0 && sendPhotoType != SELECT_TYPE_AVATAR && canDragDown && !draggingDown && scale == 1 && dy >= AndroidUtilities.dp(30) && dy / 2 > dx) {
|
||||||
draggingDown = true;
|
draggingDown = true;
|
||||||
|
hidePressedDrawables();
|
||||||
moving = false;
|
moving = false;
|
||||||
dragY = ev.getY();
|
dragY = ev.getY();
|
||||||
if (isActionBarVisible && containerView.getTag() != null) {
|
if (isActionBarVisible && containerView.getTag() != null) {
|
||||||
|
@ -8126,6 +8185,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
moveDy = 0;
|
moveDy = 0;
|
||||||
moving = true;
|
moving = true;
|
||||||
canDragDown = false;
|
canDragDown = false;
|
||||||
|
hidePressedDrawables();
|
||||||
}
|
}
|
||||||
|
|
||||||
moveStartX = ev.getX();
|
moveStartX = ev.getX();
|
||||||
|
@ -8311,6 +8371,18 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
return animationValue;
|
return animationValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void switchToNextIndex(int add, boolean init) {
|
||||||
|
if (currentMessageObject != null) {
|
||||||
|
releasePlayer(false);
|
||||||
|
FileLoader.getInstance(currentAccount).cancelLoadFile(currentMessageObject.getDocument());
|
||||||
|
}
|
||||||
|
setImageIndex(currentIndex + add, init);
|
||||||
|
if (currentMessageObject != null && currentMessageObject.isVideo() && (currentMessageObject.mediaExists || currentMessageObject.attachPathExists || currentMessageObject.canStreamVideo() && SharedConfig.streamMedia) && SharedConfig.autoplayVideo) {
|
||||||
|
onActionClick(true);
|
||||||
|
checkProgress(0, false, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint({"NewApi", "DrawAllocation"})
|
@SuppressLint({"NewApi", "DrawAllocation"})
|
||||||
private void onDraw(Canvas canvas) {
|
private void onDraw(Canvas canvas) {
|
||||||
if (animationInProgress == 1 || animationInProgress == 3 || !isVisible && animationInProgress != 2 && !pipAnimationInProgress) {
|
if (animationInProgress == 1 || animationInProgress == 3 || !isVisible && animationInProgress != 2 && !pipAnimationInProgress) {
|
||||||
|
@ -8326,6 +8398,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
float currentTranslationX;
|
float currentTranslationX;
|
||||||
float currentScale;
|
float currentScale;
|
||||||
float aty = -1;
|
float aty = -1;
|
||||||
|
long newUpdateTime = System.currentTimeMillis();
|
||||||
|
long dt = newUpdateTime - videoCrossfadeAlphaLastTime;
|
||||||
|
if (dt > 20) {
|
||||||
|
dt = 17;
|
||||||
|
}
|
||||||
|
videoCrossfadeAlphaLastTime = newUpdateTime;
|
||||||
|
|
||||||
if (imageMoveAnimation != null) {
|
if (imageMoveAnimation != null) {
|
||||||
if (!scroller.isFinished()) {
|
if (!scroller.isFinished()) {
|
||||||
|
@ -8372,9 +8450,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (switchImageAfterAnimation == 1) {
|
if (switchImageAfterAnimation == 1) {
|
||||||
AndroidUtilities.runOnUIThread(() -> setImageIndex(currentIndex + 1, false));
|
AndroidUtilities.runOnUIThread(() -> switchToNextIndex(1, false));
|
||||||
} else if (switchImageAfterAnimation == 2) {
|
} else if (switchImageAfterAnimation == 2) {
|
||||||
AndroidUtilities.runOnUIThread(() -> setImageIndex(currentIndex - 1, false));
|
AndroidUtilities.runOnUIThread(() -> switchToNextIndex(-1, false));
|
||||||
}
|
}
|
||||||
switchImageAfterAnimation = 0;
|
switchImageAfterAnimation = 0;
|
||||||
}
|
}
|
||||||
|
@ -8462,7 +8540,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
if (centerImage.hasBitmapImage() || drawTextureView && textureUploaded) {
|
if (centerImage.hasBitmapImage() || drawTextureView && textureUploaded) {
|
||||||
canvas.save();
|
canvas.save();
|
||||||
canvas.translate(getContainerViewWidth() / 2 + getAdditionX(), getContainerViewHeight() / 2 + getAdditionY());
|
canvas.translate(getContainerViewWidth() / 2 + getAdditionX(), getContainerViewHeight() / 2 + getAdditionY());
|
||||||
canvas.translate(translateX, currentTranslationY);
|
canvas.translate(translateX, currentTranslationY + currentPanTranslationY);
|
||||||
canvas.scale(currentScale - scaleDiff, currentScale - scaleDiff);
|
canvas.scale(currentScale - scaleDiff, currentScale - scaleDiff);
|
||||||
|
|
||||||
int bitmapWidth;
|
int bitmapWidth;
|
||||||
|
@ -8500,9 +8578,6 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
videoTextureView.setAlpha(alpha * videoCrossfadeAlpha);
|
videoTextureView.setAlpha(alpha * videoCrossfadeAlpha);
|
||||||
aspectRatioFrameLayout.draw(canvas);
|
aspectRatioFrameLayout.draw(canvas);
|
||||||
if (videoCrossfadeStarted && videoCrossfadeAlpha < 1.0f) {
|
if (videoCrossfadeStarted && videoCrossfadeAlpha < 1.0f) {
|
||||||
long newUpdateTime = System.currentTimeMillis();
|
|
||||||
long dt = newUpdateTime - videoCrossfadeAlphaLastTime;
|
|
||||||
videoCrossfadeAlphaLastTime = newUpdateTime;
|
|
||||||
videoCrossfadeAlpha += dt / (playerInjected ? 100.0f : 200.0f);
|
videoCrossfadeAlpha += dt / (playerInjected ? 100.0f : 200.0f);
|
||||||
containerView.invalidate();
|
containerView.invalidate();
|
||||||
if (videoCrossfadeAlpha > 1.0f) {
|
if (videoCrossfadeAlpha > 1.0f) {
|
||||||
|
@ -8511,6 +8586,34 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
canvas.restore();
|
canvas.restore();
|
||||||
|
for (int a = 0; a < pressedDrawable.length; a++) {
|
||||||
|
if (drawPressedDrawable[a] || pressedDrawableAlpha[a] != 0) {
|
||||||
|
pressedDrawable[a].setAlpha((int) (pressedDrawableAlpha[a] * 255));
|
||||||
|
if (a == 0) {
|
||||||
|
pressedDrawable[a].setBounds(0, 0, containerView.getMeasuredWidth() / 5, containerView.getMeasuredHeight());
|
||||||
|
} else {
|
||||||
|
pressedDrawable[a].setBounds(containerView.getMeasuredWidth() - containerView.getMeasuredWidth() / 5, 0, containerView.getMeasuredWidth(), containerView.getMeasuredHeight());
|
||||||
|
}
|
||||||
|
pressedDrawable[a].draw(canvas);
|
||||||
|
}
|
||||||
|
if (drawPressedDrawable[a]) {
|
||||||
|
if (pressedDrawableAlpha[a] < 1.0f) {
|
||||||
|
pressedDrawableAlpha[a] += dt / 180.0f;
|
||||||
|
if (pressedDrawableAlpha[a] > 1.0f) {
|
||||||
|
pressedDrawableAlpha[a] = 1.0f;
|
||||||
|
}
|
||||||
|
containerView.invalidate();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (pressedDrawableAlpha[a] > 0.0f) {
|
||||||
|
pressedDrawableAlpha[a] -= dt / 180.0f;
|
||||||
|
if (pressedDrawableAlpha[a] < 0.0f) {
|
||||||
|
pressedDrawableAlpha[a] = 0.0f;
|
||||||
|
}
|
||||||
|
containerView.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
boolean drawProgress;
|
boolean drawProgress;
|
||||||
if (isCurrentVideo) {
|
if (isCurrentVideo) {
|
||||||
|
@ -8701,9 +8804,34 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDown(MotionEvent e) {
|
public boolean onDown(MotionEvent e) {
|
||||||
|
if (checkImageView.getVisibility() != View.VISIBLE && !drawPressedDrawable[0] && !drawPressedDrawable[1]) {
|
||||||
|
float x = e.getX();
|
||||||
|
int side = containerView.getMeasuredWidth() / 5;
|
||||||
|
if (x < side) {
|
||||||
|
if (leftImage.hasImageSet()) {
|
||||||
|
drawPressedDrawable[0] = true;
|
||||||
|
containerView.invalidate();
|
||||||
|
}
|
||||||
|
} else if (x > containerView.getMeasuredWidth() - side) {
|
||||||
|
if (rightImage.hasImageSet()) {
|
||||||
|
drawPressedDrawable[1] = true;
|
||||||
|
containerView.invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void hidePressedDrawables() {
|
||||||
|
drawPressedDrawable[0] = drawPressedDrawable[1] = false;
|
||||||
|
containerView.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUp(MotionEvent e) {
|
||||||
|
hidePressedDrawables();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onShowPress(MotionEvent e) {
|
public void onShowPress(MotionEvent e) {
|
||||||
|
|
||||||
|
@ -8742,9 +8870,23 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
if (discardTap) {
|
if (discardTap) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
float x = e.getX();
|
||||||
|
if (checkImageView.getVisibility() != View.VISIBLE) {
|
||||||
|
int side = containerView.getMeasuredWidth() / 5;
|
||||||
|
if (x < side) {
|
||||||
|
if (leftImage.hasImageSet()) {
|
||||||
|
switchToNextIndex(-1, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if (x > containerView.getMeasuredWidth() - side) {
|
||||||
|
if (rightImage.hasImageSet()) {
|
||||||
|
switchToNextIndex(1, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (containerView.getTag() != null) {
|
if (containerView.getTag() != null) {
|
||||||
boolean drawTextureView = aspectRatioFrameLayout != null && aspectRatioFrameLayout.getVisibility() == View.VISIBLE;
|
boolean drawTextureView = aspectRatioFrameLayout != null && aspectRatioFrameLayout.getVisibility() == View.VISIBLE;
|
||||||
float x = e.getX();
|
|
||||||
float y = e.getY();
|
float y = e.getY();
|
||||||
if (sharedMediaType == MediaDataController.MEDIA_FILE && currentMessageObject != null) {
|
if (sharedMediaType == MediaDataController.MEDIA_FILE && currentMessageObject != null) {
|
||||||
if (!currentMessageObject.canPreviewDocument()) {
|
if (!currentMessageObject.canPreviewDocument()) {
|
||||||
|
@ -8777,7 +8919,6 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
} else if (currentBotInlineResult != null && (currentBotInlineResult.type.equals("video") || MessageObject.isVideoDocument(currentBotInlineResult.document))) {
|
} else if (currentBotInlineResult != null && (currentBotInlineResult.type.equals("video") || MessageObject.isVideoDocument(currentBotInlineResult.document))) {
|
||||||
int state = photoProgressViews[0].backgroundState;
|
int state = photoProgressViews[0].backgroundState;
|
||||||
if (state > 0 && state <= 3) {
|
if (state > 0 && state <= 3) {
|
||||||
float x = e.getX();
|
|
||||||
float y = e.getY();
|
float y = e.getY();
|
||||||
if (x >= (getContainerViewWidth() - AndroidUtilities.dp(100)) / 2.0f && x <= (getContainerViewWidth() + AndroidUtilities.dp(100)) / 2.0f &&
|
if (x >= (getContainerViewWidth() - AndroidUtilities.dp(100)) / 2.0f && x <= (getContainerViewWidth() + AndroidUtilities.dp(100)) / 2.0f &&
|
||||||
y >= (getContainerViewHeight() - AndroidUtilities.dp(100)) / 2.0f && y <= (getContainerViewHeight() + AndroidUtilities.dp(100)) / 2.0f) {
|
y >= (getContainerViewHeight() - AndroidUtilities.dp(100)) / 2.0f && y <= (getContainerViewHeight() + AndroidUtilities.dp(100)) / 2.0f) {
|
||||||
|
@ -8985,8 +9126,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
|
||||||
int x = cx - circleSize / 2 - gapSize - lineSize;
|
int x = cx - circleSize / 2 - gapSize - lineSize;
|
||||||
float startPadding = a == (selectedCompression + 1) ? AndroidUtilities.dpf2(2) : 0;
|
float startPadding = a == (selectedCompression + 1) ? AndroidUtilities.dpf2(2) : 0;
|
||||||
float endPadding = a == selectedCompression ? AndroidUtilities.dpf2(2) : 0;
|
float endPadding = a == selectedCompression ? AndroidUtilities.dpf2(2) : 0;
|
||||||
canvas.drawRect(x + startPadding, cy - AndroidUtilities.dp(1),
|
canvas.drawRect(x + startPadding, cy - AndroidUtilities.dp(1), x + lineSize - endPadding, cy + AndroidUtilities.dp(2), paint);
|
||||||
x + lineSize - endPadding, cy + AndroidUtilities.dp(2), paint);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC
|
||||||
statusDrawables[3] = new PlayingGameDrawable();
|
statusDrawables[3] = new PlayingGameDrawable();
|
||||||
statusDrawables[4] = new RoundStatusDrawable();
|
statusDrawables[4] = new RoundStatusDrawable();
|
||||||
|
|
||||||
SizeNotifierFrameLayout contentView = new SizeNotifierFrameLayout(this) {
|
SizeNotifierFrameLayout contentView = new SizeNotifierFrameLayout(this, false) {
|
||||||
@Override
|
@Override
|
||||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
|
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
|
||||||
|
|
|
@ -1160,11 +1160,13 @@ public class PrivacyControlActivity extends BaseFragment implements Notification
|
||||||
|
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable.getShadowDrawable(), Theme.chat_msgInMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_inBubbleShadow),
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgInDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgInMediaDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable.getShadowDrawable(), Theme.chat_msgOutMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_outBubbleShadow),
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgOutDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgOutMediaDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextIn),
|
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextIn),
|
||||||
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextOut),
|
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextOut),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck),
|
||||||
|
|
|
@ -493,7 +493,9 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
|
||||||
LocaleController.getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings),
|
LocaleController.getString("DebugMenuCallSettings", R.string.DebugMenuCallSettings),
|
||||||
null,
|
null,
|
||||||
BuildVars.DEBUG_PRIVATE_VERSION ? "Check for app updates" : null,
|
BuildVars.DEBUG_PRIVATE_VERSION ? "Check for app updates" : null,
|
||||||
LocaleController.getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs)
|
LocaleController.getString("DebugMenuReadAllDialogs", R.string.DebugMenuReadAllDialogs),
|
||||||
|
SharedConfig.pauseMusicOnRecord ? LocaleController.getString("DebugMenuDisablePauseMusic", R.string.DebugMenuDisablePauseMusic) : LocaleController.getString("DebugMenuEnablePauseMusic", R.string.DebugMenuEnablePauseMusic),
|
||||||
|
BuildVars.DEBUG_VERSION && !AndroidUtilities.isTablet() ? (SharedConfig.smoothKeyboard ? LocaleController.getString("DebugMenuDisableSmoothKeyboard", R.string.DebugMenuDisableSmoothKeyboard) : LocaleController.getString("DebugMenuEnableSmoothKeyboard", R.string.DebugMenuEnableSmoothKeyboard)) : null
|
||||||
};
|
};
|
||||||
builder.setItems(items, (dialog, which) -> {
|
builder.setItems(items, (dialog, which) -> {
|
||||||
if (which == 0) {
|
if (which == 0) {
|
||||||
|
@ -526,6 +528,13 @@ public class SettingsActivity extends BaseFragment implements NotificationCenter
|
||||||
((LaunchActivity) getParentActivity()).checkAppUpdate(true);
|
((LaunchActivity) getParentActivity()).checkAppUpdate(true);
|
||||||
} else if (which == 10) {
|
} else if (which == 10) {
|
||||||
MessagesStorage.getInstance(currentAccount).readAllDialogs(-1);
|
MessagesStorage.getInstance(currentAccount).readAllDialogs(-1);
|
||||||
|
} else if (which == 11) {
|
||||||
|
SharedConfig.togglePauseMusicOnRecord();
|
||||||
|
} else if (which == 12) {
|
||||||
|
SharedConfig.toggleSmoothKeyboard();
|
||||||
|
if (SharedConfig.smoothKeyboard && getParentActivity() != null) {
|
||||||
|
getParentActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
|
||||||
|
|
|
@ -2053,14 +2053,15 @@ public class ThemeActivity extends BaseFragment implements NotificationCenter.No
|
||||||
new ThemeDescription(listView, 0, new Class[]{NotificationsCheckCell.class}, new String[]{"valueTextView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayText2),
|
new ThemeDescription(listView, 0, new Class[]{NotificationsCheckCell.class}, new String[]{"valueTextView"}, null, null, null, Theme.key_windowBackgroundWhiteGrayText2),
|
||||||
new ThemeDescription(listView, 0, new Class[]{NotificationsCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrack),
|
new ThemeDescription(listView, 0, new Class[]{NotificationsCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrack),
|
||||||
new ThemeDescription(listView, 0, new Class[]{NotificationsCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrackChecked),
|
new ThemeDescription(listView, 0, new Class[]{NotificationsCheckCell.class}, new String[]{"checkBox"}, null, null, null, Theme.key_switchTrackChecked),
|
||||||
|
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable.getShadowDrawable(), Theme.chat_msgInMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_inBubbleShadow),
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgInDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgInMediaDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable.getShadowDrawable(), Theme.chat_msgOutMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_outBubbleShadow),
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgOutDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
|
new ThemeDescription(listView, 0, null, null, Theme.chat_msgOutMediaDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextIn),
|
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextIn),
|
||||||
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextOut),
|
new ThemeDescription(listView, 0, null, null, null, null, Theme.key_chat_messageTextOut),
|
||||||
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck),
|
new ThemeDescription(listView, 0, null, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck),
|
||||||
|
|
|
@ -257,7 +257,6 @@ public class ThemePreviewActivity extends BaseFragment implements DownloadContro
|
||||||
public ThemePreviewActivity(Theme.ThemeInfo themeInfo, boolean deleteFile, int screenType, boolean edit, boolean night) {
|
public ThemePreviewActivity(Theme.ThemeInfo themeInfo, boolean deleteFile, int screenType, boolean edit, boolean night) {
|
||||||
super();
|
super();
|
||||||
this.screenType = screenType;
|
this.screenType = screenType;
|
||||||
swipeBackEnabled = false;
|
|
||||||
nightTheme = night;
|
nightTheme = night;
|
||||||
applyingTheme = themeInfo;
|
applyingTheme = themeInfo;
|
||||||
deleteOnCancel = deleteFile;
|
deleteOnCancel = deleteFile;
|
||||||
|
@ -1962,6 +1961,11 @@ public class ThemePreviewActivity extends BaseFragment implements DownloadContro
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailedDownload(String fileName, boolean canceled) {
|
public void onFailedDownload(String fileName, boolean canceled) {
|
||||||
updateButtonState( true, canceled);
|
updateButtonState( true, canceled);
|
||||||
|
@ -3475,11 +3479,13 @@ public class ThemePreviewActivity extends BaseFragment implements DownloadContro
|
||||||
|
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgInDrawable.getShadowDrawable(), Theme.chat_msgInMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_inBubbleShadow));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgInDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow));
|
||||||
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgInMediaDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutDrawable.getShadowDrawable(), Theme.chat_msgOutMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_outBubbleShadow));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgOutDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow));
|
||||||
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, Theme.chat_msgOutMediaDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_chat_messageTextIn));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_chat_messageTextIn));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_chat_messageTextOut));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, null, null, Theme.key_chat_messageTextOut));
|
||||||
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck));
|
items.add(new ThemeDescription(listView2, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck));
|
||||||
|
|
|
@ -683,11 +683,13 @@ public class ThemeSetUrlActivity extends BaseFragment implements NotificationCen
|
||||||
|
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable, Theme.chat_msgInMediaDrawable}, null, Theme.key_chat_inBubble),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgInSelectedDrawable, Theme.chat_msgInMediaSelectedDrawable}, null, Theme.key_chat_inBubbleSelected),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgInDrawable.getShadowDrawable(), Theme.chat_msgInMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_inBubbleShadow),
|
new ThemeDescription(messagesCell, 0, null, null, Theme.chat_msgInDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
|
new ThemeDescription(messagesCell, 0, null, null, Theme.chat_msgInMediaDrawable.getShadowDrawables(), null, Theme.key_chat_inBubbleShadow),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubble),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable, Theme.chat_msgOutMediaDrawable}, null, Theme.key_chat_outBubbleGradient),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutSelectedDrawable, Theme.chat_msgOutMediaSelectedDrawable}, null, Theme.key_chat_outBubbleSelected),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutDrawable.getShadowDrawable(), Theme.chat_msgOutMediaDrawable.getShadowDrawable()}, null, Theme.key_chat_outBubbleShadow),
|
new ThemeDescription(messagesCell, 0, null, null, Theme.chat_msgOutDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
|
new ThemeDescription(messagesCell, 0, null, null, Theme.chat_msgOutMediaDrawable.getShadowDrawables(), null, Theme.key_chat_outBubbleShadow),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, null, null, Theme.key_chat_messageTextIn),
|
new ThemeDescription(messagesCell, 0, null, null, null, null, Theme.key_chat_messageTextIn),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, null, null, Theme.key_chat_messageTextOut),
|
new ThemeDescription(messagesCell, 0, null, null, null, null, Theme.key_chat_messageTextOut),
|
||||||
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck),
|
new ThemeDescription(messagesCell, 0, null, null, new Drawable[]{Theme.chat_msgOutCheckDrawable}, null, Theme.key_chat_outSentCheck),
|
||||||
|
|
|
@ -21,6 +21,7 @@ import android.content.SharedPreferences;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
import android.webkit.CookieManager;
|
import android.webkit.CookieManager;
|
||||||
|
@ -154,7 +155,6 @@ public class WebviewActivity extends BaseFragment {
|
||||||
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
|
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
|
||||||
@Override
|
@Override
|
||||||
public View createView(Context context) {
|
public View createView(Context context) {
|
||||||
swipeBackEnabled = false;
|
|
||||||
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
actionBar.setBackButtonImage(R.drawable.ic_ab_back);
|
||||||
actionBar.setAllowOverlayTitle(true);
|
actionBar.setAllowOverlayTitle(true);
|
||||||
|
|
||||||
|
@ -326,6 +326,11 @@ public class WebviewActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSwipeBackEnabled(MotionEvent event) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean supportWebview() {
|
public static boolean supportWebview() {
|
||||||
String manufacturer = Build.MANUFACTURER;
|
String manufacturer = Build.MANUFACTURER;
|
||||||
String model = Build.MODEL;
|
String model = Build.MODEL;
|
||||||
|
|
BIN
TMessagesProj/src/main/res/drawable-hdpi/actions_nearby_off.png
Normal file
After Width: | Height: | Size: 1 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/actions_nearby_on.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/heart_confetti.png
Normal file
After Width: | Height: | Size: 406 B |
BIN
TMessagesProj/src/main/res/drawable-hdpi/menu_bookmarks_14.png
Normal file
After Width: | Height: | Size: 911 B |
BIN
TMessagesProj/src/main/res/drawable-hdpi/menu_broadcast_14.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/menu_calls_14.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
TMessagesProj/src/main/res/drawable-hdpi/menu_contacts_14.png
Normal file
After Width: | Height: | Size: 1.2 KiB |