• Tidak ada hasil yang ditemukan

METODOLOGI PENELITIAN

V- 1 BAB V

5.2 Saran

Adapun saran yang dapat diberikan untuk pengembangan” Rancang Bangun Aplikasi Monitoring Penderita Epilepsi Menggunakan Sensor Akselerometer Pada Smartphone Android” selanjutnya pada tugas akhir ini antara lain:

1. Memperbaiki output untuk sumbu x, y, dan z pada aplikasi monitoring penderita epilepsi ini menjadi lebih baik.

2. Menambahkan jumlah sensor dibeberapa jumlah titik agar dapat mendeteksi aktivitas fisik pengguna yang lebih bervariasi dan lebih akurat.

3. Menghilangkan fitur spam pada sms tanpa menghilangkan fitur utama.

4. Dari hasil uji beberapa aktivitas fisik berupa melompat dan berlari, sensor secara otomatis aktif dan membaca kondisi dan sering kali dianggap terjatuh.

5. Aplikasi tidak berfungsi saat handphone dalam keadaan terkunci.

DAFTAR PUSTAKA

[1] Nathasia Suryawijaya, Candida Isabel Lopes Sam, and Anna Marita Gelgel,

"PENGETAHUAN MASYARAKAT TENTANG EPILEPSI DAN PERILAKU TERHADAP PENYANDANG EPILEPSI PADA MASYARAKAT KEWAPANTE, KABUPATEN SIKKA," CALLOSUM NEUROLOGY, pp. 90-97, 2019.

[2] Novera Christina Rachmawati, "PERMASALAHAN DAN KOPING PADA IBU DARI ANAK," Semarang, 2016.

[3] Nurwinta Catur Wulan Maryanti, "Epilepsi dan Budaya," buletinpsikolosi, pp. 22-31, 2016.

[4] Muhammad Rizky Kurniawan, "PORTABLE MONITORING EPILEPSY

(PORMONEP) UNTUK MEMONITOR KEHILANGAN KESEIMBANGAN DAN KEJANG PADA PENDERITA EPILEPSI," Pekanbaru, 2020.

[5] Sunarni , Kartika Imam Santoso, and Mendi Sangkoyrala Hidayat, "RANCANG BANGUN APLIKASI GO-TUTOR BERBASIS ANDROID PADA BIMBINGAN BELAJAR RUMAH PINTAR MAGELANG," infokam, 2017.

[6] Imaduddin Al Fikri, Darlis Herumurti, and Ridho Rahman H, "Aplikasi Navigasi Berbasis Perangkat Bergerak dengan Menggunakan Platform Wikitude untuk Studi Kasus Lingkungan ITS," jurnal teknik, 2016.

[7] Musfirah Putri Lukman and Hendra Surasa, "PORTABLE MONITORING PENDERITA PENYAKIT JANTUNG TERHADAP SERANGAN BERULANG BERBASISANDROID," seminar nasioanl teknologi informasi, 2017.

[8] Rio Riantana, Hanief Beta, Waskita Cahya, and Darsono , "Aplikasi Sensor Accelerometer pada Handphone Android sebagai Pencatat Getaran Gempabumi secara Online," Jurnal fisika dan alikasinya, 2015.S

[9] Anggita Wisnu Pradan Putra, "APLIKASI DETEKSI JATUH PADA PONSEL PINTAR ANDROID (VOICE ALERT) MENGGUNAKAN SENSOR ANDROID (VOICE ALERT) MENGGUNAKAN SENSOR," yogyakarta, 2018.

[10] Made Liandana, I Wayan Mustika, and Selo , "PENGEMBANGAN SISTEM DETEKSI JATUH PADA LANJUT USIA MENGGUNAKAN SENSOR ACCELEROMETER PADA SMARTPHONE ANDROID," sentika, 2014.

[11] Tran Tri Dang, Hai Troung, and Tran Khanh Dang, "Automatic Fall Detection using Smartphone Acceleration Sensor," IJACSA, 2016.

[12] Muhammad Firmansyah, Achmad Rizal, and Erwin Susanto, "RANCANG BANGUN

SISTEM FALL DETECTION UNTUK ORANG LANJUT USIA BERBASIS INERTIAL MEASUREMENT UNIT," ResearchGate, 2016.

[13] Taufik rahman, dedy kurniawan, “ PERANCANGAN PEDOMETER BERBASIS SENSOR ACCELEROMETER ANDROID” E-ISSN 25277

[14] Siti Norhabibah, Wahtu Andhyka K, and Diah Risqiwati, "Rancang Bangun Sistem Monitoring Deteksi Jatuh untuk Manula dengan Menggunakan Accelerometer,"

Joincs, pp. 43-52, 2016.

[15] Yuni ardila, Handayani Trandrsa, Isyearieshanti, “Deteksi Penyakit Epilepsi dengan Menggunakan Entropi Permutasi, K-means Clustering, dan Multilayer Perceptron”

ISSN 2337

[16] Musfirah putri , Hendra Susara, “MOBILE APPLICATION SISTEM MONITORING KONDISI PASIEN SERANGAN JANTUNG BERBASIS GOOGLE MAPS DAN ANDROID” ISSN 2406

