diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd45b12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +*.iml +.gradle +/local.properties +/.idea/caches/build_file_checksums.ser +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..74b3be9 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..eb2873e --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..703e5d4 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..697c95f --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,62 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "achmadaffandi.mdisaster" + minSdkVersion 17 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' + } + sourceSets { + main { + res.srcDirs = + [ + 'src/main/res/layouts/slide', + 'src/main/res/layouts', + 'src/main/res' + ] + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + buildToolsVersion '28.0.3' +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.exifinterface:exifinterface:1.0.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' + + //firebase lib + implementation 'com.google.firebase:firebase-core:17.4.2' + implementation 'com.google.firebase:firebase-database:19.3.0' + implementation 'com.google.firebase:firebase-auth:19.3.1' + implementation 'com.google.firebase:firebase-storage:19.1.1' + implementation 'com.firebaseui:firebase-ui-database:0.4.0' + + //interface lib + implementation 'com.github.apl-devs:appintro:v4.2.3' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'com.squareup.picasso:picasso:2.71828' +} + +apply plugin: 'com.google.gms.google-services' diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..62f37b8 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,55 @@ +{ + "project_info": { + "project_number": "642033223709", + "firebase_url": "https://mdisaster-2019.firebaseio.com", + "project_id": "mdisaster-2019", + "storage_bucket": "mdisaster-2019.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:642033223709:android:c5e9c5595dc6f2d0", + "android_client_info": { + "package_name": "achmadaffandi.mdisaster" + } + }, + "oauth_client": [ + { + "client_id": "642033223709-2ffca9ns763gl1rjo3ake9qos13fdjrc.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "achmadaffandi.mdisaster", + "certificate_hash": "1f61e2934d78e12c76194a5f306fe0fdb995a897" + } + }, + { + "client_id": "642033223709-tdvad7bvis36asvl8bhdeca0q0ljfata.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCtSXaHBO_NSrdM4t17GBHp6jiEh7Xw7YI" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 2, + "other_platform_oauth_client": [ + { + "client_id": "642033223709-tdvad7bvis36asvl8bhdeca0q0ljfata.apps.googleusercontent.com", + "client_type": 3 + } + ] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -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 diff --git a/app/src/androidTest/java/achmadaffandi/mdisaster/ExampleInstrumentedTest.java b/app/src/androidTest/java/achmadaffandi/mdisaster/ExampleInstrumentedTest.java new file mode 100644 index 0000000..afc934d --- /dev/null +++ b/app/src/androidTest/java/achmadaffandi/mdisaster/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package achmadaffandi.mdisaster; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.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 Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("achmadaffandi.mdisaster", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ab80af6 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/achmadaffandi/mdisaster/CreateDisasterActivity.java b/app/src/main/java/achmadaffandi/mdisaster/CreateDisasterActivity.java new file mode 100644 index 0000000..6be429a --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/CreateDisasterActivity.java @@ -0,0 +1,159 @@ +package achmadaffandi.mdisaster; + +import androidx.appcompat.app.AppCompatActivity; + +import android.app.DatePickerDialog; +import android.content.Intent; +import android.os.Bundle; +import android.text.InputType; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +import achmadaffandi.mdisaster.Model.DisasterData; + +public class CreateDisasterActivity extends AppCompatActivity { + + private Button btn_backInitateDis, btn_createDis; + private EditText et_cd_calendar, et_ketLainDis; + private AutoCompleteTextView cd_jenisbahaya; + private String[] arrJenisBahaya; + private String ketLainDis, jenisBahaya, jenisBencana, tglKejadian, lokKejadian; + private DatabaseReference mDatabase; + private TextView tvDisType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_create_disaster); + btn_backInitateDis = (Button) findViewById(R.id.btn_backInitiateDis); + btn_createDis = (Button) findViewById(R.id.btn_createDis); + et_cd_calendar = (EditText) findViewById(R.id.et_cd_calendar); + cd_jenisbahaya = (AutoCompleteTextView) findViewById(R.id.cd_jenisbahaya); + arrJenisBahaya = getResources().getStringArray(R.array.jenis_bahaya); + et_ketLainDis = (EditText) findViewById(R.id.et_ketLainCreateDis); + tvDisType = (TextView) findViewById(R.id.tv_distype); + + Intent i = getIntent(); + String disType = i.getStringExtra(InitiateDisasterActivity.KEY_DISTYPE); + setJenisBencana(disType); + tvDisType.setText(disType); + + et_cd_calendar.setInputType(InputType.TYPE_NULL); + et_cd_calendar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showDateDialog(et_cd_calendar); + } + }); + + ArrayAdapter adapJeniSBahaya = new ArrayAdapter(CreateDisasterActivity.this, + android.R.layout.simple_list_item_1, arrJenisBahaya); + cd_jenisbahaya.setAdapter(adapJeniSBahaya); + cd_jenisbahaya.setThreshold(1); + cd_jenisbahaya.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) { + cd_jenisbahaya.showDropDown(); + } + } + }); + + btn_createDis.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + createNewDisaster(); + } + }); + + btn_backInitateDis.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(CreateDisasterActivity.this, InitiateDisasterActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + + private void showDateDialog(final EditText date_in) { + final Calendar calendar = Calendar.getInstance(); + DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { + @Override + public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month); + calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); + date_in.setText(simpleDateFormat.format(calendar.getTime())); + setTglKejadian(date_in.getText().toString()); + } + }; + + new DatePickerDialog(CreateDisasterActivity.this, dateSetListener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show(); + } + + public void createNewDisaster() { + setKetLainDis(et_ketLainDis.getText().toString()); + setJenisBahaya(cd_jenisbahaya.getText().toString()); + mDatabase = FirebaseDatabase.getInstance().getReference().child("Disaster").push(); + DisasterData dData = new DisasterData(getJenisBencana(), getTglKejadian(), getJenisBahaya(), getKetLainDis()); + mDatabase.setValue(dData); + Toast.makeText(CreateDisasterActivity.this, "Data bencana baru telah ditambahkan", Toast.LENGTH_SHORT).show(); + Intent i = new Intent(CreateDisasterActivity.this, DisListActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + + public String getKetLainDis() { + return ketLainDis; + } + + public void setKetLainDis(String ketLainDis) { + this.ketLainDis = ketLainDis; + } + + public String getJenisBahaya() { + return jenisBahaya; + } + + public void setJenisBahaya(String jenisBahaya) { + this.jenisBahaya = jenisBahaya; + } + + public String getJenisBencana() { + return jenisBencana; + } + + public void setJenisBencana(String jenisBencana) { + this.jenisBencana = jenisBencana; + } + + public String getTglKejadian() { + return tglKejadian; + } + + public void setTglKejadian(String tglKejadian) { + this.tglKejadian = tglKejadian; + } + + public String getLokKejadian() { + return lokKejadian; + } + + public void setLokKejadian(String lokKejadian) { + this.lokKejadian = lokKejadian; + } +} \ No newline at end of file diff --git a/app/src/main/java/achmadaffandi/mdisaster/DashboardDisasterActivity.java b/app/src/main/java/achmadaffandi/mdisaster/DashboardDisasterActivity.java new file mode 100644 index 0000000..1528c7c --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/DashboardDisasterActivity.java @@ -0,0 +1,55 @@ +package achmadaffandi.mdisaster; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.GridLayout; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +public class DashboardDisasterActivity extends AppCompatActivity { + + private DatabaseReference mDatabase; + private GridLayout gridLayout; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dashboard_disaster); + gridLayout = (GridLayout) findViewById(R.id.mainGrid); + setSingleEvent(gridLayout); + + mDatabase = FirebaseDatabase.getInstance().getReference(); + + FloatingActionButton fab = findViewById(R.id.fab_create_dislist); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(DashboardDisasterActivity.this, InitiateDisasterActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + + //onClickListener untuk elemen dashboard yang terpilih + private void setSingleEvent(GridLayout gridLayout) { + for (int i = 0; i < gridLayout.getChildCount(); i++) { + CardView cardView = (CardView) gridLayout.getChildAt(i); + final int finalI = i; + cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(DashboardDisasterActivity.this, DisListActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/DisDetailActivity.java b/app/src/main/java/achmadaffandi/mdisaster/DisDetailActivity.java new file mode 100644 index 0000000..8da0131 --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/DisDetailActivity.java @@ -0,0 +1,25 @@ +package achmadaffandi.mdisaster; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.widget.TextView; + +public class DisDetailActivity extends AppCompatActivity { + + private TextView tv_judulDisaster, tv_tglKejadian, tv_lokKejadian, tv_jenisBahaya, tv_ketLain; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dis_detail); + + tv_judulDisaster = (TextView) findViewById(R.id.tv_judulDisaster); + tv_tglKejadian = (TextView) findViewById(R.id.tv_tglKejadian); + tv_lokKejadian = (TextView) findViewById(R.id.tv_lokKejadian); + tv_jenisBahaya = (TextView) findViewById(R.id.tv_jenisBahaya); + tv_ketLain = (TextView) findViewById(R.id.tv_ketLain); + + } +} \ No newline at end of file diff --git a/app/src/main/java/achmadaffandi/mdisaster/DisListActivity.java b/app/src/main/java/achmadaffandi/mdisaster/DisListActivity.java new file mode 100644 index 0000000..35372bb --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/DisListActivity.java @@ -0,0 +1,86 @@ +package achmadaffandi.mdisaster; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.LinearLayoutManager; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.firebase.ui.database.FirebaseRecyclerAdapter; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +import achmadaffandi.mdisaster.Holder.DisList_Holder; +import achmadaffandi.mdisaster.Model.DisasterData; + +public class DisListActivity extends AppCompatActivity { + + private DatabaseReference mDatabase; + private RecyclerView recyclerView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_dis_list); + + recyclerView = (RecyclerView) findViewById(R.id.recyclerview); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); + itemAnimator.setAddDuration(200); + itemAnimator.setRemoveDuration(200); + recyclerView.setItemAnimator(itemAnimator); + + mDatabase = FirebaseDatabase.getInstance().getReference().child("Disaster"); + mDatabase.keepSynced(true); + + FloatingActionButton fab = findViewById(R.id.fab_create_dislist); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(DisListActivity.this, InitiateDisasterActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + + @Override + protected void onStart() { + super.onStart(); + FirebaseRecyclerAdapter mAdapter = new FirebaseRecyclerAdapter + (DisasterData.class, R.layout.row_dis_list, DisList_Holder.class, mDatabase) { + @Override + protected void populateViewHolder(DisList_Holder viewHolder, DisasterData model, int position) { + viewHolder.setTitle(model.getJenisBencana()); + viewHolder.setDesc("Terjadi: " + model.getTanggalKejadian() + ", Bahaya utama: " + model.getJenisBahaya()); + viewHolder.setImage(getApplicationContext(), model.getImageId()); + } + + @Override + public DisList_Holder onCreateViewHolder(ViewGroup parent, int viewType) { + DisList_Holder viewHolder = super.onCreateViewHolder(parent, viewType); + viewHolder.setOnClickListener(new DisList_Holder.ClickListener() { + @Override + public void onItemClick(View view, int position) { + Toast.makeText(DisListActivity.this, "Item clicked at " + position, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onItemLongClick(View view, int position) { + Toast.makeText(DisListActivity.this, "Item long clicked at " + position, Toast.LENGTH_SHORT).show(); + } + }); + return viewHolder; + } + + }; + + recyclerView.setAdapter(mAdapter); + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/ForgetPassActivity.java b/app/src/main/java/achmadaffandi/mdisaster/ForgetPassActivity.java new file mode 100644 index 0000000..3d27a3a --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/ForgetPassActivity.java @@ -0,0 +1,54 @@ +package achmadaffandi.mdisaster; + +import android.content.Intent; +import android.os.Bundle; +import com.google.android.material.snackbar.Snackbar; +import androidx.appcompat.app.AppCompatActivity; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; + + +public class ForgetPassActivity extends AppCompatActivity { + + private Button btn_backlogin, btn_forgetpass; + private EditText fp_email; + private ProgressBar progressBar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_forget_pass); + + fp_email = (EditText) findViewById(R.id.fp_email); + progressBar = findViewById(R.id.progressbar); + progressBar.setVisibility(View.GONE); + + btn_forgetpass = (Button) findViewById(R.id.btn_forgetpass); + btn_forgetpass.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "ini buat kalau lupa", Snackbar.LENGTH_SHORT) + .show(); + forgetPassword(); + } + }); + + btn_backlogin = (Button) findViewById(R.id.btn_backlogin); + btn_backlogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(ForgetPassActivity.this, LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + + private void forgetPassword(){ + final String email = fp_email.getText().toString().trim(); + progressBar.setVisibility(View.VISIBLE); + //part of emailing and confirmation + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/Holder/DisList_Holder.java b/app/src/main/java/achmadaffandi/mdisaster/Holder/DisList_Holder.java new file mode 100644 index 0000000..5c38520 --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/Holder/DisList_Holder.java @@ -0,0 +1,70 @@ +package achmadaffandi.mdisaster.Holder; + +import android.content.Context; +import androidx.recyclerview.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; +import achmadaffandi.mdisaster.R; + +public class DisList_Holder extends RecyclerView.ViewHolder { + + View mView; + + public DisList_Holder(View itemView) { + super(itemView); + mView = itemView; + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mClickListener.onItemClick(v, getAdapterPosition()); + + } + }); + itemView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + mClickListener.onItemLongClick(v, getAdapterPosition()); + return true; + } + }); + } + + private DisList_Holder.ClickListener mClickListener; + + //callback interface + public interface ClickListener{ + public void onItemClick(View view, int position); + public void onItemLongClick(View view, int position); + } + + public void setOnClickListener(DisList_Holder.ClickListener clickListener){ + mClickListener = clickListener; + } + + public void setTitle(String title) { + TextView post_title = (TextView) mView.findViewById(R.id.dis_title); + post_title.setText(title); + } + + public void setDesc(String desc) { + TextView post_title = (TextView) mView.findViewById(R.id.dis_desc); + post_title.setText(desc); + } + + public void setImage(Context ctx, String image) { + /* + ImageView post_img = (ImageView) mView.findViewById(R.id.dis_img); + Picasso.with(ctx).load(image).into(post_img); + + + Context c = this.itemView.getContext(); + int img_id = c.getResources().getIdentifier("drawable/" + imageId, null, c.getPackageName()); + ImageView post_img = (ImageView) mView.findViewById(R.id.dis_img); + post_img.setImageResource(img_id); + */ + } +} \ No newline at end of file diff --git a/app/src/main/java/achmadaffandi/mdisaster/InitiateDisasterActivity.java b/app/src/main/java/achmadaffandi/mdisaster/InitiateDisasterActivity.java new file mode 100644 index 0000000..d4f4349 --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/InitiateDisasterActivity.java @@ -0,0 +1,68 @@ +package achmadaffandi.mdisaster; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.cardview.widget.CardView; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.GridLayout; +import android.widget.Toast; + +public class InitiateDisasterActivity extends AppCompatActivity { + + private GridLayout gridLayout; + public static final String KEY_DISTYPE = "disaster_type"; + private String disasterType; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_initiate_disaster); + + gridLayout = (GridLayout) findViewById(R.id.mainGrid); + setSingleEvent(gridLayout); + } + + //onClickListener untuk jenis bencana terpilih + private void setSingleEvent(GridLayout gridLayout) { + for (int i = 0; i < gridLayout.getChildCount(); i++) { + CardView cardView = (CardView) gridLayout.getChildAt(i); + final int finalI = i; + cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + callDisasterType(finalI); + Intent i = new Intent(InitiateDisasterActivity.this, CreateDisasterActivity.class); + i.putExtra(KEY_DISTYPE, getDisasterType()); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + } + } + + public String getDisasterType() { + return disasterType; + } + + public void setDisasterType(String disasterType) { + this.disasterType = disasterType; + } + + private void callDisasterType(int i) { + if (i == 0) { + setDisasterType("Gempa"); + } else if (i == 1) { + setDisasterType("Kebakaran"); + } else if (i == 2) { + setDisasterType("Banjir"); + } else if (i == 3) { + setDisasterType("Tanah Longsor"); + } else if (i == 4) { + setDisasterType("Erupsi"); + } else if (i == 5) { + setDisasterType("Lain-lain"); + } + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/Interface/SampleSlide.java b/app/src/main/java/achmadaffandi/mdisaster/Interface/SampleSlide.java new file mode 100644 index 0000000..382f96c --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/Interface/SampleSlide.java @@ -0,0 +1,41 @@ +package achmadaffandi.mdisaster.Interface; + +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class SampleSlide extends Fragment { + + private static final String ARG_LAYOUT_RES_ID = "layoutResId"; + private int layoutResId; + + public static SampleSlide newInstance(int layoutResId) { + SampleSlide sampleSlide = new SampleSlide(); + + Bundle args = new Bundle(); + args.putInt(ARG_LAYOUT_RES_ID, layoutResId); + sampleSlide.setArguments(args); + + return sampleSlide; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (getArguments() != null && getArguments().containsKey(ARG_LAYOUT_RES_ID)) { + layoutResId = getArguments().getInt(ARG_LAYOUT_RES_ID); + } + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + return inflater.inflate(layoutResId, container, false); + } +} \ No newline at end of file diff --git a/app/src/main/java/achmadaffandi/mdisaster/IntroActivity.java b/app/src/main/java/achmadaffandi/mdisaster/IntroActivity.java new file mode 100644 index 0000000..60e0ca0 --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/IntroActivity.java @@ -0,0 +1,33 @@ +package achmadaffandi.mdisaster; + +import android.content.Intent; +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import com.github.paolorotolo.appintro.AppIntro; +import achmadaffandi.mdisaster.Interface.SampleSlide; + +public class IntroActivity extends AppIntro { + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addSlide(SampleSlide.newInstance(R.layout.slide_1)); + addSlide(SampleSlide.newInstance(R.layout.slide_2)); + addSlide(SampleSlide.newInstance(R.layout.slide_3)); + showStatusBar(false); + } + + @Override + public void onSkipPressed(Fragment currentFragment) { + super.onSkipPressed(currentFragment); + Intent intent = new Intent(IntroActivity.this, LoginActivity.class); + startActivity(intent); + } + + @Override + public void onDonePressed(Fragment currentFragment) { + super.onDonePressed(currentFragment); + Intent intent = new Intent(IntroActivity.this, LoginActivity.class); + startActivity(intent); + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/LoginActivity.java b/app/src/main/java/achmadaffandi/mdisaster/LoginActivity.java new file mode 100644 index 0000000..d191398 --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/LoginActivity.java @@ -0,0 +1,208 @@ +package achmadaffandi.mdisaster; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.annotation.NonNull; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Handler; +import android.os.Bundle; +import android.util.Patterns; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.Query; +import com.google.firebase.database.ValueEventListener; + +import achmadaffandi.mdisaster.Model.User; + +public class LoginActivity extends AppCompatActivity { + + FirebaseAuth mAuth; + private static final String MyPrefs = "mdis"; + private EditText loginemail, loginpassword; + private String email, password; + private ProgressBar progressBar; + private DatabaseReference mUsers; + private Button btn_login; + //btn_signup, btn_forgotpass; + private RelativeLayout rellay_login1; + //rellay_login2; + Handler handler = new Handler(); + Runnable runnable = new Runnable() { + @Override + public void run() { + rellay_login1.setVisibility(View.VISIBLE); + //rellay_login2.setVisibility(View.VISIBLE); + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + + SharedPreferences sp = getSharedPreferences(MyPrefs, Context.MODE_PRIVATE); + if (!sp.getBoolean("first", false)) { + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean("first", true); + editor.apply(); + Intent intent = new Intent(this, IntroActivity.class); + startActivity(intent); + } + + mAuth = FirebaseAuth.getInstance(); + //cek apakah user sudah login + if (mAuth.getCurrentUser() != null) { + mUsers = FirebaseDatabase.getInstance().getReference().child("Users"); + Query query = mUsers.orderByChild("email").equalTo(mAuth.getCurrentUser().getEmail()); + query.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { + User user = childSnapshot.getValue(User.class); + String type = user.getType(); + if (type.equals("mainAdmin")) { + Intent i = new Intent(LoginActivity.this, DashboardDisasterActivity.class); + startActivity(i); + finish(); + } else if (type.equals("relawan")) { + Intent i = new Intent(LoginActivity.this, DisListActivity.class); + startActivity(i); + finish(); + } else { + Toast.makeText(LoginActivity.this, "peran belum diatur" + type, Toast.LENGTH_LONG).show(); + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); + } + }); + } + + + rellay_login1 = (RelativeLayout) findViewById(R.id.rellay_login1); + //rellay_login2 = (RelativeLayout) findViewById(R.id.rellay_login2); + handler.postDelayed(runnable, 1500); + loginemail = (EditText) findViewById(R.id.loginemail); + loginpassword = (EditText) findViewById(R.id.loginpassword); + progressBar = findViewById(R.id.progressbar); + progressBar.setVisibility(View.GONE); + + btn_login = (Button) findViewById(R.id.btn_login); + btn_login.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + userLogin(); + } + }); + + /* + //fungsi daftar + btn_signup = (Button) findViewById(R.id.btn_signup); + btn_signup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(LoginActivity.this, SignUpActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + + //fungsi lupa password + btn_forgotpass = (Button) findViewById(R.id.btn_forgotpass); + btn_forgotpass.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent i = new Intent (LoginActivity.this, ForgetPassActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + */ + } + + private void userLogin() { + email = loginemail.getText().toString().trim(); + password = loginpassword.getText().toString().trim(); + + if (email.isEmpty()) { + loginemail.setError(getString(R.string.input_error_email)); + loginemail.requestFocus(); + return; + } + + if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { + loginemail.setError(getString(R.string.input_error_email)); + loginemail.requestFocus(); + return; + } + + if (password.isEmpty()) { + loginpassword.setError(getString(R.string.input_error_password)); + loginpassword.requestFocus(); + return; + } + + if (password.length() < 6) { + loginpassword.setError(getString(R.string.input_error_password_length)); + loginpassword.requestFocus(); + return; + } + + progressBar.setVisibility(View.VISIBLE); + mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + mUsers = FirebaseDatabase.getInstance().getReference().child("Users"); + Query query = mUsers.orderByChild("email").equalTo(email); + query.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) { + User user = childSnapshot.getValue(User.class); + String type = user.getType(); + if (task.isSuccessful()) { + if (type.equals("mainAdmin")) { + Intent i = new Intent(LoginActivity.this, DashboardDisasterActivity.class); + startActivity(i); + finish(); + } else if (type.equals("relawan")) { + Intent i = new Intent(LoginActivity.this, DisListActivity.class); + startActivity(i); + finish(); + } else { + Toast.makeText(LoginActivity.this, "peran belum diatur" + type, Toast.LENGTH_LONG).show(); + } + } else { + Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_LONG).show(); + } + }); + progressBar.setVisibility(View.GONE); + } + }); + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/Model/DisasterData.java b/app/src/main/java/achmadaffandi/mdisaster/Model/DisasterData.java new file mode 100644 index 0000000..e8f4598 --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/Model/DisasterData.java @@ -0,0 +1,88 @@ +package achmadaffandi.mdisaster.Model; + +public class DisasterData { + private String title, description, imageId; + private String jenisBencana, lokasiKejadian, tanggalKejadian, jenisBahaya, keteranganLain; + + public DisasterData(String title, String description, String imageId) { + this.title = title; + this.description = description; + this.imageId = imageId; + } + + public DisasterData(String jenisBencana, String tanggalKejadian, String jenisBahaya, String keteranganLain){ + this.jenisBencana = jenisBencana; + //this.lokasiKejadian = lokasiKejadian; + this.tanggalKejadian = tanggalKejadian; + this.jenisBahaya = jenisBahaya; + this.keteranganLain = keteranganLain; + } + + public DisasterData() { + + } + + public String getJenisBencana() { + return jenisBencana; + } + + public void setJenisBencana(String jenisBencana) { + this.jenisBencana = jenisBencana; + } + + public String getLokasiKejadian() { + return lokasiKejadian; + } + + public void setLokasiKejadian(String lokasiKejadian) { + this.lokasiKejadian = lokasiKejadian; + } + + public String getTanggalKejadian() { + return tanggalKejadian; + } + + public void setTanggalKejadian(String tanggalKejadian) { + this.tanggalKejadian = tanggalKejadian; + } + + public String getJenisBahaya() { + return jenisBahaya; + } + + public void setJenisBahaya(String jenisBahaya) { + this.jenisBahaya = jenisBahaya; + } + + public String getKeteranganLain() { + return keteranganLain; + } + + public void setKeteranganLain(String keteranganLain) { + this.keteranganLain = keteranganLain; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getImageId() { + return imageId; + } + + public void setImageId(String imageId) { + this.imageId = imageId; + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/Model/User.java b/app/src/main/java/achmadaffandi/mdisaster/Model/User.java new file mode 100644 index 0000000..94d179e --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/Model/User.java @@ -0,0 +1,48 @@ +package achmadaffandi.mdisaster.Model; + +public class User { + public String nama, email, phone, type; + + public User() { + + } + + public User(String nama, String email, String phone, String type) { + this.nama = nama; + this.email = email; + this.phone = phone; + this.type = type; + } + + public String getNama() { + return nama; + } + + public void setNama(String nama) { + this.nama = nama; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/app/src/main/java/achmadaffandi/mdisaster/SignUpActivity.java b/app/src/main/java/achmadaffandi/mdisaster/SignUpActivity.java new file mode 100644 index 0000000..2c7478f --- /dev/null +++ b/app/src/main/java/achmadaffandi/mdisaster/SignUpActivity.java @@ -0,0 +1,170 @@ +package achmadaffandi.mdisaster; + +import android.content.Intent; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Patterns; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuthUserCollisionException; +import com.google.firebase.database.FirebaseDatabase; + +import achmadaffandi.mdisaster.Model.User; + +public class SignUpActivity extends AppCompatActivity { + + private Button btn_signup, btn_backlogin; + private EditText su_nama, su_email, su_password, su_repassword, su_phone; + private ProgressBar progressBar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sign_up); + + su_nama = (EditText) findViewById(R.id.su_nama); + su_email = (EditText) findViewById(R.id.su_email); + su_password = (EditText) findViewById(R.id.su_password); + su_repassword = (EditText) findViewById(R.id.su_repassword); + su_phone = (EditText) findViewById(R.id.su_phone); + btn_signup = (Button) findViewById(R.id.btn_signup); + btn_backlogin = (Button) findViewById(R.id.btn_backlogin); + + progressBar = findViewById(R.id.progressbar); + progressBar.setVisibility(View.GONE); + + btn_signup.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + registerUser(); + } + }); + btn_backlogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent i = new Intent(SignUpActivity.this, LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } + }); + + } + + @Override + protected void onStart() { + super.onStart(); + if (FirebaseAuth.getInstance().getCurrentUser() != null) { + //handle the already login user + } + } + + private void registerUser() { + final String nama = su_nama.getText().toString().trim(); + final String email = su_email.getText().toString().trim(); + String password = su_password.getText().toString().trim(); + String repassword = su_repassword.getText().toString().trim(); + final String phone = su_phone.getText().toString().trim(); + String type = "relawan"; + + if (nama.isEmpty()) { + su_nama.setError(getString(R.string.input_error_nama)); + su_nama.requestFocus(); + return; + } + + if (email.isEmpty()) { + su_email.setError(getString(R.string.input_error_email)); + su_email.requestFocus(); + return; + } + + if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { + su_email.setError(getString(R.string.input_error_email)); + su_email.requestFocus(); + return; + } + + if (password.isEmpty()) { + su_password.setError(getString(R.string.input_error_password)); + su_password.requestFocus(); + return; + } + + if (password.length() < 6) { + su_password.setError(getString(R.string.input_error_password_length)); + su_password.requestFocus(); + return; + } + + if (!repassword.equals(password)) { + su_repassword.setError(getString(R.string.input_error_repassword)); + su_repassword.requestFocus(); + return; + } + + if (phone.isEmpty()) { + su_phone.setError(getString(R.string.input_error_phone)); + su_phone.requestFocus(); + return; + } + + if (phone.length() < 9) { + su_phone.setError(getString(R.string.input_error_phone)); + su_phone.requestFocus(); + return; + } + + progressBar.setVisibility(View.VISIBLE); + FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + + User user = new User( + nama, + email, + phone, + type + ); + + FirebaseDatabase.getInstance().getReference("Users") + .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) + .setValue(user).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + progressBar.setVisibility(View.GONE); + if (task.isSuccessful()) { + Toast.makeText(SignUpActivity.this, getString(R.string.registration_success), Toast.LENGTH_LONG).show(); + Intent i = new Intent(SignUpActivity.this, LoginActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } else { + if (task.getException() instanceof FirebaseAuthUserCollisionException) { + Toast.makeText(getApplicationContext(), "Anda telah terdaftar", Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(SignUpActivity.this, getString(R.string.registration_failed), Toast.LENGTH_LONG).show(); + } + } + } + }); + + } else { + Toast.makeText(SignUpActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show(); + } + } + }); + + } + + +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/btn_bg.xml b/app/src/main/res/drawable/btn_bg.xml new file mode 100644 index 0000000..3472e28 --- /dev/null +++ b/app/src/main/res/drawable/btn_bg.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/et_bg.xml b/app/src/main/res/drawable/et_bg.xml new file mode 100644 index 0000000..2cea237 --- /dev/null +++ b/app/src/main/res/drawable/et_bg.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/grad_bg1.xml b/app/src/main/res/drawable/grad_bg1.xml new file mode 100644 index 0000000..c48e932 --- /dev/null +++ b/app/src/main/res/drawable/grad_bg1.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_my_icon.png b/app/src/main/res/drawable/ic_my_icon.png new file mode 100644 index 0000000..a042f7b Binary files /dev/null and b/app/src/main/res/drawable/ic_my_icon.png differ diff --git a/app/src/main/res/drawable/introbg_01.png b/app/src/main/res/drawable/introbg_01.png new file mode 100644 index 0000000..d533be4 Binary files /dev/null and b/app/src/main/res/drawable/introbg_01.png differ diff --git a/app/src/main/res/drawable/introbg_02.png b/app/src/main/res/drawable/introbg_02.png new file mode 100644 index 0000000..5b69d0f Binary files /dev/null and b/app/src/main/res/drawable/introbg_02.png differ diff --git a/app/src/main/res/drawable/introbg_03.png b/app/src/main/res/drawable/introbg_03.png new file mode 100644 index 0000000..03e362d Binary files /dev/null and b/app/src/main/res/drawable/introbg_03.png differ diff --git a/app/src/main/res/drawable/logofix.png b/app/src/main/res/drawable/logofix.png new file mode 100644 index 0000000..ec315fd Binary files /dev/null and b/app/src/main/res/drawable/logofix.png differ diff --git a/app/src/main/res/layouts/layout/activity_dashboard_disaster.xml b/app/src/main/res/layouts/layout/activity_dashboard_disaster.xml new file mode 100644 index 0000000..c866be2 --- /dev/null +++ b/app/src/main/res/layouts/layout/activity_dashboard_disaster.xml @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/layout/activity_dis_list.xml b/app/src/main/res/layouts/layout/activity_dis_list.xml new file mode 100644 index 0000000..55e0e0f --- /dev/null +++ b/app/src/main/res/layouts/layout/activity_dis_list.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/layout/activity_forget_pass.xml b/app/src/main/res/layouts/layout/activity_forget_pass.xml new file mode 100644 index 0000000..d765139 --- /dev/null +++ b/app/src/main/res/layouts/layout/activity_forget_pass.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + +