.
15
.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
3
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
6
.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="11" />
|
||||
</component>
|
||||
</project>
|
||||
17
.idea/deploymentTargetDropDown.xml
generated
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetDropDown">
|
||||
<runningDeviceTargetSelectedWithDropDown>
|
||||
<Target>
|
||||
<type value="RUNNING_DEVICE_TARGET" />
|
||||
<deviceKey>
|
||||
<Key>
|
||||
<type value="SERIAL_NUMBER" />
|
||||
<value value="5203ae2be8ec4353" />
|
||||
</Key>
|
||||
</deviceKey>
|
||||
</Target>
|
||||
</runningDeviceTargetSelectedWithDropDown>
|
||||
<timeTargetWasSelectedWithDropDown value="2023-06-29T11:46:37.575091600Z" />
|
||||
</component>
|
||||
</project>
|
||||
19
.idea/gradle.xml
generated
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
<option name="id" value="Android" />
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/render.experimental.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RenderSettings">
|
||||
<option name="showDecorations" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
1
app/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/build
|
||||
64
app/build.gradle
Normal file
@@ -0,0 +1,64 @@
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'com.ssb.simplitend'
|
||||
compileSdk 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.ssb.simplitend"
|
||||
minSdk 23
|
||||
targetSdk 33
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
buildFeatures{
|
||||
viewBinding true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
// Navigation component
|
||||
def nav_version = "2.5.3"
|
||||
|
||||
// Java language implementation
|
||||
implementation "androidx.navigation:navigation-fragment:$nav_version"
|
||||
implementation "androidx.navigation:navigation-ui:$nav_version"
|
||||
|
||||
// circle indicator for viewpager
|
||||
implementation 'me.relex:circleindicator:2.1.6'
|
||||
|
||||
// picasso
|
||||
implementation 'com.squareup.picasso:picasso:2.8'
|
||||
|
||||
// Glide
|
||||
implementation 'com.github.bumptech.glide:glide:4.15.1'
|
||||
|
||||
// lottie animations
|
||||
def lottieVersion = "3.4.0"
|
||||
implementation "com.airbnb.android:lottie:$lottieVersion"
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.6.0'
|
||||
implementation 'com.google.android.material:material:1.8.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||
}
|
||||
21
app/proguard-rules.pro
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.ssb.simplitend;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.ssb.simplitend", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
32
app/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.SimpliTend"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".welcome.activities.WelcomeActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="" />
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
21
app/src/main/java/com/ssb/simplitend/apputils/AppUtil.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package com.ssb.simplitend.apputils;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
public abstract class AppUtil {
|
||||
|
||||
// closes keyboard
|
||||
public static void closeKeyboard(Activity activity){
|
||||
if (activity != null){
|
||||
View view = activity.getCurrentFocus();
|
||||
if (view != null) {
|
||||
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ssb.simplitend.userprofile;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ssb.simplitend.databinding.ProfileProgressFragmentBinding;
|
||||
|
||||
public class ProfileProgressFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected ProfileProgressFragmentBinding binding;
|
||||
|
||||
public ProfileProgressFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ProfileProgressFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.ssb.simplitend.welcome.activities;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.ssb.simplitend.databinding.ActivityWelcomeBinding;
|
||||
|
||||
public class WelcomeActivity extends AppCompatActivity {
|
||||
|
||||
// View binding
|
||||
protected ActivityWelcomeBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityWelcomeBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.ssb.simplitend.welcome.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.ChooseRoleFragmentBinding;
|
||||
|
||||
public class ChooseRoleFragment extends Fragment {
|
||||
|
||||
protected ChooseRoleFragmentBinding binding;
|
||||
|
||||
private static final String SELECTED_ROLE_KEY = "selected_role";
|
||||
private static final int SENIOR = 1;
|
||||
private static final int CAREGIVER = 2;
|
||||
|
||||
private int selected_role = SENIOR;
|
||||
|
||||
public ChooseRoleFragment(){
|
||||
// required empty fragment
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ChooseRoleFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initViews(savedInstanceState);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
// registers all click listeners
|
||||
private void clickEvents() {
|
||||
|
||||
binding.seniorRole.setOnClickListener(v -> {
|
||||
makeRoleSelection(SENIOR);
|
||||
Navigation.findNavController(v).navigate(R.id.action_chooseRoleFragment_to_signInSignUpFragment);
|
||||
});
|
||||
|
||||
binding.caregiverRole.setOnClickListener(v -> makeRoleSelection(CAREGIVER));
|
||||
|
||||
}
|
||||
|
||||
// initialize views
|
||||
private void initViews(Bundle savedInstanceState) {
|
||||
// checking if any previous instance existed
|
||||
if (savedInstanceState != null){
|
||||
// previously instance existed
|
||||
// thus, retrieving selected_role chosen
|
||||
|
||||
selected_role = savedInstanceState.getInt(SELECTED_ROLE_KEY, SENIOR);
|
||||
}
|
||||
|
||||
// making the role selection
|
||||
makeRoleSelection(selected_role);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putInt(SELECTED_ROLE_KEY, selected_role);
|
||||
}
|
||||
|
||||
/*
|
||||
makes the check for each role visible or invisible according to the selected role
|
||||
*/
|
||||
private void makeRoleSelection(int selectedRole){
|
||||
selected_role = selectedRole;
|
||||
|
||||
if (selectedRole == SENIOR){
|
||||
binding.seniorCheck.setVisibility(View.VISIBLE);
|
||||
binding.caregiverCheck.setVisibility(View.GONE);
|
||||
}else{
|
||||
binding.caregiverCheck.setVisibility(View.VISIBLE);
|
||||
binding.seniorCheck.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.ssb.simplitend.welcome.fragments;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter;
|
||||
|
||||
import com.ssb.simplitend.welcome.fragments.onboardfragments.OnBoardOne;
|
||||
import com.ssb.simplitend.welcome.fragments.onboardfragments.OnBoardThree;
|
||||
import com.ssb.simplitend.welcome.fragments.onboardfragments.OnBoardTwo;
|
||||
|
||||
public class OnBoardPagerAdapter extends FragmentStateAdapter {
|
||||
|
||||
public OnBoardPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
|
||||
super(fragmentManager, lifecycle);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Fragment createFragment(int position) {
|
||||
switch (position){
|
||||
case 2:
|
||||
return new OnBoardThree();
|
||||
case 1:
|
||||
return new OnBoardTwo();
|
||||
default:
|
||||
return new OnBoardOne();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.ssb.simplitend.welcome.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.SignInFragmentBinding;
|
||||
|
||||
public class SignInFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected SignInFragmentBinding binding;
|
||||
|
||||
public SignInFragment(){
|
||||
// required empty constructor
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = SignInFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.forgotPin.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_signInFragment_to_forgotPinFragment));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.ssb.simplitend.welcome.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.SignInUpFragmentBinding;
|
||||
|
||||
public class SignInSignUpFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected SignInUpFragmentBinding binding;
|
||||
|
||||
protected OnBoardPagerAdapter onBoardPagerAdapter;
|
||||
|
||||
public SignInSignUpFragment(){
|
||||
// required empty constructor
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = SignInUpFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initViews();
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
// log in
|
||||
binding.login.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_signInSignUpFragment_to_signInFragment)
|
||||
);
|
||||
|
||||
// register
|
||||
binding.register.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_signInSignUpFragment_to_howToSetUpFragment)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
onBoardPagerAdapter = new OnBoardPagerAdapter(getChildFragmentManager(), getLifecycle());
|
||||
binding.viewPager.setAdapter(onBoardPagerAdapter);
|
||||
binding.circleIndicator.setViewPager(binding.viewPager);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.ssb.simplitend.welcome.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.WelcomeFragmentBinding;
|
||||
|
||||
public class WelcomeFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected WelcomeFragmentBinding binding;
|
||||
|
||||
public WelcomeFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = WelcomeFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initViews(savedInstanceState);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
// Initialize views
|
||||
private void initViews(Bundle savedInstanceState) {
|
||||
}
|
||||
|
||||
// Register click events
|
||||
private void clickEvents(){
|
||||
binding.nextBtn.setOnClickListener(v ->
|
||||
Navigation.findNavController(v)
|
||||
.navigate(R.id.action_welcomeFragment_to_chooseRoleFragment)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.AddContactFragmentBinding;
|
||||
|
||||
public class AddContactFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected AddContactFragmentBinding binding;
|
||||
|
||||
public AddContactFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = AddContactFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.static1.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_addContactFragment_to_contactInfoFragment)
|
||||
);
|
||||
|
||||
binding.static2.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_addContactFragment_to_contactListFragment)
|
||||
);
|
||||
|
||||
binding.nextBtn.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_addContactFragment_to_profileProgressFragment)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ssb.simplitend.databinding.ContactInfoFragmentBinding;
|
||||
|
||||
public class ContactInfoFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected ContactInfoFragmentBinding binding;
|
||||
|
||||
public ContactInfoFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ContactInfoFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.DiffUtil;
|
||||
import androidx.recyclerview.widget.ListAdapter;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.ssb.simplitend.databinding.ContactViewHolderBinding;
|
||||
import com.ssb.simplitend.welcome.fragments.contacts.mvvm.Contact;
|
||||
|
||||
public class ContactListAdapter extends ListAdapter<Contact, ContactListAdapter.ContactViewHolder> {
|
||||
|
||||
private OnContactClickListener contactClickListener;
|
||||
|
||||
private static final DiffUtil.ItemCallback<Contact> DIFF_UTIL = new DiffUtil.ItemCallback<Contact>() {
|
||||
@Override
|
||||
public boolean areItemsTheSame(@NonNull Contact oldItem, @NonNull Contact newItem) {
|
||||
return oldItem.name.equals(newItem.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areContentsTheSame(@NonNull Contact oldItem, @NonNull Contact newItem) {
|
||||
return oldItem.equals(newItem);
|
||||
}
|
||||
};
|
||||
|
||||
public ContactListAdapter(){
|
||||
super(DIFF_UTIL);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
ContactViewHolderBinding binding = ContactViewHolderBinding.inflate(LayoutInflater.from(parent.getContext()));
|
||||
return new ContactViewHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) {
|
||||
holder.setData(getItem(position));
|
||||
|
||||
holder.binding.getRoot().setOnClickListener(v -> {
|
||||
if (contactClickListener != null){
|
||||
contactClickListener.onClick(getItem(position));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setContactClickListener(OnContactClickListener contactClickListener) {
|
||||
this.contactClickListener = contactClickListener;
|
||||
}
|
||||
|
||||
public static class ContactViewHolder extends RecyclerView.ViewHolder{
|
||||
|
||||
private final ContactViewHolderBinding binding;
|
||||
|
||||
public ContactViewHolder(ContactViewHolderBinding binding){
|
||||
super(binding.getRoot());
|
||||
this.binding = binding;
|
||||
}
|
||||
|
||||
public void setData(Contact contact){
|
||||
binding.name.setText(contact.name);
|
||||
|
||||
// static
|
||||
binding.initial.setText(contact.name.substring(0, 1).toUpperCase());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface OnContactClickListener{
|
||||
|
||||
void onClick(Contact contact);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts;
|
||||
|
||||
import static com.ssb.simplitend.welcome.fragments.contacts.CreateContactFragment.CONTACT_KEY;
|
||||
import static com.ssb.simplitend.welcome.fragments.contacts.CreateContactFragment.TO_EDIT_KEY;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.ContactListFragmentBinding;
|
||||
import com.ssb.simplitend.welcome.fragments.contacts.mvvm.Contact;
|
||||
import com.ssb.simplitend.welcome.fragments.contacts.mvvm.ContactViewModel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ContactListFragment extends Fragment {
|
||||
|
||||
private static final String TAG = "aditya";
|
||||
|
||||
// view binding
|
||||
protected ContactListFragmentBinding binding;
|
||||
|
||||
protected ContactListAdapter contactListAdapter;
|
||||
|
||||
protected ContactViewModel contactViewModel;
|
||||
|
||||
protected ActivityResultLauncher<String> permissionLauncher;
|
||||
|
||||
public ContactListFragment() {
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ContactListFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initializeViews();
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.createContact.setOnClickListener(v ->
|
||||
{
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putBoolean(TO_EDIT_KEY, false);
|
||||
Navigation.findNavController(v).navigate(R.id.action_contactListFragment_to_createContactFragment, arguments);
|
||||
}
|
||||
);
|
||||
|
||||
contactListAdapter.setContactClickListener(contact ->
|
||||
{
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(TO_EDIT_KEY, true);
|
||||
bundle.putSerializable(CONTACT_KEY, contact);
|
||||
Navigation.findNavController(binding.getRoot()).navigate(R.id.action_contactListFragment_to_createContactFragment, bundle);
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private void initializeViews() {
|
||||
// initiating recycler view for contact list
|
||||
contactListAdapter = new ContactListAdapter();
|
||||
binding.contactRv.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
binding.contactRv.setAdapter(contactListAdapter);
|
||||
|
||||
permissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(),
|
||||
granted -> {
|
||||
if (granted) {
|
||||
// user granted the READ_CONTACT permission
|
||||
loadContacts();
|
||||
} else {
|
||||
// user denied the permission
|
||||
// TODO: 28-06-2023
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
loadContacts();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
loads user's local contacts
|
||||
*/
|
||||
private void loadContacts() {
|
||||
if (requireActivity().checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
|
||||
permissionLauncher.launch(Manifest.permission.READ_CONTACTS);
|
||||
return;
|
||||
}
|
||||
|
||||
contactViewModel = new ViewModelProvider(this).get(ContactViewModel.class);
|
||||
Log.d(TAG, "initializeViews: viewmodel " + contactViewModel);
|
||||
|
||||
contactListAdapter.submitList(contactViewModel.getContactList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.load.resource.gif.GifDrawable;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.CreateEditContactFragmentBinding;
|
||||
import com.ssb.simplitend.databinding.DecisionBottomsheetBinding;
|
||||
import com.ssb.simplitend.databinding.DoneBottomsheetBinding;
|
||||
import com.ssb.simplitend.welcome.fragments.contacts.mvvm.Contact;
|
||||
|
||||
public class CreateContactFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected CreateEditContactFragmentBinding binding;
|
||||
|
||||
// arguments keys
|
||||
public static final String TO_EDIT_KEY = "to_edit";
|
||||
public static final String CONTACT_KEY = "contact_key";
|
||||
|
||||
// flag if current instance is to edit or create contact
|
||||
boolean to_edit;
|
||||
|
||||
public CreateContactFragment() {
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = CreateEditContactFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initializeViews();
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.nextBtn.setOnClickListener(v -> {
|
||||
|
||||
if (to_edit){
|
||||
// editing existing contact
|
||||
showSaveEditDecision();
|
||||
}else {
|
||||
// saving new contact
|
||||
gotoAddContactFragment();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void showSaveEditDecision() {
|
||||
|
||||
DecisionBottomsheetBinding binding = DecisionBottomsheetBinding.inflate(getLayoutInflater());
|
||||
|
||||
BottomSheetDialog bsd = new BottomSheetDialog(requireContext(), R.style.BottomSheetDialog);
|
||||
bsd.setContentView(binding.getRoot());
|
||||
|
||||
binding.text.setText(getString(R.string.make_changes));
|
||||
|
||||
binding.positiveBtn.setText(getString(R.string.yes));
|
||||
binding.negativeBtn.setText(getString(R.string.no));
|
||||
|
||||
binding.negativeBtn.setOnClickListener(v -> bsd.dismiss());
|
||||
|
||||
binding.positiveBtn.setOnClickListener(v -> {
|
||||
bsd.dismiss();
|
||||
showDoneBottomSheet();
|
||||
});
|
||||
|
||||
bsd.show();
|
||||
|
||||
}
|
||||
|
||||
private void showDoneBottomSheet() {
|
||||
DoneBottomsheetBinding binding = DoneBottomsheetBinding.inflate(getLayoutInflater());
|
||||
|
||||
BottomSheetDialog bsd = new BottomSheetDialog(requireContext(), R.style.BottomSheetDialog);
|
||||
bsd.setContentView(binding.getRoot());
|
||||
bsd.setCancelable(false);
|
||||
|
||||
binding.text.setText(getString(R.string.changes_successful));
|
||||
|
||||
binding.anim.addAnimatorListener(new Animator.AnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationStart(@NonNull Animator animation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(@NonNull Animator animation) {
|
||||
bsd.dismiss();
|
||||
gotoAddContactFragment();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationCancel(@NonNull Animator animation) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationRepeat(@NonNull Animator animation) {
|
||||
}
|
||||
});
|
||||
|
||||
bsd.show();
|
||||
|
||||
}
|
||||
|
||||
private void gotoAddContactFragment(){
|
||||
Navigation.findNavController(binding.getRoot())
|
||||
.navigate(R.id.action_createContactFragment_to_addContactFragment);
|
||||
}
|
||||
|
||||
private void showSOSDecision() {
|
||||
|
||||
DecisionBottomsheetBinding binding = DecisionBottomsheetBinding.inflate(getLayoutInflater());
|
||||
|
||||
BottomSheetDialog bsd = new BottomSheetDialog(requireContext(), R.style.BottomSheetDialog);
|
||||
bsd.setContentView(binding.getRoot());
|
||||
|
||||
binding.text.setText(getString(R.string.make_sos));
|
||||
|
||||
binding.positiveBtn.setText(getString(R.string.yes));
|
||||
binding.negativeBtn.setText(getString(R.string.no));
|
||||
|
||||
binding.negativeBtn.setOnClickListener(v -> {
|
||||
bsd.dismiss();
|
||||
this.binding.sosCheck.setChecked(false);
|
||||
});
|
||||
|
||||
binding.positiveBtn.setOnClickListener(v -> {
|
||||
bsd.dismiss();
|
||||
this.binding.sosCheck.setChecked(true);
|
||||
});
|
||||
|
||||
bsd.show();
|
||||
|
||||
}
|
||||
|
||||
private void initializeViews() {
|
||||
Bundle bundle = getArguments();
|
||||
|
||||
if (bundle != null){
|
||||
to_edit = bundle.getBoolean(TO_EDIT_KEY, false);
|
||||
|
||||
if (to_edit){
|
||||
|
||||
setLayoutDetails(getString(R.string.edit_contact), getString(R.string.change_photo), getString(R.string.save));
|
||||
|
||||
Contact contact = (Contact) bundle.getSerializable(CONTACT_KEY);
|
||||
setDetails(contact);
|
||||
|
||||
}else{
|
||||
setLayoutDetails(getString(R.string.create_contact), getString(R.string.add_photo), getString(R.string.create_contact));
|
||||
}
|
||||
}
|
||||
|
||||
binding.sosCheck.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||
if (isChecked){
|
||||
showSOSDecision();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void setDetails(Contact contact) {
|
||||
binding.name.setText(contact.name);
|
||||
binding.phoneNumber.setText(contact.phoneNumber);
|
||||
binding.email.setText(contact.email);
|
||||
binding.relationship.setText(contact.relationship);
|
||||
}
|
||||
|
||||
public void setLayoutDetails(String title, String photo_title, String btn_txt){
|
||||
binding.title.setText(title);
|
||||
binding.photoTv.setText(photo_title);
|
||||
binding.nextBtn.setText(btn_txt);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts.mvvm;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Contact implements Serializable {
|
||||
|
||||
public String name, imageUri, phoneNumber, relationship, email;
|
||||
|
||||
public Contact(){}
|
||||
|
||||
public Contact(String name){
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Contact(String name, String phoneNumber){
|
||||
this.name = name;
|
||||
this.phoneNumber = phoneNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Contact contact = (Contact) o;
|
||||
return name.equals(contact.name) && Objects.equals(imageUri, contact.imageUri) && phoneNumber.equals(contact.phoneNumber) && Objects.equals(relationship, contact.relationship) && Objects.equals(email, contact.email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(name, imageUri, phoneNumber, relationship, email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Contact{" +
|
||||
"name='" + name + '\'' +
|
||||
", imageUri='" + imageUri + '\'' +
|
||||
", phoneNumber='" + phoneNumber + '\'' +
|
||||
", relationship='" + relationship + '\'' +
|
||||
", email='" + email + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts.mvvm;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.lifecycle.AndroidViewModel;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ContactViewModel extends AndroidViewModel {
|
||||
|
||||
private final ArrayList<Contact> contactList;
|
||||
private final UserContactRepository contactRepository;
|
||||
|
||||
public ContactViewModel(Application application){
|
||||
super(application);
|
||||
this.contactRepository = new UserContactRepository();
|
||||
this.contactList = this.contactRepository.getContactList(application.getApplicationContext());
|
||||
}
|
||||
|
||||
public ArrayList<Contact> getContactList() {
|
||||
return contactList;
|
||||
}
|
||||
|
||||
public UserContactRepository getContactRepository() {
|
||||
return contactRepository;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.ssb.simplitend.welcome.fragments.contacts.mvvm;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.provider.ContactsContract;
|
||||
import android.util.Log;
|
||||
|
||||
import com.ssb.simplitend.welcome.fragments.contacts.mvvm.Contact;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class UserContactRepository {
|
||||
|
||||
private static final String[] PROJECTION = new String[]{
|
||||
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
|
||||
ContactsContract.Contacts.DISPLAY_NAME,
|
||||
ContactsContract.CommonDataKinds.Phone.NUMBER
|
||||
};
|
||||
|
||||
public UserContactRepository(){}
|
||||
|
||||
public ArrayList<Contact> getContactList(Context context) {
|
||||
final ArrayList<Contact> contactList = new ArrayList<>();
|
||||
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
|
||||
Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
|
||||
|
||||
if (cursor != null) {
|
||||
|
||||
// To avoid duplicate phone numbers
|
||||
HashSet<String> mobileNoSet = new HashSet<String>();
|
||||
|
||||
try {
|
||||
final int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
|
||||
final int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
|
||||
|
||||
Log.d("aditya", "getContactList: " + cursor.getColumnCount());
|
||||
|
||||
String name, number, photoUri;
|
||||
while (cursor.moveToNext()) {
|
||||
name = cursor.getString(nameIndex);
|
||||
number = cursor.getString(numberIndex);
|
||||
|
||||
|
||||
// avoiding duplicate phone number
|
||||
number = number.replace(" ", "");
|
||||
if (!mobileNoSet.contains(number)) {
|
||||
contactList.add(new Contact(name, number));
|
||||
mobileNoSet.add(number);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
return contactList;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.ssb.simplitend.welcome.fragments.forgotpin;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.databinding.ChangePinFragmentBinding;
|
||||
|
||||
public class ChangePinFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected ChangePinFragmentBinding binding;
|
||||
|
||||
public ChangePinFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ChangePinFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
package com.ssb.simplitend.welcome.fragments.forgotpin;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.apputils.AppUtil;
|
||||
import com.ssb.simplitend.databinding.CheckMailFragmentBinding;
|
||||
|
||||
public class CheckMailFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected CheckMailFragmentBinding binding;
|
||||
|
||||
public CheckMailFragment() {
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = CheckMailFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initViews();
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
|
||||
initOTPBoxes();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
setting text change listener for every edit text for otp
|
||||
*/
|
||||
private void initOTPBoxes() {
|
||||
|
||||
binding.otp1.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (!s.toString().trim().isEmpty()) {
|
||||
binding.otp2.requestFocus();
|
||||
}
|
||||
|
||||
// check if all otp boxes are filled
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
binding.otp2.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (!s.toString().trim().isEmpty()) {
|
||||
binding.otp3.requestFocus();
|
||||
} else {
|
||||
binding.otp1.requestFocus();
|
||||
}
|
||||
|
||||
// check if all otp boxes are filled
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
binding.otp3.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (!s.toString().trim().isEmpty()) {
|
||||
binding.otp4.requestFocus();
|
||||
} else {
|
||||
binding.otp2.requestFocus();
|
||||
}
|
||||
|
||||
// check if all otp boxes are filled
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
binding.otp4.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (!s.toString().trim().isEmpty()) {
|
||||
// last otp inserted
|
||||
AppUtil.closeKeyboard(getActivity());
|
||||
} else {
|
||||
binding.otp3.requestFocus();
|
||||
}
|
||||
|
||||
// check if all otp boxes are filled
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.submit.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_checkMailFragment_to_changePinFragment));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.ssb.simplitend.welcome.fragments.forgotpin;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.ForgotPinFragmentBinding;
|
||||
|
||||
public class ForgotPinFragment extends Fragment {
|
||||
|
||||
protected ForgotPinFragmentBinding binding;
|
||||
|
||||
public ForgotPinFragment(){
|
||||
// required empty constructor
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ForgotPinFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.submit.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_forgotPinFragment_to_checkMailFragment));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.ssb.simplitend.welcome.fragments.onboardfragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ssb.simplitend.databinding.OnboardOneFragmentBinding;
|
||||
|
||||
public class OnBoardOne extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected OnboardOneFragmentBinding binding;
|
||||
|
||||
public OnBoardOne(){
|
||||
// required empty constructor
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = OnboardOneFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.ssb.simplitend.welcome.fragments.onboardfragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ssb.simplitend.databinding.OnboardOneFragmentBinding;
|
||||
import com.ssb.simplitend.databinding.OnboardThreeFragmentBinding;
|
||||
|
||||
public class OnBoardThree extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected OnboardThreeFragmentBinding binding;
|
||||
|
||||
public OnBoardThree(){
|
||||
// required empty constructor
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = OnboardThreeFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.ssb.simplitend.welcome.fragments.onboardfragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ssb.simplitend.databinding.OnboardOneFragmentBinding;
|
||||
import com.ssb.simplitend.databinding.OnboardTwoFragmentBinding;
|
||||
|
||||
public class OnBoardTwo extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected OnboardTwoFragmentBinding binding;
|
||||
|
||||
public OnBoardTwo(){
|
||||
// required empty constructor
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = OnboardTwoFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.ssb.simplitend.welcome.fragments.register;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.CreatePinFragmentBinding;
|
||||
|
||||
public class CreatePinFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected CreatePinFragmentBinding binding;
|
||||
|
||||
public CreatePinFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = CreatePinFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.setPin.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_createPinFragment_to_thankYouFragment)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.ssb.simplitend.welcome.fragments.register;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.HowToSetUpFragmentBinding;
|
||||
|
||||
public class HowToSetUpFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected HowToSetUpFragmentBinding binding;
|
||||
|
||||
public HowToSetUpFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = HowToSetUpFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
binding.nextBtn.setOnClickListener(v -> Navigation.findNavController(v).navigate(R.id.action_howToSetUpFragment_to_registerFragment));
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.ssb.simplitend.welcome.fragments.register;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.LocationFragmentBinding;
|
||||
|
||||
public class LocationFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected LocationFragmentBinding binding;
|
||||
|
||||
public LocationFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = LocationFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.submit.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_locationFragment_to_createPinFragment)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.ssb.simplitend.welcome.fragments.register;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.RegisterFragmentBinding;
|
||||
|
||||
public class RegisterFragment extends Fragment {
|
||||
|
||||
protected RegisterFragmentBinding binding;
|
||||
|
||||
public RegisterFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = RegisterFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.nextBtn.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_registerFragment_to_locationFragment));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.ssb.simplitend.welcome.fragments.register;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.ssb.simplitend.R;
|
||||
import com.ssb.simplitend.databinding.LocationFragmentBinding;
|
||||
import com.ssb.simplitend.databinding.ThankYouFragmentBinding;
|
||||
|
||||
public class ThankYouFragment extends Fragment {
|
||||
|
||||
// view binding
|
||||
protected ThankYouFragmentBinding binding;
|
||||
|
||||
public ThankYouFragment(){
|
||||
// required empty const.
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
binding = ThankYouFragmentBinding.inflate(inflater, container, false);
|
||||
|
||||
initializeViews(savedInstanceState);
|
||||
|
||||
clickEvents();
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
private void initializeViews(Bundle savedInstanceState) {
|
||||
}
|
||||
|
||||
private void clickEvents() {
|
||||
|
||||
binding.backBtn.setOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
||||
|
||||
binding.proceed.setOnClickListener(v ->
|
||||
Navigation.findNavController(v).navigate(R.id.action_thankYouFragment_to_contactListFragment)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
BIN
app/src/main/res/drawable-hdpi/caregiver_img.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
app/src/main/res/drawable-hdpi/forget_pin_email_img.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
app/src/main/res/drawable-hdpi/senior_img.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
app/src/main/res/drawable-hdpi/static_1.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-hdpi/static_2.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
app/src/main/res/drawable-hdpi/static_3.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable-hdpi/welcome_img.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
app/src/main/res/drawable-ldpi/caregiver_img.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
app/src/main/res/drawable-ldpi/forget_pin_email_img.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
app/src/main/res/drawable-ldpi/senior_img.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
app/src/main/res/drawable-ldpi/static_1.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
app/src/main/res/drawable-ldpi/static_2.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
app/src/main/res/drawable-ldpi/static_3.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
app/src/main/res/drawable-ldpi/welcome_img.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
app/src/main/res/drawable-mdpi/caregiver_img.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
app/src/main/res/drawable-mdpi/forget_pin_email_img.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
10
app/src/main/res/drawable-mdpi/ic_dob.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/ic_user_outline_bg"/>
|
||||
|
||||
<item android:drawable="@drawable/ic_dob_outline"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
</layer-list>
|
||||
10
app/src/main/res/drawable-mdpi/ic_email.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/ic_user_outline_bg"/>
|
||||
|
||||
<item android:drawable="@drawable/ic_email_outline"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
</layer-list>
|
||||
10
app/src/main/res/drawable-mdpi/ic_phone.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/ic_user_outline_bg"/>
|
||||
|
||||
<item android:drawable="@drawable/ic_phone_outline"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
</layer-list>
|
||||
BIN
app/src/main/res/drawable-mdpi/senior_img.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
app/src/main/res/drawable-mdpi/static_1.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
app/src/main/res/drawable-mdpi/static_2.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/main/res/drawable-mdpi/static_3.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-mdpi/welcome_img.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
30
app/src/main/res/drawable-v24/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
||||
BIN
app/src/main/res/drawable-xhdpi/caregiver_img.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
app/src/main/res/drawable-xhdpi/forget_pin_email_img.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
app/src/main/res/drawable-xhdpi/senior_img.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
app/src/main/res/drawable-xhdpi/static_1.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable-xhdpi/static_2.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/main/res/drawable-xhdpi/static_3.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
10
app/src/main/res/drawable-xhdpi/unselected_dot_accent.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="ring"
|
||||
android:thickness="5dp"
|
||||
android:innerRadius="0dp"
|
||||
android:useLevel="false">
|
||||
|
||||
<solid android:color="@color/color_accent"/>
|
||||
|
||||
</shape>
|
||||
BIN
app/src/main/res/drawable-xhdpi/welcome_img.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
app/src/main/res/drawable-xxhdpi/caregiver_img.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xxhdpi/forget_pin_email_img.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
app/src/main/res/drawable-xxhdpi/senior_img.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xxhdpi/static_1.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
app/src/main/res/drawable-xxhdpi/static_2.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable-xxhdpi/static_3.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
app/src/main/res/drawable-xxhdpi/welcome_img.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/caregiver_img.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/forget_pin_email_img.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/senior_img.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/static_1.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/static_2.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/static_3.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/welcome_img.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
13
app/src/main/res/drawable/arrow_back.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="12.414dp"
|
||||
android:height="22.828dp"
|
||||
android:viewportWidth="12.414"
|
||||
android:viewportHeight="22.828">
|
||||
<path
|
||||
android:pathData="M11,21.414 L1,11.414 11,1.414"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#000"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
23
app/src/main/res/drawable/checked_bpx.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="25dp"
|
||||
android:height="25dp"
|
||||
android:viewportWidth="25"
|
||||
android:viewportHeight="25">
|
||||
<path
|
||||
android:pathData="M3,0L22,0A3,3 0,0 1,25 3L25,22A3,3 0,0 1,22 25L3,25A3,3 0,0 1,0 22L0,3A3,3 0,0 1,3 0z"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#fff"
|
||||
android:strokeColor="#00000000"/>
|
||||
<path
|
||||
android:pathData="M3,0.5L22,0.5A2.5,2.5 0,0 1,24.5 3L24.5,22A2.5,2.5 0,0 1,22 24.5L3,24.5A2.5,2.5 0,0 1,0.5 22L0.5,3A2.5,2.5 0,0 1,3 0.5z"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#c9e0fb"/>
|
||||
<path
|
||||
android:pathData="M18.465,8.898l-8.2,8.2L6.535,13.372"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#2c2c2c"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
14
app/src/main/res/drawable/edit_text_bg.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid
|
||||
android:color="#EBF3FC"/>
|
||||
|
||||
<corners
|
||||
android:radius="10dp"/>
|
||||
|
||||
<stroke android:width="1dp"
|
||||
android:color="#C9E0FB"/>
|
||||
|
||||
</shape>
|
||||
12
app/src/main/res/drawable/edit_text_bg_2.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid android:color="@color/white"/>
|
||||
|
||||
<stroke android:color="#C9E0FB"
|
||||
android:width="1dp"/>
|
||||
|
||||
<corners android:radius="5dp"/>
|
||||
|
||||
</shape>
|
||||
16
app/src/main/res/drawable/green_check.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:viewportWidth="20"
|
||||
android:viewportHeight="20">
|
||||
<path
|
||||
android:pathData="M20,10A10,10 0,1 1,10 0,10 10,0 0,1 20,10Z"
|
||||
android:fillColor="#008f5d"/>
|
||||
<path
|
||||
android:pathData="M15.556,6.667l-7.778,7.778L4.444,11.111"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#fff"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_accent_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="60dp"
|
||||
android:height="60dp"
|
||||
android:viewportWidth="60"
|
||||
android:viewportHeight="60">
|
||||
<path
|
||||
android:pathData="M30,30m-30,0a30,30 0,1 1,60 0a30,30 0,1 1,-60 0"
|
||||
android:fillColor="#aee0ff"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_add_img_outline.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="35dp"
|
||||
android:height="35dp"
|
||||
android:viewportWidth="35"
|
||||
android:viewportHeight="35">
|
||||
<path
|
||||
android:pathData="M21.135,24.433a6.671,6.671 0,0 0,6.542 -6.793,6.671 6.671,0 0,0 -6.542,-6.793 6.671,6.671 0,0 0,-6.542 6.793A6.678,6.678 0,0 0,21.135 24.433ZM21.135,12.357a5.188,5.188 0,0 1,5.088 5.283,5.091 5.091,0 1,1 -10.176,0 5.194,5.194 0,0 1,5.088 -5.283ZM11.686,12.357L5.871,12.357v-1.51h5.815ZM17.501,28.957L17.501,27.452L30.584,27.452a1.484,1.484 0,0 0,1.454 -1.51v-15.1a1.484,1.484 0,0 0,-1.454 -1.51L28.403,9.332a2.227,2.227 0,0 1,-2.181 -2.264,0.741 0.741,0 0,0 -0.727,-0.755L16.774,6.313a0.741,0.741 0,0 0,-0.727 0.755,2.227 2.227,0 0,1 -2.181,2.264L10.232,9.332L10.232,7.828L7.325,7.828v1.51L4.417,9.338a1.484,1.484 0,0 0,-1.454 1.51L2.963,22.924L1.51,22.924L1.51,10.847A2.968,2.968 0,0 1,4.417 7.828L5.871,7.828L5.871,6.319h5.815v1.51h2.181a0.741,0.741 0,0 0,0.727 -0.755A2.227,2.227 0,0 1,16.774 4.809h8.722a2.227,2.227 0,0 1,2.181 2.264,0.741 0.741,0 0,0 0.727,0.755h2.181a2.968,2.968 0,0 1,2.907 3.019v15.1a2.968,2.968 0,0 1,-2.907 3.019ZM8.779,33.487L7.325,33.487v-6.04L1.51,27.447L1.51,25.943L7.325,25.943L7.325,19.909L8.778,19.909v6.038h5.815v1.508L8.778,27.455Z"
|
||||
android:fillColor="#005f9a"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_apps.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_calender.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M19,4h-1V2h-2v2H8V2H6v2H5C3.89,4 3.01,4.9 3.01,6L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V6C21,4.9 20.1,4 19,4zM19,20H5V10h14V20zM9,14H7v-2h2V14zM13,14h-2v-2h2V14zM17,14h-2v-2h2V14zM9,18H7v-2h2V18zM13,18h-2v-2h2V18zM17,18h-2v-2h2V18z"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_contact_outline.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M13,8c0,-2.21 -1.79,-4 -4,-4S5,5.79 5,8s1.79,4 4,4S13,10.21 13,8zM11,8c0,1.1 -0.9,2 -2,2S7,9.1 7,8s0.9,-2 2,-2S11,6.9 11,8zM1,18v2h16v-2c0,-2.66 -5.33,-4 -8,-4S1,15.34 1,18zM3,18c0.2,-0.71 3.3,-2 6,-2c2.69,0 5.78,1.28 6,2H3zM20,15v-3h3v-2h-3V7h-2v3h-3v2h3v3H20z"/>
|
||||
</vector>
|
||||
12
app/src/main/res/drawable/ic_delete_outline.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:viewportWidth="20"
|
||||
android:viewportHeight="20">
|
||||
<path
|
||||
android:pathData="M19.333,2.669L13.267,2.669a3.333,3.333 0,0 0,-6.533 0L0.667,2.669a0.667,0.667 0,1 0,0 1.333L19.333,4.002a0.667,0.667 0,1 0,0 -1.333ZM10,1.336a2,2 0,0 1,1.88 1.333L8.12,2.669A2,2 0,0 1,10 1.336ZM16.92,5.389a0.665,0.665 0,1 0,0.413 0.613,0.7 0.7,0 0,0 -0.193,-0.473A0.667,0.667 0,0 0,16.92 5.389ZM16.667,8.002a0.667,0.667 0,0 0,-0.667 0.667v2a0.667,0.667 0,0 0,1.333 0v-2A0.667,0.667 0,0 0,16.667 8.002ZM16.667,12.668a0.667,0.667 0,0 0,-0.667 0.667L16,18a0.667,0.667 0,0 1,-0.667 0.667L4.667,18.667A0.667,0.667 0,0 1,4 18v-12a0.667,0.667 0,0 0,-1.333 0v12a2,2 0,0 0,2 2L15.333,20a2,2 0,0 0,2 -2L17.333,13.334A0.667,0.667 0,0 0,16.667 12.668Z"
|
||||
android:fillColor="#231815"/>
|
||||
<path
|
||||
android:pathData="M7.31,15.364v-8.746a0.673,0.673 0,0 0,-1.346 0v8.746a0.673,0.673 0,0 0,1.346 0ZM10.674,15.364v-8.746a0.673,0.673 0,0 0,-1.345 0v8.746a0.673,0.673 0,0 0,1.345 0ZM14.038,15.364v-8.746a0.673,0.673 0,0 0,-1.345 0v8.746a0.673,0.673 0,0 0,1.345 0Z"
|
||||
android:fillColor="#231815"/>
|
||||
</vector>
|
||||
34
app/src/main/res/drawable/ic_dob_outline.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="21dp"
|
||||
android:height="21dp"
|
||||
android:viewportWidth="21"
|
||||
android:viewportHeight="21">
|
||||
<path
|
||||
android:pathData="M2.5,3.5L18.5,3.5A2,2 0,0 1,20.5 5.5L20.5,18.5A2,2 0,0 1,18.5 20.5L2.5,20.5A2,2 0,0 1,0.5 18.5L0.5,5.5A2,2 0,0 1,2.5 3.5z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#5b5b5b"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M15.163,0.5L15.163,5.467"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#5b5b5b"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M6.365,0.5L6.365,5.467"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#5b5b5b"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M0.5,9.978L20.203,9.978"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#5b5b5b"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/ic_done.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
|
||||
</vector>
|
||||
27
app/src/main/res/drawable/ic_edit_outline.xml
Normal file
@@ -0,0 +1,27 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="21.5dp"
|
||||
android:height="21.5dp"
|
||||
android:viewportWidth="21.5"
|
||||
android:viewportHeight="21.5">
|
||||
<path
|
||||
android:pathData="M12.626,2.277 L3.949,11.498A3.242,3.242 0,0 0,3.239 13.016l-0.391,3.438a1.617,1.617 0,0 0,1.976 1.878l3.4,-0.584a3.031,3.031 0,0 0,1.469 -0.8l8.677,-9.221c1.5,-1.592 2.177,-3.406 -0.159,-5.624C15.892,-0.089 14.127,0.689 12.626,2.277Z"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#131313"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M11.715,4.427a5.324,5.324 0,0 0,4.622 4.608"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#131313"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M0.75,20.75L20.75,20.75"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.5"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#131313"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
||||