Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
Talking Reminder
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
RAUSHAN RAJ
Talking Reminder
Commits
bd380d58
Commit
bd380d58
authored
Nov 27, 2019
by
PANKAJ KUMAR
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "MainActivity Documentation"
This reverts commit
90e6fe4b
parent
90e6fe4b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
83 additions
and
172 deletions
+83
-172
app/src/main/java/com/sudogeeks/talking_reminder/MainActivity.java
...ain/java/com/sudogeeks/talking_reminder/MainActivity.java
+53
-172
app/src/main/res/drawable/ic_access_time.xml
app/src/main/res/drawable/ic_access_time.xml
+5
-0
app/src/main/res/drawable/ic_notifications_active_black.xml
app/src/main/res/drawable/ic_notifications_active_black.xml
+9
-0
app/src/main/res/drawable/ic_notifications_off_black.xml
app/src/main/res/drawable/ic_notifications_off_black.xml
+9
-0
app/src/main/res/drawable/ic_sync.xml
app/src/main/res/drawable/ic_sync.xml
+5
-0
app/src/main/res/raw/sample.mp3
app/src/main/res/raw/sample.mp3
+0
-0
app/src/main/res/values/colors.xml
app/src/main/res/values/colors.xml
+2
-0
No files found.
app/src/main/java/com/sudogeeks/talking_reminder/MainActivity.java
View file @
bd380d58
...
...
@@ -45,12 +45,8 @@ import java.util.Comparator;
import
java.util.LinkedHashMap
;
import
java.util.List
;
/**
* \brief Main Activity class
* This activity is the entry point of the app and is responsible for handling User Authentication and Landing page view
*/
public
class
MainActivity
extends
AppCompatActivity
{
private
static
final
int
RC_SIGN_IN
=
123
;
// Choose an arbitrary request code value
private
RecyclerView
reminderListView
;
private
SimpleAdapter
mAdapter
;
private
Toolbar
mToolbar
;
...
...
@@ -61,12 +57,15 @@ public class MainActivity extends AppCompatActivity {
private
ReminderDatabase
rb
;
private
MultiSelector
mMultiSelector
=
new
MultiSelector
();
private
AlarmReceiver
mAlarmReceiver
;
private
FirebaseDatabase
firebaseDatabase
;
//Entrypoint for our firebase database
private
DatabaseReference
reminderDatabaseReference
;
//To references specific part of the database
private
ChildEventListener
dbChildEventListener
;
//No notify the app whenever data changes in firebase database
private
FirebaseAuth
firebaseAuth
;
//For User authentication
private
FirebaseAuth
.
AuthStateListener
authStateListener
;
//Listener which invokes whenever auth state changes
private
ArrayList
<
ReminderDO
>
reminderDOArrayList
=
new
ArrayList
<>();
private
static
final
int
RC_SIGN_IN
=
123
;
// Choose an arbitrary request code value
// Multi select items in recycler view
private
ModalMultiSelectorCallback
mDeleteMode
=
new
ModalMultiSelectorCallback
(
mMultiSelector
)
{
...
...
@@ -76,12 +75,6 @@ public class MainActivity extends AppCompatActivity {
return
true
;
}
/** Defines the behaviour of different menu items
* Overridden Method
* @param actionMode
* @param menuItem
* @return
*/
@Override
public
boolean
onActionItemClicked
(
ActionMode
actionMode
,
MenuItem
menuItem
)
{
switch
(
menuItem
.
getItemId
())
{
...
...
@@ -145,11 +138,6 @@ public class MainActivity extends AppCompatActivity {
}
};
/**onCreate() implementation
* Overridden method. In this method initial life cycle of the app is implemented.
* If user is not authenticated then user is sent for login/signup, else database instance and main view is initialized
* @param savedInstanceState
*/
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
...
...
@@ -159,13 +147,11 @@ public class MainActivity extends AppCompatActivity {
firebaseDatabase
=
FirebaseDatabase
.
getInstance
();
firebaseAuth
=
FirebaseAuth
.
getInstance
();
FirebaseUser
user
=
firebaseAuth
.
getCurrentUser
();
//AuthStateListener: check the user's authentication state. if not signed in the send it for login/signup
authStateListener
=
new
FirebaseAuth
.
AuthStateListener
()
{
@Override
public
void
onAuthStateChanged
(
@NonNull
FirebaseAuth
firebaseAuth
)
{
FirebaseUser
user
=
firebaseAuth
.
getCurrentUser
();
if
(
user
!=
null
)
{
if
(
user
!=
null
)
{
//User is signed in
reminderDatabaseReference
=
firebaseDatabase
.
getReference
().
child
(
"reminders"
).
child
(
user
.
getUid
());
Toast
.
makeText
(
MainActivity
.
this
,
"You're now signed in.\nWelcome to Talking ReminderDO!"
,
Toast
.
LENGTH_SHORT
).
show
();
...
...
@@ -226,33 +212,25 @@ public class MainActivity extends AppCompatActivity {
mAlarmReceiver
=
new
AlarmReceiver
();
}
/* Private Helper method
* This method attaches a listener to the Firebase database reference. The listener listens to any kind of changes in the database.
*
*/
private
void
attachDatabaseReadListener
()
{
//Private Helper methods
private
void
attachDatabaseReadListener
(){
//TODO Attaching Listener to ChildEventListener
if
(
dbChildEventListener
==
null
)
{
//
Create new Event Listener only when no listener is attached yet
if
(
dbChildEventListener
==
null
)
{
//
Only now create new Event Listener
dbChildEventListener
=
new
ChildEventListener
()
{
//Specify what to do when a new entry is added in the database. New entry here means "new Reminder object"
@Override
public
void
onChildAdded
(
@NonNull
DataSnapshot
dataSnapshot
,
@Nullable
String
s
)
{
ReminderDO
reminderObject
=
dataSnapshot
.
getValue
(
ReminderDO
.
class
);
reminderDOArrayList
.
add
(
reminderObject
);
}
@Override
public
void
onChildChanged
(
@NonNull
DataSnapshot
dataSnapshot
,
@Nullable
String
s
)
{
}
@Override
public
void
onChildRemoved
(
@NonNull
DataSnapshot
dataSnapshot
)
{
}
@Override
public
void
onChildMoved
(
@NonNull
DataSnapshot
dataSnapshot
,
@Nullable
String
s
)
{
}
@Override
public
void
onCancelled
(
@NonNull
DatabaseError
databaseError
)
{
}
...
...
@@ -261,21 +239,15 @@ public class MainActivity extends AppCompatActivity {
reminderDatabaseReference
.
addChildEventListener
(
dbChildEventListener
);
}
/* Private helper method
* this method is called to Detach the database listener in the events of logout or app failure
*/
private
void
detachDatabaseReadListener
()
{
private
void
detachDatabaseReadListener
(){
if
(
dbChildEventListener
!=
null
)
{
reminderDatabaseReference
.
removeEventListener
(
dbChildEventListener
);
dbChildEventListener
=
null
;
}
}
/**Define what happens when user closes the app
* Overridden method
*/
@Override
protected
void
onPause
()
{
protected
void
onPause
(){
super
.
onPause
();
if
(
authStateListener
!=
null
)
{
firebaseAuth
.
removeAuthStateListener
(
authStateListener
);
...
...
@@ -284,20 +256,13 @@ public class MainActivity extends AppCompatActivity {
//reminderAdapter.clear();
}
/** Create context menu for long press actions
*
* @param menu
* @param view
* @param menuInfo
*/
// Create context menu for long press actions
@Override
public
void
onCreateContextMenu
(
ContextMenu
menu
,
View
v
iew
,
ContextMenu
.
ContextMenuInfo
menuInfo
)
{
public
void
onCreateContextMenu
(
ContextMenu
menu
,
View
v
,
ContextMenu
.
ContextMenuInfo
menuInfo
)
{
getMenuInflater
().
inflate
(
R
.
menu
.
menu_add_reminder
,
menu
);
}
/*Private Helper method :
* Implement behaviour : On clicking a reminder item, user shoud be taken to Reminder Edit Activity
*/
// On clicking a reminder item
private
void
selectReminder
(
int
mClickID
)
{
String
mStringClickID
=
Integer
.
toString
(
mClickID
);
...
...
@@ -308,39 +273,32 @@ public class MainActivity extends AppCompatActivity {
startActivityForResult
(
i
,
1
);
}
/** Standard method for handling the outcome of an activity.
* If user signs in is successful then only take the user to main page. Else force the user to login in first
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
public
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
mAdapter
.
setItemCount
(
getDefaultItemCount
());
if
(
requestCode
==
RC_SIGN_IN
)
{
//If user signs in is successful then only take the user to main page. Else force the user to login in first
if
(
resultCode
==
RESULT_OK
)
{
if
(
requestCode
==
RC_SIGN_IN
){
if
(
resultCode
==
RESULT_OK
){
Toast
.
makeText
(
this
,
"Signed in"
,
Toast
.
LENGTH_SHORT
);
startActivity
(
new
Intent
(
MainActivity
.
this
,
ReminderAddActivity
.
class
));
}
else
if
(
requestCode
==
RESULT_CANCELED
)
{
}
else
if
(
requestCode
==
RESULT_CANCELED
){
Toast
.
makeText
(
this
,
"Sign in cancelled"
,
Toast
.
LENGTH_SHORT
);
finish
();
}
}
}
/** Define the behaviour of the app in case user comes back after suspending the app.
* -Recreate recycler view : This is done so that newly created reminders are also displayed
}
*/
// Recreate recycler view
// This is done so that newly created reminders are displayed
@Override
public
void
onResume
()
{
super
.
onResume
();
firebaseAuth
.
addAuthStateListener
(
authStateListener
);
// Get all the reminders : If there are no reminders display a message
// To check is there are saved reminders
// If there are no reminders display a message asking the user to create reminders
List
<
ReminderDO
>
mTest
=
rb
.
getAllReminders
();
if
(
mTest
.
isEmpty
())
{
...
...
@@ -352,42 +310,28 @@ public class MainActivity extends AppCompatActivity {
mAdapter
.
setItemCount
(
getDefaultItemCount
());
}
/** Layout manager for recycler view
*
* @return LinearLayoutManager instance
*/
// Layout manager for recycler view
protected
RecyclerView
.
LayoutManager
getLayoutManager
()
{
return
new
LinearLayoutManager
(
this
,
LinearLayoutManager
.
VERTICAL
,
false
);
}
/** Helper method
*
* @return integer 100
*/
protected
int
getDefaultItemCount
()
{
return
100
;
}
/**
* Creating main menu
*
* @param Menu object
* @return boolean
* Main menu actions
* @param menu
* @return
*/
@Override
public
boolean
onCreateOptionsMenu
(
Menu
menu
)
{
getMenuInflater
().
inflate
(
R
.
menu
.
main_menu
,
menu
);
return
true
;
}
/**Defines behaviours for the menu items.
*
* @param item
* @return Boolean
*/
@Override
public
boolean
onOptionsItemSelected
(
MenuItem
item
)
{
switch
(
item
.
getItemId
())
{
switch
(
item
.
getItemId
()){
case
R
.
id
.
sign_out
:
//sign out
AuthUI
.
getInstance
().
signOut
(
this
);
...
...
@@ -398,10 +342,7 @@ public class MainActivity extends AppCompatActivity {
}
/**\brief Adapter class (Inner Class) for implementing recycler view
*
* This class will handle how to display the reminder data on the main page.
*/
// Adapter class for recycler view
public
class
SimpleAdapter
extends
RecyclerView
.
Adapter
<
SimpleAdapter
.
VerticalItemHolder
>
{
private
ArrayList
<
ReminderItem
>
mItems
;
...
...
@@ -420,13 +361,7 @@ public class MainActivity extends AppCompatActivity {
notifyItemRemoved
(
selected
);
}
/** View holder for recycler view items
* Overridden method
*
* @param container
* @param viewType
* @return an object of VerticalItemHolder
*/
// View holder for recycler view items
@Override
public
VerticalItemHolder
onCreateViewHolder
(
ViewGroup
container
,
int
viewType
)
{
LayoutInflater
inflater
=
LayoutInflater
.
from
(
container
.
getContext
());
...
...
@@ -435,12 +370,6 @@ public class MainActivity extends AppCompatActivity {
return
new
VerticalItemHolder
(
root
,
this
);
}
/**Bind a reminder item to a position in the main view
* Overridden method
*
* @param itemHolder
* @param position
*/
@Override
public
void
onBindViewHolder
(
VerticalItemHolder
itemHolder
,
int
position
)
{
ReminderItem
item
=
mItems
.
get
(
position
);
...
...
@@ -450,28 +379,23 @@ public class MainActivity extends AppCompatActivity {
itemHolder
.
setActiveImage
(
item
.
mActive
);
}
/**Retuns the number of reminders in the database
*
* @return
*/
@Override
public
int
getItemCount
()
{
return
mItems
.
size
();
}
public
void
setItemCount
(
int
count
)
{
mItems
.
clear
();
mItems
.
addAll
(
generateData
(
count
));
notifyDataSetChanged
();
}
/
** Prepare data for each reminder item to facilitate proper displaying in the view.
* this Helper method required because all the data in database are not directly representable.
*
* @param count
* @return
*/
/
/ Generate random test data
public
ReminderItem
generateDummyData
()
{
return
new
ReminderItem
(
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
);
}
// Generate real data for each item
public
List
<
ReminderItem
>
generateData
(
int
count
)
{
ArrayList
<
SimpleAdapter
.
ReminderItem
>
items
=
new
ArrayList
<>();
...
...
@@ -512,7 +436,7 @@ public class MainActivity extends AppCompatActivity {
int
k
=
0
;
//
Plug in the
data to each recycler view item
//
Add
data to each recycler view item
for
(
DateTimeSorter
item
:
DateTimeSortList
)
{
int
i
=
item
.
getIndex
();
...
...
@@ -524,9 +448,7 @@ public class MainActivity extends AppCompatActivity {
return
items
;
}
/** Data-Object class for recycler view items
* This class is slightly different form ReminderDO class. Very specific to the requirement of the recyler view
*/
// Class for recycler view items
public
class
ReminderItem
{
public
String
mTitle
;
public
String
mDateTime
;
...
...
@@ -535,15 +457,6 @@ public class MainActivity extends AppCompatActivity {
public
String
mRepeatType
;
public
String
mActive
;
/**Constructor
*
* @param Title
* @param DateTime
* @param Repeat
* @param RepeatNo number of repeatition
* @param RepeatType
* @param Active
*/
public
ReminderItem
(
String
Title
,
String
DateTime
,
String
Repeat
,
String
RepeatNo
,
String
RepeatType
,
String
Active
)
{
this
.
mTitle
=
Title
;
this
.
mDateTime
=
DateTime
;
...
...
@@ -554,9 +467,7 @@ public class MainActivity extends AppCompatActivity {
}
}
/** Inner class to compare date and time so that items can be sorted in ascending/decending order of date and time
*
*/
// Class to compare date and time so that items are sorted in ascending order
public
class
DateTimeComparator
implements
Comparator
{
DateFormat
f
=
new
SimpleDateFormat
(
"dd/mm/yyyy hh:mm"
);
...
...
@@ -572,9 +483,7 @@ public class MainActivity extends AppCompatActivity {
}
}
/** UI and data class (Adapter) for recycler view items
*
*/
// UI and data class for recycler view items
public
class
VerticalItemHolder
extends
SwappingHolder
implements
View
.
OnClickListener
,
View
.
OnLongClickListener
{
private
TextView
mTitleText
,
mDateAndTimeText
,
mRepeatInfoText
;
...
...
@@ -583,17 +492,10 @@ public class MainActivity extends AppCompatActivity {
private
TextDrawable
mDrawableBuilder
;
private
SimpleAdapter
mAdapter
;
/**
* Sets up recycler item selector in the context.
* On long clicks the items should be selected so that user can take actions (like delete) on those items
*
* @param itemView
* @param adapter
*/
public
VerticalItemHolder
(
View
itemView
,
SimpleAdapter
adapter
)
{
super
(
itemView
,
mMultiSelector
);
itemView
.
setOnClickListener
(
this
);
itemView
.
setOnLongClickListener
(
this
);
//Set for long clicks
itemView
.
setOnLongClickListener
(
this
);
itemView
.
setLongClickable
(
true
);
// Initialize adapter for the items
...
...
@@ -607,14 +509,11 @@ public class MainActivity extends AppCompatActivity {
mThumbnailImage
=
itemView
.
findViewById
(
R
.
id
.
thumbnail_image
);
}
/** On clicking a reminder item
*
* @param view
*/
// On clicking a reminder item
@Override
public
void
onClick
(
View
v
iew
)
{
public
void
onClick
(
View
v
)
{
if
(!
mMultiSelector
.
tapSelection
(
this
))
{
mTempPost
=
reminderListView
.
getChildAdapterPosition
(
v
iew
);
mTempPost
=
reminderListView
.
getChildAdapterPosition
(
v
);
int
mReminderClickID
=
IDmap
.
get
(
mTempPost
);
selectReminder
(
mReminderClickID
);
...
...
@@ -624,29 +523,22 @@ public class MainActivity extends AppCompatActivity {
}
}
/** On long press enter action mode with context menu
*
* @param view
* @return
*/
// On long press enter action mode with context menu
@Override
public
boolean
onLongClick
(
View
v
iew
)
{
public
boolean
onLongClick
(
View
v
)
{
AppCompatActivity
activity
=
MainActivity
.
this
;
activity
.
startSupportActionMode
(
mDeleteMode
);
mMultiSelector
.
setSelected
(
this
,
true
);
return
true
;
}
/** Set reminder title view
*
* @param reminderTitle
*/
public
void
setReminderTitle
(
String
reminderTitle
)
{
mTitleText
.
setText
(
reminderTitle
);
// Set reminder title view
public
void
setReminderTitle
(
String
title
)
{
mTitleText
.
setText
(
title
);
String
letter
=
"A"
;
if
(
reminderTitle
!=
null
&&
!
reminderT
itle
.
isEmpty
())
{
letter
=
reminderT
itle
.
substring
(
0
,
1
);
if
(
title
!=
null
&&
!
t
itle
.
isEmpty
())
{
letter
=
t
itle
.
substring
(
0
,
1
);
}
int
color
=
mColorGenerator
.
getRandomColor
();
...
...
@@ -657,20 +549,12 @@ public class MainActivity extends AppCompatActivity {
mThumbnailImage
.
setImageDrawable
(
mDrawableBuilder
);
}
/** Set date and time views
*
* @param datetime
*/
// Set date and time views
public
void
setReminderDateTime
(
String
datetime
)
{
mDateAndTimeText
.
setText
(
datetime
);
}
/** Set repeat views
*
* @param repeat
* @param repeatNo
* @param repeatType
*/
// Set repeat views
public
void
setReminderRepeatInfo
(
String
repeat
,
String
repeatNo
,
String
repeatType
)
{
if
(
repeat
.
equals
(
"true"
))
{
mRepeatInfoText
.
setText
(
"Every "
+
repeatNo
+
" "
+
repeatType
+
"(s)"
);
...
...
@@ -679,10 +563,7 @@ public class MainActivity extends AppCompatActivity {
}
}
/** Set active image as on or off
* This method is apparently not consistent because on/off behaviour doesn't always work
* @param active
*/
// Set active image as on or off
public
void
setActiveImage
(
String
active
)
{
if
(
active
.
equals
(
"true"
))
{
mActiveImage
.
setImageResource
(
R
.
drawable
.
ic_notifications_active
);
...
...
app/src/main/res/drawable/ic_access_time.xml
0 → 100644
View file @
bd380d58
<vector
android:height=
"24dp"
android:tint=
"#646464"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"
/>
</vector>
app/src/main/res/drawable/ic_notifications_active_black.xml
0 → 100644
View file @
bd380d58
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z"
/>
</vector>
app/src/main/res/drawable/ic_notifications_off_black.xml
0 → 100644
View file @
bd380d58
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M20,18.69L7.84,6.14 5.27,3.49 4,4.76l2.8,2.8v0.01c-0.52,0.99 -0.8,2.16 -0.8,3.42v5l-2,2v1h13.73l2,2L21,19.72l-1,-1.03zM12,22c1.11,0 2,-0.89 2,-2h-4c0,1.11 0.89,2 2,2zM18,14.68L18,11c0,-3.08 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68c-0.15,0.03 -0.29,0.08 -0.42,0.12 -0.1,0.03 -0.2,0.07 -0.3,0.11h-0.01c-0.01,0 -0.01,0 -0.02,0.01 -0.23,0.09 -0.46,0.2 -0.68,0.31 0,0 -0.01,0 -0.01,0.01L18,14.68z"
/>
</vector>
app/src/main/res/drawable/ic_sync.xml
0 → 100644
View file @
bd380d58
<vector
android:height=
"24dp"
android:tint=
"#646464"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z"
/>
</vector>
app/src/main/res/raw/sample.mp3
0 → 100644
View file @
bd380d58
File added
app/src/main/res/values/colors.xml
View file @
bd380d58
...
...
@@ -3,4 +3,6 @@
<color
name=
"primary"
>
#008577
</color>
<color
name=
"primary_dark"
>
#00574B
</color>
<color
name=
"accent"
>
#D81B60
</color>
<color
name=
"textheader"
>
#ffffff
</color>
<color
name=
"textbody"
>
#000000
</color>
</resources>
\ 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