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
90e6fe4b
Commit
90e6fe4b
authored
Nov 27, 2019
by
PANKAJ KUMAR
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MainActivity Documentation
parent
6b92e1f7
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
172 additions
and
83 deletions
+172
-83
app/src/main/java/com/sudogeeks/talking_reminder/MainActivity.java
...ain/java/com/sudogeeks/talking_reminder/MainActivity.java
+172
-53
app/src/main/res/drawable/ic_access_time.xml
app/src/main/res/drawable/ic_access_time.xml
+0
-5
app/src/main/res/drawable/ic_notifications_active_black.xml
app/src/main/res/drawable/ic_notifications_active_black.xml
+0
-9
app/src/main/res/drawable/ic_notifications_off_black.xml
app/src/main/res/drawable/ic_notifications_off_black.xml
+0
-9
app/src/main/res/drawable/ic_sync.xml
app/src/main/res/drawable/ic_sync.xml
+0
-5
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
+0
-2
No files found.
app/src/main/java/com/sudogeeks/talking_reminder/MainActivity.java
View file @
90e6fe4b
...
...
@@ -45,8 +45,12 @@ 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
;
...
...
@@ -57,15 +61,12 @@ 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
)
{
...
...
@@ -75,6 +76,12 @@ 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
())
{
...
...
@@ -138,6 +145,11 @@ 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
);
...
...
@@ -147,11 +159,13 @@ 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
();
...
...
@@ -212,25 +226,33 @@ public class MainActivity extends AppCompatActivity {
mAlarmReceiver
=
new
AlarmReceiver
();
}
//Private Helper methods
private
void
attachDatabaseReadListener
(){
/* 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
()
{
//TODO Attaching Listener to ChildEventListener
if
(
dbChildEventListener
==
null
)
{
//
Only now create new Event Listener
if
(
dbChildEventListener
==
null
)
{
//
Create new Event Listener only when no listener is attached yet
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
)
{
}
...
...
@@ -239,15 +261,21 @@ public class MainActivity extends AppCompatActivity {
reminderDatabaseReference
.
addChildEventListener
(
dbChildEventListener
);
}
private
void
detachDatabaseReadListener
(){
/* Private helper method
* this method is called to Detach the database listener in the events of logout or app failure
*/
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
);
...
...
@@ -256,13 +284,20 @@ public class MainActivity extends AppCompatActivity {
//reminderAdapter.clear();
}
// Create context menu for long press actions
/** Create context menu for long press actions
*
* @param menu
* @param view
* @param menuInfo
*/
@Override
public
void
onCreateContextMenu
(
ContextMenu
menu
,
View
v
,
ContextMenu
.
ContextMenuInfo
menuInfo
)
{
public
void
onCreateContextMenu
(
ContextMenu
menu
,
View
v
iew
,
ContextMenu
.
ContextMenuInfo
menuInfo
)
{
getMenuInflater
().
inflate
(
R
.
menu
.
menu_add_reminder
,
menu
);
}
// On clicking a reminder item
/*Private Helper method :
* Implement behaviour : On clicking a reminder item, user shoud be taken to Reminder Edit Activity
*/
private
void
selectReminder
(
int
mClickID
)
{
String
mStringClickID
=
Integer
.
toString
(
mClickID
);
...
...
@@ -273,32 +308,39 @@ 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
(
resultCode
==
RESULT_OK
){
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
)
{
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
();
}
}
}
// Recreate recycler view
// This is done so that newly created reminders are displayed
/** 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
*/
@Override
public
void
onResume
()
{
super
.
onResume
();
firebaseAuth
.
addAuthStateListener
(
authStateListener
);
// To check is there are saved reminders
// If there are no reminders display a message asking the user to create reminders
// Get all the reminders : If there are no reminders display a message
List
<
ReminderDO
>
mTest
=
rb
.
getAllReminders
();
if
(
mTest
.
isEmpty
())
{
...
...
@@ -310,28 +352,42 @@ public class MainActivity extends AppCompatActivity {
mAdapter
.
setItemCount
(
getDefaultItemCount
());
}
// Layout manager for recycler view
/** Layout manager for recycler view
*
* @return LinearLayoutManager instance
*/
protected
RecyclerView
.
LayoutManager
getLayoutManager
()
{
return
new
LinearLayoutManager
(
this
,
LinearLayoutManager
.
VERTICAL
,
false
);
}
/** Helper method
*
* @return integer 100
*/
protected
int
getDefaultItemCount
()
{
return
100
;
}
/**
* Main menu actions
* @param menu
* @return
* Creating main menu
*
* @param Menu object
* @return boolean
*/
@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
);
...
...
@@ -342,7 +398,10 @@ public class MainActivity extends AppCompatActivity {
}
// Adapter class for recycler view
/**\brief Adapter class (Inner Class) for implementing recycler view
*
* This class will handle how to display the reminder data on the main page.
*/
public
class
SimpleAdapter
extends
RecyclerView
.
Adapter
<
SimpleAdapter
.
VerticalItemHolder
>
{
private
ArrayList
<
ReminderItem
>
mItems
;
...
...
@@ -361,7 +420,13 @@ public class MainActivity extends AppCompatActivity {
notifyItemRemoved
(
selected
);
}
// View holder for recycler view items
/** View holder for recycler view items
* Overridden method
*
* @param container
* @param viewType
* @return an object of VerticalItemHolder
*/
@Override
public
VerticalItemHolder
onCreateViewHolder
(
ViewGroup
container
,
int
viewType
)
{
LayoutInflater
inflater
=
LayoutInflater
.
from
(
container
.
getContext
());
...
...
@@ -370,6 +435,12 @@ 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
);
...
...
@@ -379,23 +450,28 @@ 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
();
}
/
/ Generate random test data
public
ReminderItem
generateDummyData
()
{
return
new
ReminderItem
(
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
);
}
// Generate real data for each item
/
** 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
*/
public
List
<
ReminderItem
>
generateData
(
int
count
)
{
ArrayList
<
SimpleAdapter
.
ReminderItem
>
items
=
new
ArrayList
<>();
...
...
@@ -436,7 +512,7 @@ public class MainActivity extends AppCompatActivity {
int
k
=
0
;
//
Add
data to each recycler view item
//
Plug in the
data to each recycler view item
for
(
DateTimeSorter
item
:
DateTimeSortList
)
{
int
i
=
item
.
getIndex
();
...
...
@@ -448,7 +524,9 @@ public class MainActivity extends AppCompatActivity {
return
items
;
}
// Class for recycler view 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
*/
public
class
ReminderItem
{
public
String
mTitle
;
public
String
mDateTime
;
...
...
@@ -457,6 +535,15 @@ 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
;
...
...
@@ -467,7 +554,9 @@ public class MainActivity extends AppCompatActivity {
}
}
// Class to compare date and time so that items are sorted in ascending order
/** Inner class to compare date and time so that items can be sorted in ascending/decending order of date and time
*
*/
public
class
DateTimeComparator
implements
Comparator
{
DateFormat
f
=
new
SimpleDateFormat
(
"dd/mm/yyyy hh:mm"
);
...
...
@@ -483,7 +572,9 @@ public class MainActivity extends AppCompatActivity {
}
}
// UI and data class for recycler view items
/** UI and data class (Adapter) for recycler view items
*
*/
public
class
VerticalItemHolder
extends
SwappingHolder
implements
View
.
OnClickListener
,
View
.
OnLongClickListener
{
private
TextView
mTitleText
,
mDateAndTimeText
,
mRepeatInfoText
;
...
...
@@ -492,10 +583,17 @@ 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
);
itemView
.
setOnLongClickListener
(
this
);
//Set for long clicks
itemView
.
setLongClickable
(
true
);
// Initialize adapter for the items
...
...
@@ -509,11 +607,14 @@ public class MainActivity extends AppCompatActivity {
mThumbnailImage
=
itemView
.
findViewById
(
R
.
id
.
thumbnail_image
);
}
// On clicking a reminder item
/** On clicking a reminder item
*
* @param view
*/
@Override
public
void
onClick
(
View
v
)
{
public
void
onClick
(
View
v
iew
)
{
if
(!
mMultiSelector
.
tapSelection
(
this
))
{
mTempPost
=
reminderListView
.
getChildAdapterPosition
(
v
);
mTempPost
=
reminderListView
.
getChildAdapterPosition
(
v
iew
);
int
mReminderClickID
=
IDmap
.
get
(
mTempPost
);
selectReminder
(
mReminderClickID
);
...
...
@@ -523,22 +624,29 @@ public class MainActivity extends AppCompatActivity {
}
}
// On long press enter action mode with context menu
/** On long press enter action mode with context menu
*
* @param view
* @return
*/
@Override
public
boolean
onLongClick
(
View
v
)
{
public
boolean
onLongClick
(
View
v
iew
)
{
AppCompatActivity
activity
=
MainActivity
.
this
;
activity
.
startSupportActionMode
(
mDeleteMode
);
mMultiSelector
.
setSelected
(
this
,
true
);
return
true
;
}
// Set reminder title view
public
void
setReminderTitle
(
String
title
)
{
mTitleText
.
setText
(
title
);
/** Set reminder title view
*
* @param reminderTitle
*/
public
void
setReminderTitle
(
String
reminderTitle
)
{
mTitleText
.
setText
(
reminderTitle
);
String
letter
=
"A"
;
if
(
title
!=
null
&&
!
t
itle
.
isEmpty
())
{
letter
=
t
itle
.
substring
(
0
,
1
);
if
(
reminderTitle
!=
null
&&
!
reminderT
itle
.
isEmpty
())
{
letter
=
reminderT
itle
.
substring
(
0
,
1
);
}
int
color
=
mColorGenerator
.
getRandomColor
();
...
...
@@ -549,12 +657,20 @@ public class MainActivity extends AppCompatActivity {
mThumbnailImage
.
setImageDrawable
(
mDrawableBuilder
);
}
// Set date and time views
/** Set date and time views
*
* @param datetime
*/
public
void
setReminderDateTime
(
String
datetime
)
{
mDateAndTimeText
.
setText
(
datetime
);
}
// Set repeat views
/** Set repeat views
*
* @param repeat
* @param repeatNo
* @param repeatType
*/
public
void
setReminderRepeatInfo
(
String
repeat
,
String
repeatNo
,
String
repeatType
)
{
if
(
repeat
.
equals
(
"true"
))
{
mRepeatInfoText
.
setText
(
"Every "
+
repeatNo
+
" "
+
repeatType
+
"(s)"
);
...
...
@@ -563,7 +679,10 @@ public class MainActivity extends AppCompatActivity {
}
}
// Set active image as on or off
/** Set active image as on or off
* This method is apparently not consistent because on/off behaviour doesn't always work
* @param active
*/
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
deleted
100644 → 0
View file @
6b92e1f7
<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
deleted
100644 → 0
View file @
6b92e1f7
<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
deleted
100644 → 0
View file @
6b92e1f7
<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
deleted
100644 → 0
View file @
6b92e1f7
<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
deleted
100644 → 0
View file @
6b92e1f7
File deleted
app/src/main/res/values/colors.xml
View file @
90e6fe4b
...
...
@@ -3,6 +3,4 @@
<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
PANKAJ KUMAR
@pankajkumar
mentioned in commit
bd380d58
·
Nov 27, 2019
mentioned in commit
bd380d58
mentioned in commit bd380d58bf4c8b5fd2f93f212f524db50a31e11b
Toggle commit list
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