[17] Nuh gusta A, Tun Paski S, “Faktor Faktor Yang Berpengaruh Pada Kejadian Epilepsi Intraktabel Anak Di Rsup Dr Kariadi Semarang” ISSN 2540

[18] Selvy Ariska, “Aplikasi Monitoring Kegiatan Santri Berbasis Android Pada Pondok Pesantren Dar El Hikmah” Pekanbaru, 2019.

A-1

LAMPIRAN A

Tabel A.1 Data Training Sensor Accelerometer

AccX AccY AccZ Kelas

-0,0723 0,3941 0,9595 Jatuh

0,0085 0,3905 1,0023 Jatuh

-0,0283 0,3742 0,9251 Jatuh

-0,0827 0,3306 0,9151 Jatuh

-0,1274 0,2603 1,0878 Jatuh

-0,0788 0,2305 1,8336 Jatuh

-0,0280 0,2163 1,1386 Jatuh

-0,0764 0,5307 1,0834 Jatuh

-0,0725 0,1022 1,1567 Jatuh

-0,2068 0,0446 0,9232 Jatuh

-0,1845 0,0360 0,9207 Jatuh

-0,2137 0,0580 0,8455 Jatuh

-0,2701 0,0070 0,8197 Jatuh

-0,0852 0,0173 0,8030 Jatuh

-0,2566 0,1008 1,0104 Jatuh

-0,0501 0,3878 0,7817 Jatuh

-0,0964 0,1469 0,9688 Jatuh

-0,2566 0,1005 1,0104 Jatuh

-00595 0,3878 0,7817 Jatuh

-0,0096 0,1469 0,9688 Jatuh

-0,0747 0,1675 0,8836 Jatuh

-0,0312 0,1626 1,0033 Jatuh

-0,0121 0,1245 1,0512 Jatuh

0,0271 0,1188 1,0184 Jatuh

0,0122 0,0812 1,1823 Jatuh

0,0997 0,0578 1,1037 Jatuh

0,0501 0,0337 1,1640 Jatuh

0,0484 0,0782 1,4193 Jatuh

-0,0534 0,1261 1,3981 Jatuh

0,2781 -0,4376 9,7682 Jatuh

0,3012 7,5044 5,3190 Jatuh

-7,9580 0,3445 5,3913 Jatuh

9,8391 -0,9057 1,6324 Jatuh

-9,5820 -0,4879 0,7368 Jatuh

-1.2587 0,3349 -9,6154 Jatuh

-0,0123 0,0218 0,0017 Jatuh

0,0278 -0,0128 0,0087 Jatuh

9,9314 -0,8721 0,7028 Jatuh

8,1762 -0,6452 5,6984 Jatuh

-8,1173 -0,3458 5,1263 Jatuh

-3,2184 1,4864 -9,7677 Jatuh

-0,0810 -1,8308 -9,6840 Jatuh

0,2378 -0,3546 9,7812 Jatuh

9,9702 -0,9132 0,0538 Jatuh

-9,5600 -0,4573 0,4519 Jatuh

0,3918 -0,3016 9,7698 Jatuh

0,0023 -0,0901 0,0022 Jatuh

B-1 LAMPIRAN B

KODE PROGRAM 1. Kode program halaman login

public class LoginActivity extends Activity { private static final String TAG = "LoginActivity";

private static final int REQUEST_SIGNUP = 0;

private String token_access = "";

@BindView(R.id.input_email) EditText _usernameText;

@BindView(R.id.input_password) EditText _passwordText;

@BindView(R.id.btn_login) Button _loginButton;

private AuthRepository authRepository;

private SqlOperations sqliteoperation;

public String id_user, full_name, email, address, phone, gender, birthdate, type;

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

ButterKnife.bind(this);

sqliteoperation = new SqlOperations(this);

sqliteoperation.open();

authRepository = new SQLiteAuthRepository(LoginActivity.this);

_usernameText = (EditText) findViewById(R.id.input_email);

_passwordText = (EditText) findViewById(R.id.input_password);

_loginButton = (Button) findViewById(R.id.btn_login);

_loginButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) { login();

} });

TextView link_signup = (TextView) findViewById(R.id.link_signup);

link_signup.setOnClickListener(new View.OnClickListener() {

B-2 @Override

public void onClick(View v) { signup();

} });

}

public void signup(){

Log.d(TAG, "Register");

Intent intent = new Intent(this, RegisterActivity.class);

intent.putExtra(MyUtilities.KEY_EXTRA_CONTACT_ID, 0);

intent.putExtra("username", "");

intent.putExtra("password", "");

intent.putExtra("fullname", "");

intent.putExtra("address", "");

intent.putExtra("phone", "");

intent.putExtra("gender", "");

intent.putExtra("birthdate", "");

intent.putExtra("type", "");

startActivityForResult(intent, 8);

}

public void login() {

if (!validate()) { onLoginFailed();

return;

}

_loginButton.setEnabled(false);

final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this, R.style.AppTheme_Dark_Dialog);

