Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
apk
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
apk
Commits
65e93f91
Commit
65e93f91
authored
Nov 07, 2014
by
DrKLO
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Different improvements
parent
059035a5
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
376 additions
and
350 deletions
+376
-350
build.gradle
TMessagesProj/build.gradle
+1
-1
AndroidUtilities.java
.../src/main/java/org/telegram/android/AndroidUtilities.java
+22
-0
MediaController.java
...j/src/main/java/org/telegram/android/MediaController.java
+2
-27
LaunchActivity.java
...gesProj/src/main/java/org/telegram/ui/LaunchActivity.java
+17
-6
LoginActivity.java
...agesProj/src/main/java/org/telegram/ui/LoginActivity.java
+13
-0
ActionBarLayout.java
...java/org/telegram/ui/Views/ActionBar/ActionBarLayout.java
+180
-139
DrawerLayoutContainer.java
...rg/telegram/ui/Views/ActionBar/DrawerLayoutContainer.java
+141
-177
No files found.
TMessagesProj/build.gradle
View file @
65e93f91
...
@@ -25,7 +25,7 @@ dependencies {
...
@@ -25,7 +25,7 @@ dependencies {
android
{
android
{
compileSdkVersion
21
compileSdkVersion
21
buildToolsVersion
'21.1.
0
'
buildToolsVersion
'21.1.
1
'
signingConfigs
{
signingConfigs
{
debug
{
debug
{
...
...
TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java
View file @
65e93f91
...
@@ -35,6 +35,7 @@ import org.telegram.ui.Views.NumberPicker;
...
@@ -35,6 +35,7 @@ import org.telegram.ui.Views.NumberPicker;
import
java.io.File
;
import
java.io.File
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.util.Hashtable
;
import
java.util.Hashtable
;
public
class
AndroidUtilities
{
public
class
AndroidUtilities
{
...
@@ -443,4 +444,25 @@ public class AndroidUtilities {
...
@@ -443,4 +444,25 @@ public class AndroidUtilities {
return
dp
(
56
);
return
dp
(
56
);
}
}
}
}
public
static
Point
getRealScreenSize
()
{
Point
size
=
new
Point
();
try
{
WindowManager
windowManager
=
(
WindowManager
)
ApplicationLoader
.
applicationContext
.
getSystemService
(
Context
.
WINDOW_SERVICE
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
{
windowManager
.
getDefaultDisplay
().
getRealSize
(
size
);
}
else
{
try
{
Method
mGetRawW
=
Display
.
class
.
getMethod
(
"getRawWidth"
);
Method
mGetRawH
=
Display
.
class
.
getMethod
(
"getRawHeight"
);
size
.
set
((
Integer
)
mGetRawW
.
invoke
(
windowManager
.
getDefaultDisplay
()),
(
Integer
)
mGetRawH
.
invoke
(
windowManager
.
getDefaultDisplay
()));
}
catch
(
Exception
e
)
{
FileLog
.
e
(
"tmessages"
,
e
);
}
}
}
catch
(
Exception
e
)
{
FileLog
.
e
(
"tmessages"
,
e
);
}
return
size
;
}
}
}
TMessagesProj/src/main/java/org/telegram/android/MediaController.java
View file @
65e93f91
...
@@ -38,9 +38,7 @@ import android.os.Environment;
...
@@ -38,9 +38,7 @@ import android.os.Environment;
import
android.os.ParcelFileDescriptor
;
import
android.os.ParcelFileDescriptor
;
import
android.os.Vibrator
;
import
android.os.Vibrator
;
import
android.provider.MediaStore
;
import
android.provider.MediaStore
;
import
android.view.Display
;
import
android.view.View
;
import
android.view.View
;
import
android.view.WindowManager
;
import
org.telegram.android.video.InputSurface
;
import
org.telegram.android.video.InputSurface
;
import
org.telegram.android.video.MP4Builder
;
import
org.telegram.android.video.MP4Builder
;
...
@@ -62,7 +60,6 @@ import java.io.File;
...
@@ -62,7 +60,6 @@ import java.io.File;
import
java.io.FileInputStream
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.FileOutputStream
;
import
java.lang.ref.WeakReference
;
import
java.lang.ref.WeakReference
;
import
java.lang.reflect.Method
;
import
java.nio.ByteBuffer
;
import
java.nio.ByteBuffer
;
import
java.nio.channels.FileChannel
;
import
java.nio.channels.FileChannel
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
...
@@ -739,29 +736,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
...
@@ -739,29 +736,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
public
void
processMediaObserver
(
Uri
uri
)
{
public
void
processMediaObserver
(
Uri
uri
)
{
try
{
try
{
int
width
=
0
;
Point
size
=
AndroidUtilities
.
getRealScreenSize
();
int
height
=
0
;
try
{
WindowManager
windowManager
=
(
WindowManager
)
ApplicationLoader
.
applicationContext
.
getSystemService
(
Context
.
WINDOW_SERVICE
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
{
Point
size
=
new
Point
();
windowManager
.
getDefaultDisplay
().
getRealSize
(
size
);
width
=
size
.
x
;
height
=
size
.
y
;
}
else
{
try
{
Method
mGetRawW
=
Display
.
class
.
getMethod
(
"getRawWidth"
);
Method
mGetRawH
=
Display
.
class
.
getMethod
(
"getRawHeight"
);
width
=
(
Integer
)
mGetRawW
.
invoke
(
windowManager
.
getDefaultDisplay
());
height
=
(
Integer
)
mGetRawH
.
invoke
(
windowManager
.
getDefaultDisplay
());
}
catch
(
Exception
e
)
{
FileLog
.
e
(
"tmessages"
,
e
);
}
}
}
catch
(
Exception
e
)
{
FileLog
.
e
(
"tmessages"
,
e
);
}
Cursor
cursor
=
ApplicationLoader
.
applicationContext
.
getContentResolver
().
query
(
uri
,
mediaProjections
,
null
,
null
,
"date_added DESC LIMIT 1"
);
Cursor
cursor
=
ApplicationLoader
.
applicationContext
.
getContentResolver
().
query
(
uri
,
mediaProjections
,
null
,
null
,
"date_added DESC LIMIT 1"
);
final
ArrayList
<
Long
>
screenshotDates
=
new
ArrayList
<
Long
>();
final
ArrayList
<
Long
>
screenshotDates
=
new
ArrayList
<
Long
>();
...
@@ -791,7 +766,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
...
@@ -791,7 +766,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
photoW
=
bmOptions
.
outWidth
;
photoW
=
bmOptions
.
outWidth
;
photoH
=
bmOptions
.
outHeight
;
photoH
=
bmOptions
.
outHeight
;
}
}
if
(
photoW
<=
0
||
photoH
<=
0
||
(
photoW
==
width
&&
photoH
==
height
||
photoH
==
width
&&
photoW
==
height
))
{
if
(
photoW
<=
0
||
photoH
<=
0
||
(
photoW
==
size
.
x
&&
photoH
==
size
.
y
||
photoH
==
size
.
x
&&
photoW
==
size
.
y
))
{
screenshotDates
.
add
(
date
);
screenshotDates
.
add
(
date
);
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
...
TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java
View file @
65e93f91
...
@@ -14,6 +14,7 @@ import android.content.Intent;
...
@@ -14,6 +14,7 @@ import android.content.Intent;
import
android.content.SharedPreferences
;
import
android.content.SharedPreferences
;
import
android.content.res.Configuration
;
import
android.content.res.Configuration
;
import
android.database.Cursor
;
import
android.database.Cursor
;
import
android.graphics.Point
;
import
android.net.Uri
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Bundle
;
...
@@ -46,6 +47,7 @@ import org.telegram.messenger.UserConfig;
...
@@ -46,6 +47,7 @@ import org.telegram.messenger.UserConfig;
import
org.telegram.messenger.Utilities
;
import
org.telegram.messenger.Utilities
;
import
org.telegram.ui.Views.ActionBar.ActionBarLayout
;
import
org.telegram.ui.Views.ActionBar.ActionBarLayout
;
import
org.telegram.ui.Views.ActionBar.BaseFragment
;
import
org.telegram.ui.Views.ActionBar.BaseFragment
;
import
org.telegram.ui.Views.ActionBar.DrawerLayoutContainer
;
import
java.io.BufferedReader
;
import
java.io.BufferedReader
;
import
java.io.InputStream
;
import
java.io.InputStream
;
...
@@ -231,15 +233,24 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
...
@@ -231,15 +233,24 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
}
}
});
});
}
else
{
}
else
{
setContentView
(
actionBarLayout
,
new
ViewGroup
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
MATCH_PARENT
));
DrawerLayoutContainer
drawerLayoutContainer
=
new
DrawerLayoutContainer
(
this
);
drawerLayoutContainer
.
setStatusBarColor
(
0xff54759e
);
drawerLayoutContainer
.
addView
(
actionBarLayout
,
new
ViewGroup
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
MATCH_PARENT
));
FrameLayout
frameLayout
=
new
FrameLayout
(
this
);
drawerLayoutContainer
.
setDrawerLayout
(
frameLayout
);
frameLayout
.
setBackgroundColor
(
0xffff0000
);
FrameLayout
.
LayoutParams
layoutParams
=
(
FrameLayout
.
LayoutParams
)
frameLayout
.
getLayoutParams
();
Point
screenSize
=
AndroidUtilities
.
getRealScreenSize
();
layoutParams
.
width
=
Math
.
min
(
screenSize
.
x
,
screenSize
.
y
)
-
AndroidUtilities
.
dp
(
56
);
layoutParams
.
height
=
FrameLayout
.
LayoutParams
.
MATCH_PARENT
;
frameLayout
.
setLayoutParams
(
layoutParams
);
setContentView
(
drawerLayoutContainer
,
new
ViewGroup
.
LayoutParams
(
ViewGroup
.
LayoutParams
.
MATCH_PARENT
,
ViewGroup
.
LayoutParams
.
MATCH_PARENT
));
actionBarLayout
.
setDrawerLayout
(
drawerLayoutContainer
);
actionBarLayout
.
setAllowOpenDrawer
(
true
);
}
}
actionBarLayout
.
init
(
mainFragmentsStack
);
actionBarLayout
.
init
(
mainFragmentsStack
);
actionBarLayout
.
setDelegate
(
this
);
actionBarLayout
.
setDelegate
(
this
);
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
actionBarLayout
.
setNeedStatusBar
(
true
);
actionBarLayout
.
setStatusBarColor
(
0xff54759e
);
}
actionBarLayout
.
createDrawerLayout
();
int
resourceId
=
getResources
().
getIdentifier
(
"status_bar_height"
,
"dimen"
,
"android"
);
int
resourceId
=
getResources
().
getIdentifier
(
"status_bar_height"
,
"dimen"
,
"android"
);
if
(
resourceId
>
0
)
{
if
(
resourceId
>
0
)
{
...
...
TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java
View file @
65e93f91
...
@@ -17,6 +17,7 @@ import android.os.Bundle;
...
@@ -17,6 +17,7 @@ import android.os.Bundle;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
android.view.WindowManager
;
import
android.view.animation.AccelerateDecelerateInterpolator
;
import
android.view.animation.AccelerateDecelerateInterpolator
;
import
android.widget.FrameLayout
;
import
android.widget.FrameLayout
;
import
android.widget.ScrollView
;
import
android.widget.ScrollView
;
...
@@ -127,6 +128,18 @@ public class LoginActivity extends BaseFragment implements SlideView.SlideViewDe
...
@@ -127,6 +128,18 @@ public class LoginActivity extends BaseFragment implements SlideView.SlideViewDe
return
fragmentView
;
return
fragmentView
;
}
}
@Override
public
void
onPause
()
{
super
.
onPause
();
getParentActivity
().
getWindow
().
setSoftInputMode
(
WindowManager
.
LayoutParams
.
SOFT_INPUT_ADJUST_PAN
);
}
@Override
public
void
onResume
()
{
super
.
onResume
();
getParentActivity
().
getWindow
().
setSoftInputMode
(
WindowManager
.
LayoutParams
.
SOFT_INPUT_ADJUST_RESIZE
);
}
private
void
saveCurrentState
()
{
private
void
saveCurrentState
()
{
try
{
try
{
Bundle
bundle
=
new
Bundle
();
Bundle
bundle
=
new
Bundle
();
...
...
TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/ActionBarLayout.java
View file @
65e93f91
...
@@ -11,8 +11,6 @@ package org.telegram.ui.Views.ActionBar;
...
@@ -11,8 +11,6 @@ package org.telegram.ui.Views.ActionBar;
import
android.app.Activity
;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.graphics.Canvas
;
import
android.graphics.Paint
;
import
android.os.Build
;
import
android.os.Build
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.view.ActionMode
;
import
android.view.ActionMode
;
...
@@ -66,10 +64,9 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -66,10 +64,9 @@ public class ActionBarLayout extends FrameLayout {
private
FrameLayoutAnimationListener
containerView
;
private
FrameLayoutAnimationListener
containerView
;
private
FrameLayoutAnimationListener
containerViewBack
;
private
FrameLayoutAnimationListener
containerViewBack
;
private
View
shadowView
;
private
View
shadowView
;
private
DrawerLayout
drawerLayout
;
private
DrawerLayout
Container
drawerLayoutContainer
;
private
boolean
needStatusBar
;
private
boolean
allowOpenDrawer
;
private
Paint
statusBarPaint
=
new
Paint
();
private
Animation
openAnimation
;
private
Animation
openAnimation
;
private
Animation
closeAnimation
;
private
Animation
closeAnimation
;
...
@@ -137,10 +134,6 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -137,10 +134,6 @@ public class ActionBarLayout extends FrameLayout {
fragment
.
setParentLayout
(
this
);
fragment
.
setParentLayout
(
this
);
}
}
if
(
drawerLayout
!=
null
)
{
bringChildToFront
(
drawerLayout
);
}
needLayout
();
needLayout
();
}
}
...
@@ -154,14 +147,6 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -154,14 +147,6 @@ public class ActionBarLayout extends FrameLayout {
}
}
}
}
@Override
protected
void
onDraw
(
Canvas
canvas
)
{
super
.
onDraw
(
canvas
);
if
(
needStatusBar
)
{
canvas
.
drawRect
(
0
,
0
,
getWidth
(),
AndroidUtilities
.
statusBarHeight
,
statusBarPaint
);
}
}
public
void
onResume
()
{
public
void
onResume
()
{
fixLayout
();
fixLayout
();
if
(
transitionAnimationInProgress
)
{
if
(
transitionAnimationInProgress
)
{
...
@@ -232,9 +217,6 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -232,9 +217,6 @@ public class ActionBarLayout extends FrameLayout {
parent
.
bringChildToFront
(
containerView
);
parent
.
bringChildToFront
(
containerView
);
parent
.
bringChildToFront
(
shadowView
);
parent
.
bringChildToFront
(
shadowView
);
parent
.
bringChildToFront
(
actionBar
);
parent
.
bringChildToFront
(
actionBar
);
if
(
drawerLayout
!=
null
)
{
parent
.
bringChildToFront
(
drawerLayout
);
}
//parent.removeViewInLayout(containerView);
//parent.removeViewInLayout(containerView);
//parent.addView(containerView, 1);
//parent.addView(containerView, 1);
lastFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
lastFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
...
@@ -261,6 +243,14 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -261,6 +243,14 @@ public class ActionBarLayout extends FrameLayout {
ViewProxy
.
setTranslationX
(
shadowView
,
-
AndroidUtilities
.
dp
(
2
));
ViewProxy
.
setTranslationX
(
shadowView
,
-
AndroidUtilities
.
dp
(
2
));
}
}
private
void
prepareForDrawerOpen
(
MotionEvent
ev
)
{
maybeStartTracking
=
false
;
startedTracking
=
true
;
startedTrackingX
=
(
int
)
ev
.
getX
();
beginTrackingSent
=
false
;
AndroidUtilities
.
lockOrientation
(
parentActivity
);
}
private
void
prepareForMoving
(
MotionEvent
ev
)
{
private
void
prepareForMoving
(
MotionEvent
ev
)
{
maybeStartTracking
=
false
;
maybeStartTracking
=
false
;
startedTracking
=
true
;
startedTracking
=
true
;
...
@@ -291,108 +281,181 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -291,108 +281,181 @@ public class ActionBarLayout extends FrameLayout {
}
}
public
boolean
onTouchEvent
(
MotionEvent
ev
)
{
public
boolean
onTouchEvent
(
MotionEvent
ev
)
{
if
(!
checkTransitionAnimation
()
&&
!
inActionMode
&&
fragmentsStack
.
size
()
>
1
&&
!
animationInProgress
)
{
if
(!
checkTransitionAnimation
()
&&
!
inActionMode
&&
!
animationInProgress
)
{
if
(
ev
!=
null
&&
ev
.
getAction
()
==
MotionEvent
.
ACTION_DOWN
&&
!
startedTracking
&&
!
maybeStartTracking
)
{
if
(
fragmentsStack
.
size
()
>
1
)
{
BaseFragment
currentFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
if
(
ev
!=
null
&&
ev
.
getAction
()
==
MotionEvent
.
ACTION_DOWN
&&
!
startedTracking
&&
!
maybeStartTracking
)
{
if
(!
currentFragment
.
swipeBackEnabled
)
{
BaseFragment
currentFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
return
false
;
if
(!
currentFragment
.
swipeBackEnabled
)
{
}
return
false
;
startedTrackingPointerId
=
ev
.
getPointerId
(
0
);
maybeStartTracking
=
true
;
startedTrackingX
=
(
int
)
ev
.
getX
();
startedTrackingY
=
(
int
)
ev
.
getY
();
if
(
velocityTracker
!=
null
)
{
velocityTracker
.
clear
();
}
}
else
if
(
ev
!=
null
&&
ev
.
getAction
()
==
MotionEvent
.
ACTION_MOVE
&&
ev
.
getPointerId
(
0
)
==
startedTrackingPointerId
)
{
if
(
velocityTracker
==
null
)
{
velocityTracker
=
VelocityTracker
.
obtain
();
}
int
dx
=
Math
.
max
(
0
,
(
int
)
(
ev
.
getX
()
-
startedTrackingX
));
int
dy
=
Math
.
abs
((
int
)
ev
.
getY
()
-
startedTrackingY
);
velocityTracker
.
addMovement
(
ev
);
if
(
maybeStartTracking
&&
!
startedTracking
&&
dx
>=
AndroidUtilities
.
dp
(
10
)
&&
Math
.
abs
(
dx
)
/
3
>
dy
)
{
prepareForMoving
(
ev
);
}
else
if
(
startedTracking
)
{
if
(!
beginTrackingSent
)
{
if
(
parentActivity
.
getCurrentFocus
()
!=
null
)
{
AndroidUtilities
.
hideKeyboard
(
parentActivity
.
getCurrentFocus
());
}
BaseFragment
currentFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
currentFragment
.
onBeginSlide
();
beginTrackingSent
=
true
;
}
}
actionBar
.
moveActionBarByX
(
dx
);
startedTrackingPointerId
=
ev
.
getPointerId
(
0
);
ViewProxy
.
setTranslationX
(
containerView
,
dx
);
maybeStartTracking
=
true
;
ViewProxy
.
setTranslationX
(
shadowView
,
dx
-
AndroidUtilities
.
dp
(
2
));
startedTrackingX
=
(
int
)
ev
.
getX
();
}
startedTrackingY
=
(
int
)
ev
.
getY
();
}
else
if
(
ev
!=
null
&&
ev
.
getPointerId
(
0
)
==
startedTrackingPointerId
&&
(
ev
.
getAction
()
==
MotionEvent
.
ACTION_CANCEL
||
ev
.
getAction
()
==
MotionEvent
.
ACTION_UP
||
ev
.
getAction
()
==
MotionEvent
.
ACTION_POINTER_UP
))
{
if
(
velocityTracker
!=
null
)
{
if
(
velocityTracker
==
null
)
{
velocityTracker
.
clear
();
velocityTracker
=
VelocityTracker
.
obtain
();
}
}
}
else
if
(
ev
!=
null
&&
ev
.
getAction
()
==
MotionEvent
.
ACTION_MOVE
&&
ev
.
getPointerId
(
0
)
==
startedTrackingPointerId
)
{
velocityTracker
.
computeCurrentVelocity
(
1000
);
if
(
velocityTracker
==
null
)
{
if
(!
startedTracking
)
{
velocityTracker
=
VelocityTracker
.
obtain
();
float
velX
=
velocityTracker
.
getXVelocity
();
}
float
velY
=
velocityTracker
.
getYVelocity
();
int
dx
=
Math
.
max
(
0
,
(
int
)
(
ev
.
getX
()
-
startedTrackingX
));
if
(
velX
>=
3500
&&
velX
>
velY
)
{
int
dy
=
Math
.
abs
((
int
)
ev
.
getY
()
-
startedTrackingY
);
velocityTracker
.
addMovement
(
ev
);
if
(
maybeStartTracking
&&
!
startedTracking
&&
dx
>=
AndroidUtilities
.
dp
(
10
)
&&
Math
.
abs
(
dx
)
/
3
>
dy
)
{
prepareForMoving
(
ev
);
prepareForMoving
(
ev
);
}
else
if
(
startedTracking
)
{
if
(!
beginTrackingSent
)
{
if
(
parentActivity
.
getCurrentFocus
()
!=
null
)
{
AndroidUtilities
.
hideKeyboard
(
parentActivity
.
getCurrentFocus
());
}
BaseFragment
currentFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
currentFragment
.
onBeginSlide
();
beginTrackingSent
=
true
;
}
actionBar
.
moveActionBarByX
(
dx
);
ViewProxy
.
setTranslationX
(
containerView
,
dx
);
ViewProxy
.
setTranslationX
(
shadowView
,
dx
-
AndroidUtilities
.
dp
(
2
));
}
}
}
}
else
if
(
ev
!=
null
&&
ev
.
getPointerId
(
0
)
==
startedTrackingPointerId
&&
(
ev
.
getAction
()
==
MotionEvent
.
ACTION_CANCEL
||
ev
.
getAction
()
==
MotionEvent
.
ACTION_UP
||
ev
.
getAction
()
==
MotionEvent
.
ACTION_POINTER_UP
))
{
if
(
startedTracking
)
{
if
(
velocityTracker
==
null
)
{
float
x
=
ViewProxy
.
getX
(
containerView
);
velocityTracker
=
VelocityTracker
.
obtain
();
AnimatorSetProxy
animatorSet
=
new
AnimatorSetProxy
();
float
velX
=
velocityTracker
.
getXVelocity
();
float
velY
=
velocityTracker
.
getYVelocity
();
final
boolean
backAnimation
=
x
<
containerView
.
getMeasuredWidth
()
/
3.0f
&&
(
velX
<
3500
||
velX
<
velY
);
float
distToMove
=
0
;
if
(!
backAnimation
)
{
distToMove
=
containerView
.
getMeasuredWidth
()
-
x
;
animatorSet
.
playTogether
(
ObjectAnimatorProxy
.
ofFloat
(
containerView
,
"x"
,
containerView
.
getMeasuredWidth
()),
ObjectAnimatorProxy
.
ofFloat
(
shadowView
,
"x"
,
containerView
.
getMeasuredWidth
()
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
currentLayer
,
"x"
,
actionBar
.
getMeasuredWidth
()),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
shadowView
,
"x"
,
actionBar
.
getMeasuredWidth
()
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
previousLayer
,
"alphaEx"
,
1.0f
)
);
}
else
{
distToMove
=
x
;
animatorSet
.
playTogether
(
ObjectAnimatorProxy
.
ofFloat
(
containerView
,
"x"
,
0
),
ObjectAnimatorProxy
.
ofFloat
(
shadowView
,
"x"
,
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
currentLayer
,
"x"
,
0
),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
shadowView
,
"x"
,
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
previousLayer
,
"alphaEx"
,
0
)
);
}
}
velocityTracker
.
computeCurrentVelocity
(
1000
);
animatorSet
.
setDuration
(
Math
.
max
((
int
)
(
200.0f
/
containerView
.
getMeasuredWidth
()
*
distToMove
),
50
));
if
(!
startedTracking
)
{
animatorSet
.
addListener
(
new
AnimatorListenerAdapterProxy
()
{
float
velX
=
velocityTracker
.
getXVelocity
();
@Override
float
velY
=
velocityTracker
.
getYVelocity
();
public
void
onAnimationEnd
(
Object
animator
)
{
if
(
velX
>=
3500
&&
velX
>
velY
)
{
onSlideAnimationEnd
(
backAnimation
);
prepareForMoving
(
ev
);
}
}
}
@Override
if
(
startedTracking
)
{
public
void
onAnimationCancel
(
Object
animator
)
{
float
x
=
ViewProxy
.
getX
(
containerView
);
onSlideAnimationEnd
(
backAnimation
);
AnimatorSetProxy
animatorSet
=
new
AnimatorSetProxy
();
float
velX
=
velocityTracker
.
getXVelocity
();
float
velY
=
velocityTracker
.
getYVelocity
();
final
boolean
backAnimation
=
x
<
containerView
.
getMeasuredWidth
()
/
3.0f
&&
(
velX
<
3500
||
velX
<
velY
);
float
distToMove
=
0
;
if
(!
backAnimation
)
{
distToMove
=
containerView
.
getMeasuredWidth
()
-
x
;
animatorSet
.
playTogether
(
ObjectAnimatorProxy
.
ofFloat
(
containerView
,
"x"
,
containerView
.
getMeasuredWidth
()),
ObjectAnimatorProxy
.
ofFloat
(
shadowView
,
"x"
,
containerView
.
getMeasuredWidth
()
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
currentLayer
,
"x"
,
actionBar
.
getMeasuredWidth
()),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
shadowView
,
"x"
,
actionBar
.
getMeasuredWidth
()
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
previousLayer
,
"alphaEx"
,
1.0f
)
);
}
else
{
distToMove
=
x
;
animatorSet
.
playTogether
(
ObjectAnimatorProxy
.
ofFloat
(
containerView
,
"x"
,
0
),
ObjectAnimatorProxy
.
ofFloat
(
shadowView
,
"x"
,
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
currentLayer
,
"x"
,
0
),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
shadowView
,
"x"
,
-
AndroidUtilities
.
dp
(
2
)),
ObjectAnimatorProxy
.
ofFloat
(
actionBar
.
previousLayer
,
"alphaEx"
,
0
)
);
}
}
});
animatorSet
.
start
();
animatorSet
.
setDuration
(
Math
.
max
((
int
)
(
200.0f
/
containerView
.
getMeasuredWidth
()
*
distToMove
),
50
));
animationInProgress
=
true
;
animatorSet
.
addListener
(
new
AnimatorListenerAdapterProxy
()
{
}
else
{
@Override
public
void
onAnimationEnd
(
Object
animator
)
{
onSlideAnimationEnd
(
backAnimation
);
}
@Override
public
void
onAnimationCancel
(
Object
animator
)
{
onSlideAnimationEnd
(
backAnimation
);
}
});
animatorSet
.
start
();
animationInProgress
=
true
;
}
else
{
maybeStartTracking
=
false
;
startedTracking
=
false
;
}
if
(
velocityTracker
!=
null
)
{
velocityTracker
.
recycle
();
velocityTracker
=
null
;
}
}
else
if
(
ev
==
null
)
{
maybeStartTracking
=
false
;
maybeStartTracking
=
false
;
startedTracking
=
false
;
startedTracking
=
false
;
if
(
velocityTracker
!=
null
)
{
velocityTracker
.
recycle
();
velocityTracker
=
null
;
}
}
}
if
(
velocityTracker
!=
null
)
{
}
else
if
(
drawerLayoutContainer
!=
null
&&
allowOpenDrawer
&&
fragmentsStack
.
size
()
==
1
)
{
velocityTracker
.
recycle
();
if
(
ev
!=
null
&&
ev
.
getAction
()
==
MotionEvent
.
ACTION_DOWN
&&
!
startedTracking
&&
!
maybeStartTracking
)
{
velocityTracker
=
null
;
startedTrackingPointerId
=
ev
.
getPointerId
(
0
);
}
maybeStartTracking
=
true
;
}
else
if
(
ev
==
null
)
{
startedTrackingX
=
(
int
)
ev
.
getX
();
maybeStartTracking
=
false
;
startedTrackingY
=
(
int
)
ev
.
getY
();
startedTracking
=
false
;
if
(
velocityTracker
!=
null
)
{
if
(
velocityTracker
!=
null
)
{
velocityTracker
.
clear
();
velocityTracker
.
recycle
();
}
velocityTracker
=
null
;
}
else
if
(
ev
!=
null
&&
ev
.
getAction
()
==
MotionEvent
.
ACTION_MOVE
&&
ev
.
getPointerId
(
0
)
==
startedTrackingPointerId
)
{
if
(
velocityTracker
==
null
)
{
velocityTracker
=
VelocityTracker
.
obtain
();
}
int
dx
=
(
int
)
(
ev
.
getX
()
-
startedTrackingX
);
int
dy
=
Math
.
abs
((
int
)
ev
.
getY
()
-
startedTrackingY
);
velocityTracker
.
addMovement
(
ev
);
if
(
maybeStartTracking
&&
!
startedTracking
&&
Math
.
abs
(
dx
)
>=
AndroidUtilities
.
dp
(
10
)
&&
Math
.
abs
(
dx
)
/
3
>
dy
)
{
prepareForDrawerOpen
(
ev
);
}
else
if
(
startedTracking
)
{
if
(!
beginTrackingSent
)
{
if
(
parentActivity
.
getCurrentFocus
()
!=
null
)
{
AndroidUtilities
.
hideKeyboard
(
parentActivity
.
getCurrentFocus
());
}
BaseFragment
currentFragment
=
fragmentsStack
.
get
(
fragmentsStack
.
size
()
-
1
);
currentFragment
.
onBeginSlide
();
beginTrackingSent
=
true
;
}
drawerLayoutContainer
.
moveDrawerByX
(
dx
);
}
}
else
if
(
ev
!=
null
&&
ev
.
getPointerId
(
0
)
==
startedTrackingPointerId
&&
(
ev
.
getAction
()
==
MotionEvent
.
ACTION_CANCEL
||
ev
.
getAction
()
==
MotionEvent
.
ACTION_UP
||
ev
.
getAction
()
==
MotionEvent
.
ACTION_POINTER_UP
))
{
if
(
velocityTracker
==
null
)
{
velocityTracker
=
VelocityTracker
.
obtain
();
}
velocityTracker
.
computeCurrentVelocity
(
1000
);
if
(!
startedTracking
)
{
float
velX
=
velocityTracker
.
getXVelocity
();
float
velY
=
velocityTracker
.
getYVelocity
();
if
(
Math
.
abs
(
velX
)
>=
3500
&&
velX
>
velY
)
{
prepareForDrawerOpen
(
ev
);
}
}
if
(
startedTracking
)
{
float
x
=
ViewProxy
.
getX
(
containerView
);
float
velX
=
velocityTracker
.
getXVelocity
();
float
velY
=
velocityTracker
.
getYVelocity
();
final
boolean
backAnimation
=
x
<
containerView
.
getMeasuredWidth
()
/
3.0f
&&
(
velX
<
3500
||
velX
<
velY
);
float
distToMove
=
0
;
if
(!
backAnimation
)
{
drawerLayoutContainer
.
openDrawer
();
}
else
{
drawerLayoutContainer
.
closeDrawer
();
}
AndroidUtilities
.
unlockOrientation
(
parentActivity
);
startedTracking
=
false
;
animationInProgress
=
false
;
//TODO animation check
}
else
{
maybeStartTracking
=
false
;
startedTracking
=
false
;
}
if
(
velocityTracker
!=
null
)
{
velocityTracker
.
recycle
();
velocityTracker
=
null
;
}
}
else
if
(
ev
==
null
)
{
maybeStartTracking
=
false
;
startedTracking
=
false
;
if
(
velocityTracker
!=
null
)
{
velocityTracker
.
recycle
();
velocityTracker
=
null
;
}
}
}
}
}
return
startedTracking
;
return
startedTracking
;
...
@@ -462,15 +525,7 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -462,15 +525,7 @@ public class ActionBarLayout extends FrameLayout {
if
(
actionBar
.
getVisibility
()
==
View
.
VISIBLE
)
{
if
(
actionBar
.
getVisibility
()
==
View
.
VISIBLE
)
{
height
=
AndroidUtilities
.
getCurrentActionBarHeight
();
height
=
AndroidUtilities
.
getCurrentActionBarHeight
();
}
}
if
(
needStatusBar
)
{
height
+=
AndroidUtilities
.
statusBarHeight
;
}
if
(
actionBar
!=
null
)
{
FrameLayout
.
LayoutParams
layoutParams
=
(
FrameLayout
.
LayoutParams
)
actionBar
.
getLayoutParams
();
layoutParams
.
topMargin
=
needStatusBar
?
AndroidUtilities
.
statusBarHeight
:
0
;
actionBar
.
setLayoutParams
(
layoutParams
);
}
if
(
containerView
!=
null
)
{
if
(
containerView
!=
null
)
{
FrameLayout
.
LayoutParams
layoutParams
=
(
FrameLayout
.
LayoutParams
)
containerView
.
getLayoutParams
();
FrameLayout
.
LayoutParams
layoutParams
=
(
FrameLayout
.
LayoutParams
)
containerView
.
getLayoutParams
();
if
(
layoutParams
.
topMargin
!=
height
)
{
if
(
layoutParams
.
topMargin
!=
height
)
{
...
@@ -560,9 +615,6 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -560,9 +615,6 @@ public class ActionBarLayout extends FrameLayout {
parent
.
bringChildToFront
(
containerView
);
parent
.
bringChildToFront
(
containerView
);
parent
.
bringChildToFront
(
shadowView
);
parent
.
bringChildToFront
(
shadowView
);
parent
.
bringChildToFront
(
actionBar
);
parent
.
bringChildToFront
(
actionBar
);
if
(
drawerLayout
!=
null
)
{
parent
.
bringChildToFront
(
drawerLayout
);
}
if
(!
needAnimation
)
{
if
(!
needAnimation
)
{
presentFragmentInternalRemoveOld
(
removeLast
,
currentFragment
);
presentFragmentInternalRemoveOld
(
removeLast
,
currentFragment
);
...
@@ -857,22 +909,11 @@ public class ActionBarLayout extends FrameLayout {
...
@@ -857,22 +909,11 @@ public class ActionBarLayout extends FrameLayout {
backgroundView
=
view
;
backgroundView
=
view
;
}
}
public
void
setNeedStatusBar
(
boolean
value
)
{
public
void
setDrawerLayout
(
DrawerLayoutContainer
layout
)
{
needStatusBar
=
value
;
drawerLayoutContainer
=
layout
;
setWillNotDraw
(!
needStatusBar
);
}
}
public
void
setStatusBarColor
(
int
color
)
{
public
void
setAllowOpenDrawer
(
boolean
value
)
{
statusBarPaint
.
setColor
(
color
);
allowOpenDrawer
=
value
;
}
public
void
createDrawerLayout
()
{
drawerLayout
=
new
DrawerLayout
(
getContext
());
addView
(
drawerLayout
);
FrameLayout
.
LayoutParams
layoutParams
=
(
FrameLayout
.
LayoutParams
)
drawerLayout
.
getLayoutParams
();
layoutParams
.
gravity
=
Gravity
.
TOP
|
Gravity
.
LEFT
;
layoutParams
.
width
=
AndroidUtilities
.
dp
(
100
);
layoutParams
.
height
=
FrameLayout
.
LayoutParams
.
MATCH_PARENT
;
drawerLayout
.
setLayoutParams
(
layoutParams
);
}
}
}
}
TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/DrawerLayout.java
→
TMessagesProj/src/main/java/org/telegram/ui/Views/ActionBar/DrawerLayout
Container
.java
View file @
65e93f91
...
@@ -9,6 +9,8 @@
...
@@ -9,6 +9,8 @@
package
org
.
telegram
.
ui
.
Views
.
ActionBar
;
package
org
.
telegram
.
ui
.
Views
.
ActionBar
;
import
android.content.Context
;
import
android.content.Context
;
import
android.graphics.Canvas
;
import
android.graphics.Paint
;
import
android.os.Build
;
import
android.os.Build
;
import
android.view.Gravity
;
import
android.view.Gravity
;
import
android.view.View
;
import
android.view.View
;
...
@@ -16,13 +18,25 @@ import android.view.ViewGroup;
...
@@ -16,13 +18,25 @@ import android.view.ViewGroup;
import
android.view.WindowInsets
;
import
android.view.WindowInsets
;
import
android.widget.FrameLayout
;
import
android.widget.FrameLayout
;
public
class
DrawerLayout
extends
FrameLayout
{
import
org.telegram.android.AndroidUtilities
;
import
org.telegram.ui.AnimationCompat.ViewProxy
;
private
Object
mLastInsets
;
public
class
DrawerLayoutContainer
extends
FrameLayout
{
private
static
final
int
MIN_DRAWER_MARGIN
=
64
;
private
View
drawerLayout
;
public
DrawerLayout
(
Context
context
)
{
private
Paint
statusBarPaint
=
new
Paint
();
private
Object
lastInsets
;
private
boolean
inLayout
;
private
int
minDrawerMargin
;
private
float
drawerOffset
;
public
DrawerLayoutContainer
(
Context
context
)
{
super
(
context
);
super
(
context
);
minDrawerMargin
=
(
int
)
(
MIN_DRAWER_MARGIN
*
AndroidUtilities
.
density
+
0.5f
);
setDescendantFocusability
(
ViewGroup
.
FOCUS_AFTER_DESCENDANTS
);
setDescendantFocusability
(
ViewGroup
.
FOCUS_AFTER_DESCENDANTS
);
setFocusableInTouchMode
(
true
);
setFocusableInTouchMode
(
true
);
...
@@ -32,23 +46,23 @@ public class DrawerLayout extends FrameLayout {
...
@@ -32,23 +46,23 @@ public class DrawerLayout extends FrameLayout {
}
}
}
}
static
class
InsetsListener
implements
View
.
OnApplyWindowInsetsListener
{
private
class
InsetsListener
implements
View
.
OnApplyWindowInsetsListener
{
@Override
@Override
public
WindowInsets
onApplyWindowInsets
(
View
v
,
WindowInsets
insets
)
{
public
WindowInsets
onApplyWindowInsets
(
View
v
,
WindowInsets
insets
)
{
final
DrawerLayout
drawerLayout
=
(
DrawerLayout
)
v
;
final
DrawerLayout
Container
drawerLayout
=
(
DrawerLayoutContainer
)
v
;
drawerLayout
.
setChildInsets
(
insets
,
insets
.
getSystemWindowInsetTop
()
>
0
);
drawerLayout
.
setChildInsets
(
insets
,
insets
.
getSystemWindowInsetTop
()
>
0
);
return
insets
.
consumeSystemWindowInsets
();
return
insets
.
consumeSystemWindowInsets
();
}
}
}
}
p
ublic
void
configureApplyInsets
(
View
drawerLayout
)
{
p
rivate
void
configureApplyInsets
(
View
drawerLayout
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
drawerLayout
.
setOnApplyWindowInsetsListener
(
new
InsetsListener
());
drawerLayout
.
setOnApplyWindowInsetsListener
(
new
InsetsListener
());
drawerLayout
.
setSystemUiVisibility
(
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
|
View
.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
drawerLayout
.
setSystemUiVisibility
(
View
.
SYSTEM_UI_FLAG_LAYOUT_STABLE
|
View
.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
}
}
}
}
p
ublic
void
dispatchChildInsets
(
View
child
,
Object
insets
,
int
drawerGravity
)
{
p
rivate
void
dispatchChildInsets
(
View
child
,
Object
insets
,
int
drawerGravity
)
{
WindowInsets
wi
=
(
WindowInsets
)
insets
;
WindowInsets
wi
=
(
WindowInsets
)
insets
;
if
(
drawerGravity
==
Gravity
.
LEFT
)
{
if
(
drawerGravity
==
Gravity
.
LEFT
)
{
wi
=
wi
.
replaceSystemWindowInsets
(
wi
.
getSystemWindowInsetLeft
(),
wi
.
getSystemWindowInsetTop
(),
0
,
wi
.
getSystemWindowInsetBottom
());
wi
=
wi
.
replaceSystemWindowInsets
(
wi
.
getSystemWindowInsetLeft
(),
wi
.
getSystemWindowInsetTop
(),
0
,
wi
.
getSystemWindowInsetBottom
());
...
@@ -58,7 +72,7 @@ public class DrawerLayout extends FrameLayout {
...
@@ -58,7 +72,7 @@ public class DrawerLayout extends FrameLayout {
child
.
dispatchApplyWindowInsets
(
wi
);
child
.
dispatchApplyWindowInsets
(
wi
);
}
}
p
ublic
void
applyMarginInsets
(
MarginLayoutParams
lp
,
Object
insets
,
int
drawerGravity
)
{
p
rivate
void
applyMarginInsets
(
MarginLayoutParams
lp
,
Object
insets
,
int
drawerGravity
)
{
WindowInsets
wi
=
(
WindowInsets
)
insets
;
WindowInsets
wi
=
(
WindowInsets
)
insets
;
if
(
drawerGravity
==
Gravity
.
LEFT
)
{
if
(
drawerGravity
==
Gravity
.
LEFT
)
{
wi
=
wi
.
replaceSystemWindowInsets
(
wi
.
getSystemWindowInsetLeft
(),
wi
.
getSystemWindowInsetTop
(),
0
,
wi
.
getSystemWindowInsetBottom
());
wi
=
wi
.
replaceSystemWindowInsets
(
wi
.
getSystemWindowInsetLeft
(),
wi
.
getSystemWindowInsetTop
(),
0
,
wi
.
getSystemWindowInsetBottom
());
...
@@ -71,19 +85,135 @@ public class DrawerLayout extends FrameLayout {
...
@@ -71,19 +85,135 @@ public class DrawerLayout extends FrameLayout {
lp
.
bottomMargin
=
wi
.
getSystemWindowInsetBottom
();
lp
.
bottomMargin
=
wi
.
getSystemWindowInsetBottom
();
}
}
p
ublic
int
getTopInset
(
Object
insets
)
{
p
rivate
int
getTopInset
(
Object
insets
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
return
insets
!=
null
?
((
WindowInsets
)
insets
).
getSystemWindowInsetTop
()
:
0
;
return
insets
!=
null
?
((
WindowInsets
)
insets
).
getSystemWindowInsetTop
()
:
0
;
}
}
return
0
;
return
0
;
}
}
p
ublic
void
setChildInsets
(
Object
insets
,
boolean
draw
)
{
p
rivate
void
setChildInsets
(
Object
insets
,
boolean
draw
)
{
mL
astInsets
=
insets
;
l
astInsets
=
insets
;
setWillNotDraw
(!
draw
&&
getBackground
()
==
null
);
setWillNotDraw
(!
draw
&&
getBackground
()
==
null
);
requestLayout
();
requestLayout
();
}
}
public
void
setStatusBarColor
(
int
color
)
{
statusBarPaint
.
setColor
(
color
);
}
public
void
setDrawerLayout
(
View
layout
)
{
drawerLayout
=
layout
;
addView
(
drawerLayout
);
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
drawerLayout
.
setFitsSystemWindows
(
true
);
}
}
public
void
moveDrawerByX
(
int
dx
)
{
if
(
dx
>
drawerLayout
.
getMeasuredWidth
())
{
dx
=
drawerLayout
.
getMeasuredWidth
();
}
ViewProxy
.
setTranslationX
(
drawerLayout
,
dx
);
final
int
newVisibility
=
dx
>
0
?
VISIBLE
:
INVISIBLE
;
if
(
drawerLayout
.
getVisibility
()
!=
newVisibility
)
{
drawerLayout
.
setVisibility
(
newVisibility
);
}
}
public
void
openDrawer
()
{
}
public
void
closeDrawer
()
{
}
public
View
getDrawerLayout
()
{
return
drawerLayout
;
}
@Override
protected
void
onDraw
(
Canvas
canvas
)
{
super
.
onDraw
(
canvas
);
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
canvas
.
drawRect
(
0
,
0
,
getWidth
(),
AndroidUtilities
.
statusBarHeight
,
statusBarPaint
);
}
}
@Override
protected
void
onLayout
(
boolean
changed
,
int
l
,
int
t
,
int
r
,
int
b
)
{
inLayout
=
true
;
final
int
width
=
r
-
l
;
final
int
childCount
=
getChildCount
();
for
(
int
i
=
0
;
i
<
childCount
;
i
++)
{
final
View
child
=
getChildAt
(
i
);
if
(
child
.
getVisibility
()
==
GONE
)
{
continue
;
}
final
LayoutParams
lp
=
(
LayoutParams
)
child
.
getLayoutParams
();
if
(
drawerLayout
!=
child
)
{
child
.
layout
(
lp
.
leftMargin
,
lp
.
topMargin
,
lp
.
leftMargin
+
child
.
getMeasuredWidth
(),
lp
.
topMargin
+
child
.
getMeasuredHeight
());
}
else
{
child
.
layout
(-
child
.
getMeasuredWidth
(),
lp
.
topMargin
,
0
,
lp
.
topMargin
+
child
.
getMeasuredHeight
());
}
}
inLayout
=
false
;
}
@Override
public
void
requestLayout
()
{
if
(!
inLayout
)
{
super
.
requestLayout
();
}
}
@Override
protected
void
onMeasure
(
int
widthMeasureSpec
,
int
heightMeasureSpec
)
{
int
widthMode
=
MeasureSpec
.
getMode
(
widthMeasureSpec
);
int
heightMode
=
MeasureSpec
.
getMode
(
heightMeasureSpec
);
int
widthSize
=
MeasureSpec
.
getSize
(
widthMeasureSpec
);
int
heightSize
=
MeasureSpec
.
getSize
(
heightMeasureSpec
);
setMeasuredDimension
(
widthSize
,
heightSize
);
final
boolean
applyInsets
=
lastInsets
!=
null
&&
Build
.
VERSION
.
SDK_INT
>=
21
;
int
foundDrawers
=
0
;
final
int
childCount
=
getChildCount
();
for
(
int
i
=
0
;
i
<
childCount
;
i
++)
{
final
View
child
=
getChildAt
(
i
);
if
(
child
.
getVisibility
()
==
GONE
)
{
continue
;
}
final
LayoutParams
lp
=
(
LayoutParams
)
child
.
getLayoutParams
();
if
(
applyInsets
)
{
if
(
child
.
getFitsSystemWindows
())
{
dispatchChildInsets
(
child
,
lastInsets
,
lp
.
gravity
);
}
else
{
applyMarginInsets
(
lp
,
lastInsets
,
lp
.
gravity
);
}
}
if
(
drawerLayout
!=
child
)
{
final
int
contentWidthSpec
=
MeasureSpec
.
makeMeasureSpec
(
widthSize
-
lp
.
leftMargin
-
lp
.
rightMargin
,
MeasureSpec
.
EXACTLY
);
final
int
contentHeightSpec
=
MeasureSpec
.
makeMeasureSpec
(
heightSize
-
lp
.
topMargin
-
lp
.
bottomMargin
,
MeasureSpec
.
EXACTLY
);
child
.
measure
(
contentWidthSpec
,
contentHeightSpec
);
}
else
{
final
int
drawerWidthSpec
=
getChildMeasureSpec
(
widthMeasureSpec
,
minDrawerMargin
+
lp
.
leftMargin
+
lp
.
rightMargin
,
lp
.
width
);
final
int
drawerHeightSpec
=
getChildMeasureSpec
(
heightMeasureSpec
,
lp
.
topMargin
+
lp
.
bottomMargin
,
lp
.
height
);
child
.
measure
(
drawerWidthSpec
,
drawerHeightSpec
);
}
}
}
/*private static final int MIN_DRAWER_MARGIN = 64; // dp
/*private static final int MIN_DRAWER_MARGIN = 64; // dp
...
@@ -164,18 +294,6 @@ public class DrawerLayout extends FrameLayout {
...
@@ -164,18 +294,6 @@ public class DrawerLayout extends FrameLayout {
}
}
}
}
static {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
IMPL = new DrawerLayoutCompatImplApi21();
} else {
IMPL = new DrawerLayoutCompatImplBase();
}
}
static final DrawerLayoutCompatImpl IMPL;
public void setDrawerShadow(Drawable shadowDrawable, @EdgeGravity int gravity) {
public void setDrawerShadow(Drawable shadowDrawable, @EdgeGravity int gravity) {
final int absGravity = GravityCompat.getAbsoluteGravity(gravity,
final int absGravity = GravityCompat.getAbsoluteGravity(gravity,
...
@@ -465,160 +583,6 @@ public class DrawerLayout extends FrameLayout {
...
@@ -465,160 +583,6 @@ public class DrawerLayout extends FrameLayout {
mFirstLayout = true;
mFirstLayout = true;
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(widthSize, heightSize);
final boolean applyInsets = mLastInsets != null && ViewCompat.getFitsSystemWindows(this);
final int layoutDirection = ViewCompat.getLayoutDirection(this);
// Gravity value for each drawer we've seen. Only one of each permitted.
int foundDrawers = 0;
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
if (child.getVisibility() == GONE) {
continue;
}
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (applyInsets) {
final int cgrav = GravityCompat.getAbsoluteGravity(lp.gravity, layoutDirection);
if (ViewCompat.getFitsSystemWindows(child)) {
IMPL.dispatchChildInsets(child, mLastInsets, cgrav);
} else {
IMPL.applyMarginInsets(lp, mLastInsets, cgrav);
}
}
if (isContentView(child)) {
// Content views get measured at exactly the layout's size.
final int contentWidthSpec = MeasureSpec.makeMeasureSpec(
widthSize - lp.leftMargin - lp.rightMargin, MeasureSpec.EXACTLY);
final int contentHeightSpec = MeasureSpec.makeMeasureSpec(
heightSize - lp.topMargin - lp.bottomMargin, MeasureSpec.EXACTLY);
child.measure(contentWidthSpec, contentHeightSpec);
} else if (isDrawerView(child)) {
final int childGravity =
getDrawerViewAbsoluteGravity(child) & Gravity.HORIZONTAL_GRAVITY_MASK;
if ((foundDrawers & childGravity) != 0) {
throw new IllegalStateException("Child drawer has absolute gravity " +
gravityToString(childGravity) + " but this " + TAG + " already has a " +
"drawer view along that edge");
}
final int drawerWidthSpec = getChildMeasureSpec(widthMeasureSpec,
mMinDrawerMargin + lp.leftMargin + lp.rightMargin,
lp.width);
final int drawerHeightSpec = getChildMeasureSpec(heightMeasureSpec,
lp.topMargin + lp.bottomMargin,
lp.height);
child.measure(drawerWidthSpec, drawerHeightSpec);
} else {
throw new IllegalStateException("Child " + child + " at index " + i +
" does not have a valid layout_gravity - must be Gravity.LEFT, " +
"Gravity.RIGHT or Gravity.NO_GRAVITY");
}
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
mInLayout = true;
final int width = r - l;
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
if (child.getVisibility() == GONE) {
continue;
}
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (isContentView(child)) {
child.layout(lp.leftMargin, lp.topMargin,
lp.leftMargin + child.getMeasuredWidth(),
lp.topMargin + child.getMeasuredHeight());
} else { // Drawer, if it wasn't onMeasure would have thrown an exception.
final int childWidth = child.getMeasuredWidth();
final int childHeight = child.getMeasuredHeight();
int childLeft;
final float newOffset;
if (checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {
childLeft = -childWidth + (int) (childWidth * lp.onScreen);
newOffset = (float) (childWidth + childLeft) / childWidth;
} else { // Right; onMeasure checked for us.
childLeft = width - (int) (childWidth * lp.onScreen);
newOffset = (float) (width - childLeft) / childWidth;
}
final boolean changeOffset = newOffset != lp.onScreen;
final int vgrav = lp.gravity & Gravity.VERTICAL_GRAVITY_MASK;
switch (vgrav) {
default:
case Gravity.TOP: {
child.layout(childLeft, lp.topMargin, childLeft + childWidth,
lp.topMargin + childHeight);
break;
}
case Gravity.BOTTOM: {
final int height = b - t;
child.layout(childLeft,
height - lp.bottomMargin - child.getMeasuredHeight(),
childLeft + childWidth,
height - lp.bottomMargin);
break;
}
case Gravity.CENTER_VERTICAL: {
final int height = b - t;
int childTop = (height - childHeight) / 2;
// Offset for margins. If things don't fit right because of
// bad measurement before, oh well.
if (childTop < lp.topMargin) {
childTop = lp.topMargin;
} else if (childTop + childHeight > height - lp.bottomMargin) {
childTop = height - lp.bottomMargin - childHeight;
}
child.layout(childLeft, childTop, childLeft + childWidth,
childTop + childHeight);
break;
}
}
if (changeOffset) {
setDrawerViewOffset(child, newOffset);
}
final int newVisibility = lp.onScreen > 0 ? VISIBLE : INVISIBLE;
if (child.getVisibility() != newVisibility) {
child.setVisibility(newVisibility);
}
}
}
mInLayout = false;
mFirstLayout = false;
}
@Override
public void requestLayout() {
if (!mInLayout) {
super.requestLayout();
}
}
@Override
@Override
public void computeScroll() {
public void computeScroll() {
final int childCount = getChildCount();
final int childCount = getChildCount();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment