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
d3afc836
Commit
d3afc836
authored
Jul 10, 2014
by
DrKLO
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Notification improvements
parent
c549e8bc
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1768 additions
and
678 deletions
+1768
-678
build.gradle
TMessagesProj/build.gradle
+2
-2
MediaController.java
...j/src/main/java/org/telegram/android/MediaController.java
+11
-58
MessagesController.java
...rc/main/java/org/telegram/android/MessagesController.java
+147
-522
NotificationsController.java
...in/java/org/telegram/android/NotificationsController.java
+540
-0
MessageObject.java
...roj/src/main/java/org/telegram/objects/MessageObject.java
+4
-0
ChatActivity.java
...sagesProj/src/main/java/org/telegram/ui/ChatActivity.java
+12
-6
LaunchActivity.java
...gesProj/src/main/java/org/telegram/ui/LaunchActivity.java
+5
-1
PopupNotificationActivity.java
.../main/java/org/telegram/ui/PopupNotificationActivity.java
+580
-37
AvatarUpdater.java
...oj/src/main/java/org/telegram/ui/Views/AvatarUpdater.java
+2
-2
ChatActivityEnterView.java
...ain/java/org/telegram/ui/Views/ChatActivityEnterView.java
+6
-2
ImageReceiver.java
...oj/src/main/java/org/telegram/ui/Views/ImageReceiver.java
+30
-18
PopupAudioView.java
...j/src/main/java/org/telegram/ui/Views/PopupAudioView.java
+359
-0
popup_audio_layout.xml
TMessagesProj/src/main/res/layout/popup_audio_layout.xml
+17
-0
popup_image_layout.xml
TMessagesProj/src/main/res/layout/popup_image_layout.xml
+25
-0
popup_notification_layout.xml
...gesProj/src/main/res/layout/popup_notification_layout.xml
+0
-30
popup_text_layout.xml
TMessagesProj/src/main/res/layout/popup_text_layout.xml
+28
-0
No files found.
TMessagesProj/build.gradle
View file @
d3afc836
...
...
@@ -82,7 +82,7 @@ android {
defaultConfig
{
minSdkVersion
8
targetSdkVersion
19
versionCode
2
69
versionName
"1.
5.8
"
versionCode
2
70
versionName
"1.
6.0
"
}
}
TMessagesProj/src/main/java/org/telegram/android/MediaController.java
View file @
d3afc836
...
...
@@ -18,7 +18,6 @@ import android.media.AudioRecord;
import
android.media.AudioTrack
;
import
android.media.MediaPlayer
;
import
android.media.MediaRecorder
;
import
android.media.audiofx.AutomaticGainControl
;
import
android.net.Uri
;
import
android.os.Environment
;
import
android.os.ParcelFileDescriptor
;
...
...
@@ -165,7 +164,6 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
private
final
Integer
progressTimerSync
=
1
;
private
AudioRecord
audioRecorder
=
null
;
private
Object
audioGainObj
=
null
;
private
TLRPC
.
TL_audio
recordingAudio
=
null
;
private
File
recordingAudioFile
=
null
;
private
long
recordStartTime
;
...
...
@@ -879,7 +877,9 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
if
(
currentTotalPcmDuration
*
progress
==
currentTotalPcmDuration
)
{
return
;
}
audioTrackPlayer
.
pause
();
if
(!
isPaused
)
{
audioTrackPlayer
.
pause
();
}
audioTrackPlayer
.
flush
();
fileDecodingQueue
.
postRunnable
(
new
Runnable
()
{
@Override
...
...
@@ -892,14 +892,15 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
Utilities
.
RunOnUIThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
ignoreFirstProgress
=
3
;
//audioTrackPlayer.setNotificationMarkerPosition((int)(currentTotalPcmDuration * (1 - playingMessageObject.audioProgress)));
lastPlayPcm
=
(
long
)(
currentTotalPcmDuration
*
progress
);
if
(
audioTrackPlayer
!=
null
)
{
audioTrackPlayer
.
play
();
if
(!
isPaused
)
{
ignoreFirstProgress
=
3
;
lastPlayPcm
=
(
long
)
(
currentTotalPcmDuration
*
progress
);
if
(
audioTrackPlayer
!=
null
)
{
audioTrackPlayer
.
play
();
}
lastProgress
=
(
int
)
(
currentTotalPcmDuration
/
48.0f
*
progress
);
checkPlayerQueue
();
}
lastProgress
=
(
int
)(
currentTotalPcmDuration
/
48.0f
*
progress
);
checkPlayerQueue
();
}
});
}
...
...
@@ -1176,31 +1177,6 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
recordDialogId
=
dialog_id
;
fileBuffer
.
rewind
();
if
(
android
.
os
.
Build
.
VERSION
.
SDK_INT
>=
16
)
{
File
f
=
new
File
(
"/vendor/lib/libaudioeffect_jni.so"
);
File
f2
=
new
File
(
"/system/lib/libaudioeffect_jni.so"
);
if
(
f
.
exists
()
||
f2
.
exists
())
{
AutomaticGainControl
agc
=
null
;
try
{
if
(
AutomaticGainControl
.
isAvailable
())
{
agc
=
AutomaticGainControl
.
create
(
audioRecorder
.
getAudioSessionId
());
agc
.
setEnabled
(
true
);
audioGainObj
=
agc
;
}
}
catch
(
Exception
e
)
{
try
{
if
(
agc
!=
null
)
{
agc
.
release
();
agc
=
null
;
}
}
catch
(
Exception
e2
)
{
FileLog
.
e
(
"tmessages"
,
e2
);
}
FileLog
.
e
(
"tmessages"
,
e
);
}
}
}
audioRecorder
.
startRecording
();
}
catch
(
Exception
e
)
{
FileLog
.
e
(
"tmessages"
,
e
);
...
...
@@ -1215,18 +1191,6 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
FileLog
.
e
(
"tmessages"
,
e2
);
}
if
(
android
.
os
.
Build
.
VERSION
.
SDK_INT
>=
16
&&
audioGainObj
!=
null
)
{
AutomaticGainControl
agc
=
(
AutomaticGainControl
)
audioGainObj
;
try
{
if
(
agc
!=
null
)
{
agc
.
release
();
agc
=
null
;
}
}
catch
(
Exception
e2
)
{
FileLog
.
e
(
"tmessages"
,
e2
);
}
}
Utilities
.
RunOnUIThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
...
...
@@ -1279,17 +1243,6 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
audioRecorder
.
release
();
audioRecorder
=
null
;
}
if
(
android
.
os
.
Build
.
VERSION
.
SDK_INT
>=
16
&&
audioGainObj
!=
null
)
{
AutomaticGainControl
agc
=
(
AutomaticGainControl
)
audioGainObj
;
try
{
if
(
agc
!=
null
)
{
agc
.
release
();
agc
=
null
;
}
}
catch
(
Exception
e2
)
{
FileLog
.
e
(
"tmessages"
,
e2
);
}
}
}
catch
(
Exception
e
)
{
FileLog
.
e
(
"tmessages"
,
e
);
}
...
...
TMessagesProj/src/main/java/org/telegram/android/MessagesController.java
View file @
d3afc836
This diff is collapsed.
Click to expand it.
TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java
0 → 100644
View file @
d3afc836
This diff is collapsed.
Click to expand it.
TMessagesProj/src/main/java/org/telegram/objects/MessageObject.java
View file @
d3afc836
...
...
@@ -541,6 +541,10 @@ public class MessageObject {
return
messageOwner
.
from_id
==
UserConfig
.
getClientUserId
();
}
public
boolean
isUnread
()
{
return
messageOwner
.
unread
;
}
public
long
getDialogId
()
{
if
(
messageOwner
.
dialog_id
!=
0
)
{
return
messageOwner
.
dialog_id
;
...
...
TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
View file @
d3afc836
...
...
@@ -31,6 +31,7 @@ import android.text.TextUtils;
import
android.util.TypedValue
;
import
android.view.Gravity
;
import
android.view.LayoutInflater
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewParent
;
...
...
@@ -51,6 +52,7 @@ import org.telegram.PhoneFormat.PhoneFormat;
import
org.telegram.android.LocaleController
;
import
org.telegram.android.MediaController
;
import
org.telegram.android.MessagesStorage
;
import
org.telegram.android.NotificationsController
;
import
org.telegram.messenger.TLRPC
;
import
org.telegram.android.ContactsController
;
import
org.telegram.messenger.FileLog
;
...
...
@@ -334,12 +336,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if
(
currentChat
!=
null
)
{
downloadPhotos
=
preferences
.
getInt
(
"photo_download_chat2"
,
0
);
}
else
{
downloadPhotos
=
preferences
.
getInt
(
"photo_download_user2"
,
0
);
}
if
(
currentChat
!=
null
)
{
downloadAudios
=
preferences
.
getInt
(
"audio_download_chat2"
,
0
);
}
else
{
downloadPhotos
=
preferences
.
getInt
(
"photo_download_user2"
,
0
);
downloadAudios
=
preferences
.
getInt
(
"audio_download_user2"
,
0
);
}
...
...
@@ -567,6 +566,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
selectedMessagesCountTextView
.
setEllipsize
(
TextUtils
.
TruncateAt
.
END
);
selectedMessagesCountTextView
.
setPadding
(
AndroidUtilities
.
dp
(
6
),
0
,
0
,
0
);
selectedMessagesCountTextView
.
setGravity
(
Gravity
.
CENTER_VERTICAL
);
selectedMessagesCountTextView
.
setOnTouchListener
(
new
View
.
OnTouchListener
()
{
@Override
public
boolean
onTouch
(
View
v
,
MotionEvent
event
)
{
return
true
;
}
});
actionMode
.
addView
(
selectedMessagesCountTextView
);
layoutParams
=
(
LinearLayout
.
LayoutParams
)
selectedMessagesCountTextView
.
getLayoutParams
();
layoutParams
.
weight
=
1
;
...
...
@@ -2335,7 +2340,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if
(
chatAdapter
!=
null
)
{
chatAdapter
.
notifyDataSetChanged
();
}
MessagesController
.
getInstance
().
openned_dialog_id
=
dialog_id
;
NotificationsController
.
getInstance
().
setOpennedDialogId
(
dialog_id
)
;
if
(
scrollToTopOnResume
)
{
if
(
scrollToTopUnReadOnResume
&&
unreadMessageObject
!=
null
)
{
if
(
chatListView
!=
null
)
{
...
...
@@ -2421,7 +2426,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
actionBarLayer
.
hideActionMode
();
chatActivityEnterView
.
hideEmojiPopup
();
paused
=
true
;
MessagesController
.
getInstance
().
openned_dialog_id
=
0
;
NotificationsController
.
getInstance
().
setOpennedDialogId
(
0
)
;
String
text
=
chatActivityEnterView
.
getFieldText
();
if
(
text
!=
null
)
{
...
...
@@ -3468,6 +3473,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
addContactView
.
setVisibility
(
View
.
GONE
);
}
}
else
if
(
type
==
7
)
{
messageTextView
.
setTextSize
(
16
);
messageTextView
.
setText
(
LocaleController
.
formatPluralString
(
"NewMessages"
,
unread_to_load
));
}
else
if
(
type
==
8
||
type
==
9
)
{
TLRPC
.
Document
document
=
message
.
messageOwner
.
media
.
document
;
...
...
TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java
View file @
d3afc836
...
...
@@ -512,7 +512,6 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
ApplicationLoader
.
mainInterfacePaused
=
false
;
ConnectionsManager
.
getInstance
().
setAppPaused
(
false
,
false
);
actionBar
.
setBackOverlayVisible
(
currentConnectionState
!=
0
);
MessagesController
.
getInstance
().
dismissNotification
();
}
@Override
...
...
@@ -647,4 +646,9 @@ public class LaunchActivity extends ActionBarActivity implements NotificationCen
}
return
super
.
onPreIme
();
}
@Override
public
void
onLowMemory
()
{
super
.
onLowMemory
();
}
}
TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java
View file @
d3afc836
This diff is collapsed.
Click to expand it.
TMessagesProj/src/main/java/org/telegram/ui/Views/AvatarUpdater.java
View file @
d3afc836
...
...
@@ -118,8 +118,8 @@ public class AvatarUpdater implements NotificationCenter.NotificationCenterDeleg
if
(
bitmap
==
null
)
{
return
;
}
smallPhoto
=
FileLoader
.
scaleAndSaveImage
(
bitmap
,
100
,
100
,
8
7
,
false
);
bigPhoto
=
FileLoader
.
scaleAndSaveImage
(
bitmap
,
800
,
800
,
8
7
,
false
);
smallPhoto
=
FileLoader
.
scaleAndSaveImage
(
bitmap
,
100
,
100
,
8
0
,
false
);
bigPhoto
=
FileLoader
.
scaleAndSaveImage
(
bitmap
,
800
,
800
,
8
0
,
false
);
if
(
bigPhoto
!=
null
&&
smallPhoto
!=
null
)
{
if
(
returnOnly
)
{
if
(
delegate
!=
null
)
{
...
...
TMessagesProj/src/main/java/org/telegram/ui/Views/ChatActivityEnterView.java
View file @
d3afc836
...
...
@@ -96,6 +96,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
NotificationCenter
.
getInstance
().
removeObserver
(
this
,
MediaController
.
recordStopped
);
NotificationCenter
.
getInstance
().
removeObserver
(
this
,
MediaController
.
recordProgressChanged
);
NotificationCenter
.
getInstance
().
removeObserver
(
this
,
MessagesController
.
closeChats
);
NotificationCenter
.
getInstance
().
removeObserver
(
this
,
MediaController
.
audioDidSent
);
NotificationCenter
.
getInstance
().
removeObserver
(
this
,
999
);
if
(
mWakeLock
!=
null
)
{
try
{
...
...
@@ -197,6 +198,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
startedDraggingX
=
-
1
;
MediaController
.
getInstance
().
startRecording
(
dialog_id
);
updateAudioRecordIntefrace
();
audioSendButton
.
getParent
().
requestDisallowInterceptTouchEvent
(
true
);
}
else
if
(
motionEvent
.
getAction
()
==
MotionEvent
.
ACTION_UP
||
motionEvent
.
getAction
()
==
MotionEvent
.
ACTION_CANCEL
)
{
startedDraggingX
=
-
1
;
MediaController
.
getInstance
().
stopRecording
(
true
);
...
...
@@ -590,8 +592,10 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
sizeNotifierRelativeLayout
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
sizeNotifierRelativeLayout
.
setPadding
(
0
,
0
,
0
,
layoutParams
.
height
);
sizeNotifierRelativeLayout
.
requestLayout
();
if
(
sizeNotifierRelativeLayout
!=
null
)
{
sizeNotifierRelativeLayout
.
setPadding
(
0
,
0
,
0
,
layoutParams
.
height
);
sizeNotifierRelativeLayout
.
requestLayout
();
}
}
});
}
...
...
TMessagesProj/src/main/java/org/telegram/ui/Views/ImageReceiver.java
View file @
d3afc836
...
...
@@ -35,6 +35,7 @@ public class ImageReceiver {
public
Rect
drawRegion
=
new
Rect
();
private
boolean
isVisible
=
true
;
private
boolean
selfSetting
=
false
;
public
boolean
isAspectFit
=
false
;
public
void
setImage
(
TLRPC
.
FileLocation
path
,
String
filter
,
Drawable
placeholder
)
{
setImage
(
path
,
null
,
filter
,
placeholder
,
0
);
...
...
@@ -188,28 +189,39 @@ public class ImageReceiver {
float
scaleW
=
bitmapW
/
(
float
)
w
;
float
scaleH
=
bitmapH
/
(
float
)
h
;
if
(
Math
.
abs
(
scaleW
-
scaleH
)
>
0.00001f
)
{
if
(
isAspectFit
)
{
float
scale
=
Math
.
max
(
scaleW
,
scaleH
);
canvas
.
save
();
canvas
.
clipRect
(
x
,
y
,
x
+
w
,
y
+
h
);
if
(
bitmapW
/
scaleH
>
w
)
{
bitmapW
/=
scaleH
;
drawRegion
.
set
(
x
-
(
bitmapW
-
w
)
/
2
,
y
,
x
+
(
bitmapW
+
w
)
/
2
,
y
+
h
);
}
else
{
bitmapH
/=
scaleW
;
drawRegion
.
set
(
x
,
y
-
(
bitmapH
-
h
)
/
2
,
x
+
w
,
y
+
(
bitmapH
+
h
)
/
2
);
}
bitmapW
/=
scale
;
bitmapH
/=
scale
;
drawRegion
.
set
(
x
+
(
w
-
bitmapW
)
/
2
,
y
+
(
h
-
bitmapH
)
/
2
,
x
+
(
w
+
bitmapW
)
/
2
,
y
+
(
h
+
bitmapH
)
/
2
);
bitmapDrawable
.
setBounds
(
drawRegion
);
if
(
isVisible
)
{
bitmapDrawable
.
draw
(
canvas
);
}
bitmapDrawable
.
draw
(
canvas
);
canvas
.
restore
();
}
else
{
drawRegion
.
set
(
x
,
y
,
x
+
w
,
y
+
h
);
bitmapDrawable
.
setBounds
(
drawRegion
);
if
(
isVisible
)
{
bitmapDrawable
.
draw
(
canvas
);
if
(
Math
.
abs
(
scaleW
-
scaleH
)
>
0.00001f
)
{
canvas
.
save
();
canvas
.
clipRect
(
x
,
y
,
x
+
w
,
y
+
h
);
if
(
bitmapW
/
scaleH
>
w
)
{
bitmapW
/=
scaleH
;
drawRegion
.
set
(
x
-
(
bitmapW
-
w
)
/
2
,
y
,
x
+
(
bitmapW
+
w
)
/
2
,
y
+
h
);
}
else
{
bitmapH
/=
scaleW
;
drawRegion
.
set
(
x
,
y
-
(
bitmapH
-
h
)
/
2
,
x
+
w
,
y
+
(
bitmapH
+
h
)
/
2
);
}
bitmapDrawable
.
setBounds
(
drawRegion
);
if
(
isVisible
)
{
bitmapDrawable
.
draw
(
canvas
);
}
canvas
.
restore
();
}
else
{
drawRegion
.
set
(
x
,
y
,
x
+
w
,
y
+
h
);
bitmapDrawable
.
setBounds
(
drawRegion
);
if
(
isVisible
)
{
bitmapDrawable
.
draw
(
canvas
);
}
}
}
}
else
if
(
last_placeholder
!=
null
)
{
...
...
TMessagesProj/src/main/java/org/telegram/ui/Views/PopupAudioView.java
0 → 100644
View file @
d3afc836
This diff is collapsed.
Click to expand it.
TMessagesProj/src/main/res/layout/popup_audio_layout.xml
0 → 100644
View file @
d3afc836
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:id=
"@+id/text_container"
android:background=
"@drawable/list_selector"
android:layout_gravity=
"top"
>
<FrameLayout
android:layout_height=
"wrap_content"
android:layout_width=
"match_parent"
android:layout_marginLeft=
"20dp"
android:layout_marginRight=
"20dp"
android:layout_gravity=
"center"
android:id=
"@+id/audio_container"
/>
</FrameLayout>
\ No newline at end of file
TMessagesProj/src/main/res/layout/popup_image_layout.xml
0 → 100644
View file @
d3afc836
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"top"
android:id=
"@+id/text_container"
android:padding=
"10dp"
android:background=
"@drawable/list_selector"
>
<org.telegram.ui.Views.BackupImageView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:id=
"@+id/message_image"
android:layout_gravity=
"center"
/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"16dp"
android:textColor=
"#ff000000"
android:id=
"@+id/message_text"
android:gravity=
"center"
android:layout_gravity=
"center"
/>
</FrameLayout>
\ No newline at end of file
TMessagesProj/src/main/res/layout/popup_notification_layout.xml
View file @
d3afc836
...
...
@@ -19,35 +19,6 @@
android:layout_marginRight=
"12dp"
android:id=
"@+id/popup_container"
>
<ScrollView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"48dp"
android:layout_marginTop=
"48dp"
android:fillViewport=
"true"
android:id=
"@+id/text_scroll"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:padding=
"10dp"
android:id=
"@+id/text_container"
android:background=
"@drawable/list_selector"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"16dp"
android:textColor=
"#ff000000"
android:id=
"@+id/message_text"
android:gravity=
"center"
android:layout_gravity=
"center"
/>
</LinearLayout>
</ScrollView>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
@@ -93,7 +64,6 @@
android:textSize=
"18dp"
android:textColorHint=
"#909090"
android:ems=
"10"
android:imeOptions=
"flagNoExtractUi"
android:inputType=
"textCapSentences|textMultiLine"
android:layout_alignParentTop=
"true"
android:paddingBottom=
"12dp"
...
...
TMessagesProj/src/main/res/layout/popup_text_layout.xml
0 → 100644
View file @
d3afc836
<ScrollView
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fillViewport=
"true"
android:id=
"@+id/text_scroll"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:padding=
"10dp"
android:id=
"@+id/text_container"
android:background=
"@drawable/list_selector"
android:orientation=
"horizontal"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"16dp"
android:textColor=
"#ff000000"
android:id=
"@+id/message_text"
android:gravity=
"center"
android:layout_gravity=
"center"
/>
</LinearLayout>
</ScrollView>
\ No newline at end of file
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