progressDialog.setIndeterminate(true);

progressDialog.setMessage("Authenticating...");

progressDialog.show();

final String username = _usernameText.getText().toString();

final String password = _passwordText.getText().toString();

new android.os.Handler().postDelayed(

new Runnable() { public void run() {

AuthSnapshot snap = authRepository.getUser(username, password);

if(snap != null) {

B-3 id_user = ""+snap.getId();

full_name = snap.getFullname();

address = snap.getAddress();

phone = snap.getPhone();

gender = snap.getGender();

email = snap.getBirthdate();

type = snap.getType();

token_access = password;

onLoginSuccess();

progressDialog.dismiss();

} else{

onLoginFailed();

progressDialog.dismiss();

} } }, 3000);

}

public void gotoHome() {

insertIntoDB(1, _usernameText.getText().toString(), token_access);

Intent intent = new Intent(this, HomeActivity.class);

intent.putExtra("username", _usernameText.getText().toString());

intent.putExtra("id_user", id_user);

intent.putExtra("full_name", full_name);

intent.putExtra("address", address);

intent.putExtra("phone", phone);

intent.putExtra("gender", gender);

intent.putExtra("birthdate", birthdate);

intent.putExtra("token", token_access);

intent.putExtra("type", type);

intent.putExtra("email", email);

startActivity(intent);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SIGNUP) {

if (resultCode == RESULT_OK) {

this.finish();

} } }

@Override

public void onBackPressed() {

B-4 finish();

}

public void onLoginSuccess() { _loginButton.setEnabled(true);

gotoHome();

finish();

}

public void onLoginFailed() { _loginButton.setEnabled(true);

}

public void showMessage(String message) {

Toast.makeText(this, message, Toast.LENGTH_LONG).show();

}

public boolean validate() { boolean valid = true;

String email = _usernameText.getText().toString();

String password = _passwordText.getText().toString();

if (email.isEmpty()){// || !android.util.Patterns.EMAIL_ADDRESS.matcher(_email).matches()) { _usernameText.setError("enter a valid _email address");

valid = false;

} else {

_usernameText.setError(null);

}

if (password.isEmpty() || password.length() < 4) { _passwordText.setError("minimum 4 characters");

valid = false;

} else {

_passwordText.setError(null);

}

return valid;

}

private int insertIntoDB(int id, String name, String token) { AuthSnapshot snapshot = new AuthSnapshot();

snapshot.setId(id);

snapshot.setName(name);

snapshot.setFullname(full_name);

snapshot.setAddress(address);

B-5 snapshot.setPhone(phone);

snapshot.setGender(gender);

snapshot.setBirthdate(birthdate);

snapshot.setType(type);

snapshot.setToken(token);

snapshot.setIsLogin(1);

int update = authRepository.update(snapshot);

return update;

} }

2. Kode program halaman register

public class RegisterActivity extends Activity implements View.OnClickListener {

private SqlOperations dbHelper ; EditText idEditText;

EditText usernameEditText;

EditText fullnameEditText;

EditText addressEditText;

EditText phoneEditText;

EditText genderEditText;

EditText emailEditText;

EditText passwordEditText;

Button saveButton;

LinearLayout buttonLayout;

RelativeLayout row_id;

Button editButton, deleteButton;

int userID;

public ProgressDialog progressDialog;

public String selected_gender, current_password;

private AuthRepository authRepository;

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

authRepository = new SQLiteAuthRepository(RegisterActivity.this);

userID = getIntent().getIntExtra(MyUtilities.KEY_EXTRA_CONTACT_ID, 0);

setContentView(R.layout.activity_register);

row_id = (RelativeLayout) findViewById(R.id.row_id);

B-6 idEditText = (EditText) findViewById(R.id.editTextID);

usernameEditText = (EditText) findViewById(R.id.editTextUsername);

fullnameEditText = (EditText) findViewById(R.id.editTextFullame);

addressEditText = (EditText) findViewById(R.id.editTextAddress);

phoneEditText = (EditText) findViewById(R.id.editTextPhone);

genderEditText = (EditText) findViewById(R.id.editTextGender);

emailEditText = (EditText) findViewById(R.id.editTextEmail);

passwordEditText = (EditText) findViewById(R.id.editTextPassword);

saveButton = (Button) findViewById(R.id.saveButton);

saveButton.setOnClickListener(this);

buttonLayout = (LinearLayout) findViewById(R.id.buttonLayout);

editButton = (Button) findViewById(R.id.editButton);

editButton.setOnClickListener(this);

deleteButton = (Button) findViewById(R.id.deleteButton);

deleteButton.setOnClickListener(this);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_detail);

toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override

public void onClick(View v) { finish();

} });

progressDialog = new ProgressDialog(this, R.style.AppTheme_Dark_Dialog);

progressDialog.setIndeterminate(true);

dbHelper = new SqlOperations(this);

dbHelper.open();

Spinner po_number_Spinner = (Spinner) findViewById(R.id.spinner_gender);

try {

String[] items = new String[2];

items[0] = "Male";

items[1] = "Female";

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<>(this, R.layout.custom_textview_to_spinner, items);

spinnerArrayAdapter.setDropDownViewResource(R.layout.custom_textview_to_spinner);

po_number_Spinner.setAdapter(spinnerArrayAdapter);

po_number_Spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String name = (String) parent.getItemAtPosition(position);

B-7 selected_gender = name;

}

@Override

public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub

} });

}

catch (Exception e) { e.printStackTrace();

}

if(userID > 0) {

saveButton.setVisibility(View.GONE);

buttonLayout.setVisibility(View.VISIBLE);

String id = ""+ userID;

String username = getIntent().getStringExtra("username");

String password = getIntent().getStringExtra("password");

String fullname = getIntent().getStringExtra("fullname");

String address = getIntent().getStringExtra("address");

String phone = getIntent().getStringExtra("phone");

String gender = getIntent().getStringExtra("gender");

String email = getIntent().getStringExtra("email");

if(gender.equals("Pria")){

po_number_Spinner.setSelection(0);

}

else if(gender.equals("Wanita")){

po_number_Spinner.setSelection(1);

}

idEditText.setText(id);

idEditText.setFocusable(false);

idEditText.setClickable(false);

usernameEditText.setText(username);

usernameEditText.setFocusable(false);

usernameEditText.setClickable(false);

current_password = password;

passwordEditText.setText(password);

passwordEditText.setFocusable(false);

passwordEditText.setClickable(false);

fullnameEditText.setText(fullname);

B-8 fullnameEditText.setFocusable(false);

fullnameEditText.setClickable(false);

addressEditText.setText(address);

addressEditText.setFocusable(false);

addressEditText.setClickable(false);

phoneEditText.setText(phone);

phoneEditText.setFocusable(false);

phoneEditText.setClickable(false);

genderEditText.setText(gender);

genderEditText.setFocusable(false);

genderEditText.setClickable(false);

emailEditText.setText(email);

emailEditText.setFocusable(false);

emailEditText.setClickable(false);

passwordEditText.setText("");

passwordEditText.setFocusable(false);

passwordEditText.setClickable(false);

} else{

row_id.setVisibility(View.GONE);

} }

@Override

public void onClick(View view) { switch (view.getId()) { case R.id.saveButton:

insertUser();

return;

case R.id.editButton:

saveButton.setVisibility(View.VISIBLE);

buttonLayout.setVisibility(View.GONE);

fullnameEditText.setEnabled(true);

fullnameEditText.setFocusableInTouchMode(true);

fullnameEditText.setClickable(true);

addressEditText.setEnabled(true);

addressEditText.setFocusableInTouchMode(true);

addressEditText.setClickable(true);

phoneEditText.setEnabled(true);

B-9 phoneEditText.setFocusableInTouchMode(true);

phoneEditText.setClickable(true);

genderEditText.setEnabled(true);

genderEditText.setFocusableInTouchMode(true);

genderEditText.setClickable(true);

emailEditText.setEnabled(true);

emailEditText.setFocusableInTouchMode(true);

emailEditText.setClickable(true);

passwordEditText.setEnabled(true);

passwordEditText.setFocusableInTouchMode(true);

passwordEditText.setClickable(true);

usernameEditText.setEnabled(true);

usernameEditText.setFocusableInTouchMode(true);

usernameEditText.setClickable(true);

return;

case R.id.deleteButton:

return;

} }

public void insertUser() {

AuthSnapshot snapshot = new AuthSnapshot();

current_password = passwordEditText.getText().toString();

snapshot.setId(1);

snapshot.setName(usernameEditText.getText().toString());

snapshot.setFullname(fullnameEditText.getText().toString());

snapshot.setAddress(addressEditText.getText().toString());

snapshot.setPhone(phoneEditText.getText().toString());

snapshot.setGender(selected_gender);

snapshot.setBirthdate(emailEditText.getText().toString());

snapshot.setType("user");

snapshot.setToken(current_password);

snapshot.setIsLogin(1);

int update = authRepository.update(snapshot);

Intent intent = new Intent(getApplicationContext(), MainActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

B-10 finish();

}

public void showMessage(String message) {

Toast.makeText(this, message, Toast.LENGTH_SHORT).show();

} }

3. Kode program halaman home

public class HomeActivity extends AppCompatActivity { final boolean DEBUG = false;

final String TAG = "Hello";

public static TextView mLogView;

private DrawerLayout mDrawerLayout;

private ListView mDrawerList;

private CharSequence mTitle;

public static Context mContext;

Handler mHandler = new Handler();

private AuthRepository authRepository;

public String active_page = "";

public String fragment_tag = "home";

FragmentManager fragmentManager;

private NavigationView navigationView;

private DrawerLayout drawerLayout;

private View navHeader;

private ImageView imgAvatar;

private TextView lblName;

private TextView lblProfile;

private Toolbar toolbar;

private String mode = "";

private String[] activityTitles;

private static int navItemIndex = 0, currentBillTable = 0;

private SqlOperations sqliteoperation;

private Handler handler = new Handler();

B-11 public String username, id_user, full_name, address, phone, gender, birthdate, type_access, email, latitude, longitude;

SensorManager sensorManager;

Sensor accelerometerSensor;

boolean accelerometerPresent;

private SparseIntArray mErrorString = new SparseIntArray();

private static final int REQUEST_PERMISSIONS = 20;

@Override

protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_home);

mTitle = getTitle();

mContext = this;

super.onCreate(savedInstanceState);

username = getIntent().getStringExtra("username");

id_user = getIntent().getStringExtra("id_user");

full_name = getIntent().getStringExtra("full_name");

address = getIntent().getStringExtra("address");

email = getIntent().getStringExtra("email");

phone = getIntent().getStringExtra("phone");

gender = getIntent().getStringExtra("gender");

birthdate = getIntent().getStringExtra("birthdate");

type_access = getIntent().getStringExtra("type");

toolbar = findViewById(R.id.toolbar);

mHandler = new Handler();

fragmentManager = getSupportFragmentManager();

navigationView = findViewById(R.id.nav_view);

initMenuDrawer(navigationView);

drawerLayout = findViewById(R.id.drawer_layout);

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);

drawerLayout.addDrawerListener(toggle);

toggle.syncState();

navHeader = navigationView.getHeaderView(0);

lblName = (TextView) navHeader.findViewById(R.id.navName);

lblProfile = (TextView) navHeader.findViewById(R.id.navProfile);

B-12 setupNavigationView();

lblProfile.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {

} });

if (savedInstanceState == null) { active_page = "home";

navItemIndex = 0;

loadActiveFragment();

}

sqliteoperation = new SqlOperations(this);

sqliteoperation.open();

authRepository = new SQLiteAuthRepository(this);

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);

if (sensorList.size() > 0) { accelerometerPresent = true;

accelerometerSensor = sensorList.get(0);

} else {

accelerometerPresent = false;

showMessage("No accelerometer present!");

}

requestAppPermissions(new String[]{

Manifest.permission.INTERNET,

Manifest.permission.ACCESS_COARSE_LOCATION }, R.string.runtime_permissions_txt

, REQUEST_PERMISSIONS);

// GET CURRENT LOCATION

FusedLocationProviderClient mFusedLocation = LocationServices.getFusedLocationProviderClient(this);

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=

PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,

Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling

// ActivityCompat#requestPermissions

// here to request the missing permissions, and then overriding

// public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults)

// to handle the case where the user grants the permission. See the documentation

B-13 // for ActivityCompat#requestPermissions for more details.

return;

}

mFusedLocation.getLastLocation().addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override

public void onSuccess(Location location) { if (location != null) {

// Do it all with location

double lat = location.getLatitude();

double lng = location.getLongitude();

latitude = ""+lat;

longitude = ""+lng;

Log.d("My Current location", "Lat : " + lat + " Long : " + lng);

//SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

SharedPreferences sharedPref = getSharedPreferences("data", MODE_PRIVATE);

SharedPreferences.Editor editor = sharedPref.edit();

editor.putString("send", "true");

editor.putString("latitude", latitude);

editor.putString("longitude", longitude);

editor.apply();

} } });

startService(new Intent(this, Guardian.class));

}

public void requestAppPermissions(final String[] requestedPermissions, final int stringId, final int requestCode) {

mErrorString.put(requestCode, stringId);

int permissionCheck = PackageManager.PERMISSION_GRANTED;

boolean shouldShowRequestPermissionRationale = false;

for (String permission : requestedPermissions) {

permissionCheck = permissionCheck + ContextCompat.checkSelfPermission(this, permission);

shouldShowRequestPermissionRationale = shouldShowRequestPermissionRationale ||

ActivityCompat.shouldShowRequestPermissionRationale(this, permission);

}

if (permissionCheck != PackageManager.PERMISSION_GRANTED) { if (shouldShowRequestPermissionRationale) {

Snackbar.make(findViewById(android.R.id.content), stringId, Snackbar.LENGTH_INDEFINITE).setAction("GRANT", new View.OnClickListener() {

@Override

public void onClick(View v) {

B-14 ActivityCompat.requestPermissions(HomeActivity.this, requestedPermissions,

requestCode);

} }).show();

} else {

ActivityCompat.requestPermissions(this, requestedPermissions, requestCode);

} } }

@Override

public void onResume() {

Log.i("Activity", "onResume()");

handler.postDelayed(runnable, 1000);

super.onResume();

if (accelerometerPresent) {

sensorManager.registerListener(accelerometerListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);

} }

private SensorEventListener accelerometerListener = new SensorEventListener() {

@Override

public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub

}

@Override

public void onSensorChanged(SensorEvent arg0) { // TODO Auto-generated method stub

float z_value = arg0.values[2];

if (z_value >= 0) {

showMessage("Face UP");

} else {

showMessage("Face DOWN");

} } };

public SqlOperations getDatabase(){

return this.sqliteoperation;

}

public void openManageContact(int id, String name, String npwp, String address, String phone, String email, String note1, String note2, String date, String total, String amount){

Intent intent = new Intent(this, ManageContactActivity.class);

B-15 intent.putExtra("KEY_EXTRA_CONTACT_ID", id);

intent.putExtra("name", name);

intent.putExtra("npwp", npwp);

intent.putExtra("address", address);

intent.putExtra("phone", phone);

intent.putExtra("email", email);

intent.putExtra("note1", note1);

intent.putExtra("note2", note2);

intent.putExtra("date ", date);

intent.putExtra("total", total);

intent.putExtra("amount", amount);

startActivityForResult(intent, 3);

}

@Override

public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent);

if(requestCode == 3){

Fragment fragment = fragmentManager.findFragmentByTag("contact");

if(fragment != null) {

MessageFragment page = (MessageFragment) fragment;

page.refresh_contact();

page.updateSummary();

} } }

public void updateSummary(String tag){

Fragment fragment_menu = fragmentManager.findFragmentByTag(tag);

if(tag.equals("contact")) { if (fragment_menu != null) {

MessageFragment item_page = (MessageFragment) fragment_menu;

item_page.updateSummary();

} } }

private Runnable runnable = new Runnable() { @Override

public void run() { try{

}catch(Exception e) {

Log.d("Exception", ""+e.toString());

}

B-16 handler.postDelayed(this, 10000);

} };

@Override

public void onPause() {

Log.i("Activity", "onPause()");

super.onPause();

}

@Override

public void onStop() {

handler.removeCallbacks(runnable);

Log.i("Activity", "onStop()");

super.onStop();

if(accelerometerPresent){

sensorManager.unregisterListener(accelerometerListener);

} }

public void viewBillFragment(String mode, String filter, String status){

}

@Override

protected void onDestroy() { Log.i("Activity", "onStop()");

handler.removeCallbacks(runnable);

if(sqliteoperation!=null) sqliteoperation.close();

super.onDestroy();

}

private void initMenuDrawer(NavigationView navigationView) { Menu menu = navigationView.getMenu();

MenuItem nav_home = menu.findItem(R.id.nav_home);

MenuItem nav_contact = menu.findItem(R.id.nav_contact);

MenuItem nav_about = menu.findItem(R.id.nav_about);

MenuItem nav_exit = menu.findItem(R.id.nav_exit);

MenuItem nav_logout = menu.findItem(R.id.nav_logout);

nav_home.setVisible(true);

nav_contact.setVisible(true);

nav_about.setVisible(true);

nav_exit.setVisible(true);

nav_logout.setVisible(true);

B-17 }

private void setupNavigationView() {

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override

public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { // Handle navigation view item clicks here.

switch (menuItem.getItemId()) { case R.id.nav_home :

navItemIndex = 0;

fragment_tag = "home";

break;

case R.id.nav_contact:

navItemIndex = 1;

fragment_tag = "contact";

break;

case R.id.nav_about:

navItemIndex = 2;

fragment_tag = "about";

break;

case R.id.nav_signal:

navItemIndex = 3;

fragment_tag = "signal";

break;

case R.id.nav_setting:

navItemIndex = 4;

fragment_tag = "setting";

break;

case R.id.nav_exit:

drawerLayout.closeDrawers();

exit();

break;

case R.id.nav_logout :

drawerLayout.closeDrawers();

logout();

break;

default:

navItemIndex = 0;

}

if (menuItem.isChecked()) { menuItem.setChecked(false);

} else {

menuItem.setChecked(true);

}

loadActiveFragment();

B-18 return true;

} });

ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {

@Override

public void onDrawerOpened(View drawerView) { selectNavMenu();

setToolbarTitle();

super.onDrawerOpened(drawerView);

}

@Override

public void onDrawerClosed(View drawerView) { selectNavMenu();

setToolbarTitle();

super.onDrawerClosed(drawerView);

} };

drawerLayout.addDrawerListener(actionBarDrawerToggle);

actionBarDrawerToggle.syncState();

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the food; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId();

if (id == R.id.action_settings) { return true;

}

return true;

}

private void loadActiveFragment() { selectNavMenu();

setToolbarTitle();

B-19 if (getSupportFragmentManager().findFragmentByTag("tes") != null) {

drawerLayout.closeDrawers();

}

Runnable mPendingRunnable = new Runnable() { @Override

public void run() {

Bundle bundle = new Bundle();

bundle.putString("mode", mode);

bundle.putString("is_filter", "false");

bundle.putString("status", "");

bundle.putString("username", username);

bundle.putString("id_user", id_user);

bundle.putString("full_name", full_name);

bundle.putString("address", address);

bundle.putString("phone", phone);

bundle.putString("gender", gender);

bundle.putString("birthdate", birthdate);

bundle.putString("type", type_access);

bundle.putString("image", "");

bundle.putString("email", email);

Fragment fragment = getActiveFragment();

if(fragment != null) {

fragment.setArguments(bundle);

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);

fragmentTransaction.replace(R.id.frame_layout, fragment, fragment_tag);

fragmentTransaction.commit();

} } };

// If mPendingRunnable is not null, then add to the message queue mHandler.post(mPendingRunnable);

// closing drawer on item click drawerLayout.closeDrawers();

// refresh toolbar food invalidateOptionsMenu();

}

private Fragment getActiveFragment() { switch (navItemIndex) {

B-20 case 0:

return new HomeFragment();

case 1:

fragment_tag = "contact";

return new MessageFragment();

case 2:

return new AboutFragment();

case 3:

return new SignalsFragment();

case 4:

return new Settings();

default:

}

return null;

}

private void setToolbarTitle() { try {

//noinspection ConstantConditions //getSupportActionBar().setTitle("");

} catch (Exception e) { e.printStackTrace();

Log.e(TAG, e.getMessage());

} }

private void selectNavMenu() {

navigationView.getMenu().getItem(navItemIndex).setChecked(true);

}

@Override

public void setTitle(CharSequence title) { mTitle = title;

}

@Override

public void onBackPressed() {

//mDrawerList.setItemChecked(0, true);

//moveTaskToBack(true);

if (drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawers();

return;

} finish();

//super.onBackPressed();

}

B-21 public void showMessage(String message) {

//Toast.makeText(this, message, Toast.LENGTH_SHORT).show();

}

private void exit(){

this.finish();

System.exit(0);

}

public void delete(String id_contact) { Log.d(TAG, "void delete "+id_contact);

View view = getLayoutInflater().inflate(R.layout.dialog_logout, null);

LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.main_layout_logout);

final Dialog dialog = new Dialog(this);

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

dialog.setContentView(linearLayout);

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

TextView txt_dialog_title = (TextView) dialog.findViewById(R.id.txt_dialog_title);

TextView txt_dialog_quest = (TextView) dialog.findViewById(R.id.txt_dialog_quest);

Button buttonYes = (Button) dialog.findViewById(R.id.button_yes_logout);

Button buttonNo = (Button) dialog.findViewById(R.id.button_no_logout);

txt_dialog_title.setText("DELETE CONTACT");

txt_dialog_quest.setText("Delete? This action can't be undone !!");

buttonYes.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {

showMessage("Success. Please refresh");

sqliteoperation.removeContact(id_contact);

dialog.dismiss();

} });

buttonNo.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) { dialog.dismiss();

} });

dialog.setCancelable(false);

dialog.show();

}

private void logout() {

B-22 Log.d(TAG, "void logout");

View view = getLayoutInflater().inflate(R.layout.dialog_logout, null);

LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.main_layout_logout);

final Dialog dialog = new Dialog(this);

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

dialog.setContentView(linearLayout);

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Button buttonYes = (Button) dialog.findViewById(R.id.button_yes_logout);

Button buttonNo = (Button) dialog.findViewById(R.id.button_no_logout);

buttonYes.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) { authRepository.logout();

startActivity(new Intent(HomeActivity.this, LoginActivity.class));

finishAffinity();

dialog.dismiss();

} });

buttonNo.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) { dialog.dismiss();

} });

dialog.setCancelable(false);

dialog.show();

} }

4. Kode program halaman manage contact

public class ManageContactActivity extends Activity implements View.OnClickListener { private SqlOperations dbHelper ;

EditText nameEditText;

EditText phoneEditText;

EditText emailEditText;

Button saveButton;

LinearLayout buttonLayout;

RelativeLayout row_id;

B-23 int storeID;

public ProgressDialog progressDialog;

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

storeID = getIntent().getIntExtra(MyUtilities.KEY_EXTRA_CONTACT_ID, 0);

setContentView(R.layout.activity_manage_contact);

row_id = (RelativeLayout) findViewById(R.id.row_id);

nameEditText = (EditText) findViewById(R.id.editTextName);

phoneEditText = (EditText) findViewById(R.id.editTextPhone);

emailEditText = (EditText) findViewById(R.id.editTextEmail);

saveButton = (Button) findViewById(R.id.saveButton);

saveButton.setOnClickListener(this);

buttonLayout = (LinearLayout) findViewById(R.id.buttonLayout);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_detail);

toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override

public void onClick(View v) { finish();

} });

progressDialog = new ProgressDialog(this, R.style.AppTheme_Dark_Dialog);

progressDialog.setIndeterminate(true);

dbHelper = new SqlOperations(this);

dbHelper.open();

if(storeID > 0) {

saveButton.setVisibility(View.VISIBLE);

String name = getIntent().getStringExtra("name");

String phone = getIntent().getStringExtra("phone");

String email = getIntent().getStringExtra("email");

nameEditText.setText(name);

nameEditText.setFocusable(true);

nameEditText.setClickable(true);

phoneEditText.setText(phone);

B-24 phoneEditText.setClickable(true);

emailEditText.setText(email);

emailEditText.setClickable(true);

} }

@Override

public void onClick(View view) { switch (view.getId()) { case R.id.saveButton:

manageContact();

return;

} }

public void manageContact() { if(storeID > 0) {

if(updateContact(nameEditText.getText().toString() , ""

, phoneEditText.getText().toString() , emailEditText.getText().toString() , ""

, "")) {

Toast.makeText(getApplicationContext(), "contact updated", Toast.LENGTH_SHORT).show();

finish();

} else {

Toast.makeText(getApplicationContext(), "contact Update Failed", Toast.LENGTH_SHORT).show();

} } else {

if(insertContact(nameEditText.getText().toString() , ""

, phoneEditText.getText().toString() , emailEditText.getText().toString() , ""

, "")) {

Toast.makeText(getApplicationContext(), "contect Inserted", Toast.LENGTH_SHORT).show();

} else{

Toast.makeText(getApplicationContext(), "Could not Insert Store", Toast.LENGTH_SHORT).show();

}

B-25 finish();

} }

public boolean insertContact(String name, String address, String phone, String email, String note1, String note2) {

dbHelper.insertContact(name, phone, email, 1);

return true;

}

public boolean updateContact(String name, String address, String phone, String email, String note1, String note2) {

dbHelper.updateContact(name, phone, email, 1);

return true;

}

public void showMessage(String message) {

Toast.makeText(this, message, Toast.LENGTH_SHORT).show();

} }

5. Kode program Konfirmasi Keadaan public void onClick(View v) {

finish();

} });

TextView txt_timer = findViewById(R.id.txt_timer);

Button btn_good = findViewById(R.id.btn_good);

btn_good.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) { block_timer();

Thread.interrupted();

showMessage("Pesan darurat telah dibatalkan.");

finish();

} });

Button btn_not_good = findViewById(R.id.btn_not_good);

btn_not_good.setOnClickListener(new View.OnClickListener() { @Override

public void onClick(View view) {

showMessage("Pesan darurat akan segera dikirim");

B-26 finish();

} });

reverseTimer(30, txt_timer);

dbHelper = new SqlOperations(this);

dbHelper.open();

Thread timer = new Thread() {

public void run() { try {

sleep(30000);// 4 second wait } catch (InterruptedException e) { Log.d("ERROR",e.toString());

Thread.currentThread().interrupt();

} finally {

} } };

timer.start();

}

public void block_timer(){

SharedPreferences preferences =

PreferenceManager.getDefaultSharedPreferences(ConfirmActivity.this);

SharedPreferences.Editor editor = preferences.edit();

editor.putString("send", "false");

editor.apply();

}

public void reverseTimer(int Seconds, final TextView tv) { new CountDownTimer(Seconds * 1000 + 1000, 1000) {

public void onTick(long millisUntilFinished) { int seconds = (int) (millisUntilFinished / 1000);

int hours = seconds / (60 * 60);

int tempMint = (seconds - (hours * 60 * 60));

int minutes = tempMint / 60;

seconds = tempMint - (minutes * 60);

tv.setText("" + String.format("%02d", seconds));

}

B-27 public void onFinish() {

tv.setText("--");

if(dbHelper != null){

ArrayList<contact> list_contact = new ArrayList<>();

list_contact = dbHelper.getContacts();

SharedPreferences sharedPref =

PreferenceManager.getDefaultSharedPreferences(ConfirmActivity.this);

String lat = sharedPref.getString("latitude", "0");

String lng = sharedPref.getString("longitude", "0");

showMessage("sending message to "+list_contact.size()+" person(s).\nPasien terdeteksi terjatuh menghadap "+ hadap+" pada lokasi ("+ lat+" , "+lng+")");

if(list_contact != null) {

for (int n = 0; n < list_contact.size(); n++) {

String contact_number = list_contact.get(n).getPhone();

Messenger.Companion.sms(ConfirmActivity.this, contact_number, "Pasien terdeteksi terjatuh menghadap "+ hadap+" pada lokasi (https://maps.google.com/?q="+lat+","+lng+"&z=15)");

} } else {

showMessage("ERROR: SMS Contacts NULL");

}

Thread timerx = new Thread() {

public void run() { try {

sleep(5000);// 4 second wait } catch (InterruptedException e) { Log.d("ERROR",e.toString());

Thread.currentThread().interrupt();

} finally {

runOnUiThread(new Runnable() { public void run() {

SharedPreferences preferences =

PreferenceManager.getDefaultSharedPreferences(ConfirmActivity.this);

String contact = preferences.getString("Contact", "");

showMessage("Calling "+contact);

Telephony.Companion.call$Ecare_debug(ConfirmActivity.this, contact);

} });

} } };

B-28 timerx.start();

} else {

showMessage("ERROR: dbHelper NULL");

} } }.start();

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);

if (resultCode == 10) {

} }

public void showMessage(String message) {

Toast.makeText(this, message, Toast.LENGTH_LONG).show();

} }

6. Kode program halaman splash

public class SplashActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_splash_screen);

Thread timer = new Thread() {

public void run() { try {

sleep(3000);

} catch (InterruptedException e) { Log.d("ERROR",e.toString());

Thread.currentThread().interrupt();

} finally {

Intent intent = new Intent(SplashActivity.this, MainActivity.class);

startActivity(intent);

finish();

} } };

timer.start();

} }

Dokumen terkait