• Tidak ada hasil yang ditemukan

Perancangan Aplikasi Sistem Absensi Smart SMA Negeri 4 Medan Berbasis Android

N/A
N/A
Protected

Academic year: 2017

Membagikan "Perancangan Aplikasi Sistem Absensi Smart SMA Negeri 4 Medan Berbasis Android"

Copied!
35
0
0

Teks penuh

(1)

LISTING PROGRAM

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

android:layout_height="match_parent"> <ImageView

android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:src="@drawable/ss2"

android:scaleType="fitXY"/> <ProgressBar

android:id="@+id/progressBar1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="58dp" /> </RelativeLayout>

MainActivity.java

package com.example.karinputriandili.absensi.activity;

import android.content.Intent; import android.os.Handler;

import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

import android.view.Window;

import android.view.WindowManager;

import com.example.karinputriandili.absensi.R;

public class MainActivity extends AppCompatActivity { private static int splashInterval = 2000;

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

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_main);

new Handler().postDelayed(new Runnable() { public void run() {

Intent i = new Intent(MainActivity.this,HomeActivity.class); startActivity(i);

(2)

}, splashInterval); };

}

activity_home.xml

<?xml version="1.0" encoding="utf-8"?> <ScrollView

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

android:layout_height="fill_parent" android:background="@drawable/b2"> <RelativeLayout

android:layout_width="match_parent" android:layout_height="wrap_content" > <TableRow

android:id="@+id/tableRow1"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/txtJudul" android:layout_marginTop="60dp" android:gravity="center" > <Button

android:id="@+id/btnabout" android:layout_width="150dp" android:layout_height="150dp" android:layout_marginRight="0dp" android:layout_marginLeft="10dp"

android:background="@drawable/info" /> <Button

android:id="@+id/btnlogin" android:layout_width="160dp" android:layout_height="160dp" android:layout_marginRight="10dp" android:background="@drawable/login8" android:layout_marginTop="5dp"/> </TableRow>

<TextView

android:id="@+id/txtJudul"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:background="#2eb1e1"

android:gravity="center"

android:text="ABSENSI SMAN 4 MEDAN" android:textColor="#fff"

android:textSize="13pt" /> <TableRow

android:id="@+id/tableRow2"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/tableRow1" android:layout_marginTop="20dp"

(3)

android:gravity="center" > <Button

android:id="@+id/btndaftar" android:layout_width="150dp" android:layout_height="150dp" android:layout_marginRight="0dp" android:layout_marginLeft="10dp"

android:background="@drawable/daftar4" /> <Button

android:id="@+id/btnhelp" android:layout_width="150dp" android:layout_height="150dp" android:layout_marginRight="10dp"

android:background="@drawable/help2" /> </TableRow>

</RelativeLayout> </ScrollView>

HomeActivity.java

package com.example.karinputriandili.absensi.activity;

import android.content.Intent; import android.os.Bundle;

import android.support.v7.app.AppCompatActivity; import android.view.View;

import android.widget.Button;

import com.example.karinputriandili.absensi.R;

public class HomeActivity extends AppCompatActivity {

Button btnabout, btnlogin, btndaftar, btnhelp;

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

setContentView(R.layout.activity_home);

btnabout = (Button) findViewById(R.id.btnabout); btnlogin = (Button) findViewById(R.id.btnlogin); btndaftar = (Button) findViewById(R.id.btndaftar); btnhelp = (Button) findViewById(R.id.btnhelp);

btnabout.setOnClickListener(new View.OnClickListener() { public void onClick(View v){

Intent i = new Intent(HomeActivity.this, AboutActivity.class);

startActivity(i); }

});

btnlogin.setOnClickListener(new View.OnClickListener() { public void onClick(View v){

Intent i = new Intent(HomeActivity.this, LoginActivity.class);

startActivity(i); }

(4)

btndaftar.setOnClickListener(new View.OnClickListener() { public void onClick(View v){

Intent i = new Intent(HomeActivity.this, DaftarActivity.class);

startActivity(i); }

});

btnhelp.setOnClickListener(new View.OnClickListener() { public void onClick(View v){

Intent i = new Intent(HomeActivity.this, HelpActivity.class);

startActivity(i); }

}); }

}

activity_about.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:orientation="vertical"

android:background="?android:attr/detailsElementBackground"> <android.support.design.widget.AppBarLayout

android:id="@+id/main_appbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="0dp">

<android.support.v7.widget.Toolbar android:id="@+id/tool_bar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"

app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysC ollapsed"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

</android.support.design.widget.AppBarLayout> <ScrollView

android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout

android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"

(5)

<TextView

android:id="@+id/txtAbout"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=""

android:textSize="9pt" android:gravity="center"

android:layout_marginTop="20dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:paddingTop="10dp"/>

<TextView

android:id="@+id/txtAbout2"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="9pt" android:gravity="center"/> <TextView

android:id="@+id/txtAbout3"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="9pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout4"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="9pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout5"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="9pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout6"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="9pt"

android:layout_marginBottom="30dp" android:gravity="center"

(6)

</LinearLayout> </ScrollView>

</LinearLayout>

AboutActivity.java

package com.example.karinputriandili.absensi.activity;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

import android.support.v7.widget.Toolbar; import android.view.MenuItem;

import android.view.View;

import android.widget.TextView;

import com.example.karinputriandili.absensi.R;

public class AboutActivity extends AppCompatActivity { protected Toolbar toolbar;

TextView judul, about, about2, about3, about4, about5, about6,back, menu;

String a1, a2, a3, a4, a5, a6;

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

setContentView(R.layout.activity_about);

toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setFitsSystemWindows(true);

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

judul = (TextView) findViewById(R.id.txtJudul); about = (TextView) findViewById(R.id.txtAbout); about2 = (TextView) findViewById(R.id.txtAbout2); about3 = (TextView) findViewById(R.id.txtAbout3); about4 = (TextView) findViewById(R.id.txtAbout4); about5 = (TextView) findViewById(R.id.txtAbout5); about6 = (TextView) findViewById(R.id.txtAbout6);

a1 = "SMAN 4 MEDAN" +

" \n \nBertempat di Jalan Gelas No.12 Medan "; a2 = "Phone: (061) 4158244";

a3 = "Sekolah ini didirikan pada tanggal 10 September 1961";

a4 = "Kepala Sekolah saat ini adalah Bapak Drs.Ramli"; a5 = "Termasuk SMA populer di Kota Medan";

a6 = "Email : smanegeri4medan@yahoo.com";

about.setText(String.valueOf(a1)); about2.setText(String.valueOf(a2)); about3.setText(String.valueOf(a3)); about4.setText(String.valueOf(a4)); about5.setText(String.valueOf(a5)); about6.setText(String.valueOf(a6)); }

(7)

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

switch (id) {

case android.R.id.home: onBackPressed(); return true; default:

return super.onOptionsItemSelected(item);} } }

activity_login.xml

<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

android:layout_height="wrap_content"

xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical">

<ImageView

android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/b2"

android:scaleType="fitXY"/> <LinearLayout

android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">

<android.support.design.widget.AppBarLayout android:id="@+id/main_appbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="0dp">

<android.support.v7.widget.Toolbar android:id="@+id/tool_bar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"

app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysCollaps ed"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> </android.support.design.widget.AppBarLayout> <ScrollView

android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout

android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView

android:layout_width="wrap_content" android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceLarge" android:text="Input Your NIS"

android:textSize="20dp"

(8)

android:id="@+id/textView" android:layout_gravity="center" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <LinearLayout

android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"

android:layout_gravity="center" android:paddingLeft="16dp" android:paddingRight="16dp">

<EditText

android:layout_width="match_parent" android:layout_height="25pt"

android:id="@+id/editTextUsername" android:background="#e6ffffff"

android:nestedScrollingEnabled="false" android:autoText="false"

android:hint="Username" android:paddingLeft="10dp"

android:layout_below="@+id/scrollView3" android:layout_centerHorizontal="true" android:layout_marginTop="66dp" /> <EditText

android:layout_width="match_parent" android:layout_height="25pt"

android:id="@+id/editTextPassword" android:background="#e6ffffff" android:paddingLeft="10dp"

android:nestedScrollingEnabled="false" android:autoText="false"

android:inputType="textPassword" android:ems="10"

android:hint="Password"

android:layout_marginTop="10dp"/> <LinearLayout

android:layout_width="match_parent" android:layout_height="fill_parent" android:background="#3adeba"

android:orientation="horizontal" android:layout_marginTop="20dp" android:layout_marginLeft="60dp" android:layout_marginRight="60dp" android:layout_marginBottom="220dp" android:padding="9dp">

<TextView

android:id="@+id/txtBack"

android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"

android:layout_gravity="center_horizontal" android:text="@string/back"

(9)

<TextView

android:id="@+id/login"

android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"

android:text="@string/login" android:gravity="center" android:textSize="10pt" android:onClick="login" android:textColor="#fff" /> </LinearLayout>

</LinearLayout> </LinearLayout>

</ScrollView> </LinearLayout> </RelativeLayout>

LoginActivity.java

package com.example.karinputriandili.absensi.activity;

import android.content.Intent; import android.os.Bundle;

import android.support.v7.widget.Toolbar; import android.view.View;

import android.widget.Toast;

import android.app.ProgressDialog;

import android.support.v7.app.ActionBarActivity; import android.widget.EditText;

import com.example.karinputriandili.absensi.R;

import com.example.karinputriandili.absensi.api.ApiClient; import

com.example.karinputriandili.absensi.api.model.LoginResponse; import java.util.HashMap;

import java.util.Map; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response;

public class LoginActivity extends ActionBarActivity { protected Toolbar toolbar;

private EditText editTextUsername; private EditText editTextPassword;

public static final String USER_NAME = "USERNAME"; String username;

String password;

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

setContentView(R.layout.activity_login);

toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setFitsSystemWindows(true);

setSupportActionBar(toolbar);

(10)

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

public void back (View view){

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

public void login (View view){

username = editTextUsername.getText().toString(); password = editTextPassword.getText().toString(); login(username, password);

}

private void login(final String username, String password) {

Map<String, String> data = new HashMap<String, String>(); data.put("username", username);

data.put("password", password)

final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this);

progressDialog.setMessage("Loading ..."); progressDialog.setCancelable(false); progressDialog.show();

ApiClient.getInstance(this).getApi().login(data).enqueue(new Callback<LoginResponse>() {

public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {

if (response.isSuccessful()){ if (response.body().status){ Intent intent = new

Intent(LoginActivity.this, PilihanActivity.class); intent.putExtra("user", response.body().data);

finish();

startActivity(intent); }else{

Toast.makeText(LoginActivity.this, response.body().message, Toast.LENGTH_SHORT).show();

} }else{

Toast.makeText(LoginActivity.this, "Error connecting to server", Toast.LENGTH_SHORT).show();

}

progressDialog.dismiss(); }

public void onFailure(Call<LoginResponse> call, Throwable t) {

Toast.makeText(LoginActivity.this, "Error connecting to server", Toast.LENGTH_SHORT).show();

progressDialog.dismiss();} });

} }

activity_daftar.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

(11)

android:layout_width="fill_parent" android:layout_height="wrap_content"

xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical">

<android.support.design.widget.AppBarLayout android:id="@+id/main_appbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="0dp">

<android.support.v7.widget.Toolbar android:id="@+id/tool_bar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"

app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysCollaps ed"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> </android.support.design.widget.AppBarLayout>

<android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardElevation="2dp">

<LinearLayout

android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp"

android:orientation="vertical"> <LinearLayout

android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal">

<com.jaredrummler.materialspinner.MaterialSpinner android:id="@+id/spinnerkelas"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"/>

<Button

android:id="@+id/btn.ok"

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK"

android:background="@color/colorPrimary" android:textColor="@color/cardview_light_background"/> </LinearLayout>

<View

android:layout_width="match_parent" android:layout_height="1dp"

android:background="@color/textDevider"/> <LinearLayout

android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <FrameLayout

android:id="@+id/date.from"

(12)

android:layout_height="wrap_content" android:layout_weight="1" android:paddingTop="8dp" android:paddingBottom="8dp" android:paddingRight="8dp"

android:orientation="horizontal"> <TextView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="From : "/>

<TextView

android:id="@+id/txt.date.from" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="45dp" android:background="#fff"

android:text="1 Juni 2017" android:textSize="14sp"/> <ImageView

android:layout_width="wrap_content" android:layout_height="wrap_content"

android:src="@drawable/ic_date_range_blue_24dp" android:layout_gravity="center_vertical|right"/>

</FrameLayout> <FrameLayout

android:id="@+id/date.to"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"

android:paddingTop="8dp" android:paddingBottom="8dp" android:paddingRight="8dp"

android:orientation="horizontal"> <TextView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="To :"/>

<TextView

android:id="@+id/txt.date.to"

android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#fff"

android:layout_gravity="center_vertical" android:layout_marginLeft="45dp" android:text="1 Juni 2017"

android:textSize="14sp"/> <ImageView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_date_range_blue_24dp" android:layout_gravity="center_vertical|right"/> </FrameLayout>

(13)

</android.support.v7.widget.CardView> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" app:cardElevation="2dp">

<HorizontalScrollView

android:layout_width="wrap_content" android:layout_height="wrap_content"> <de.codecrafters.tableview.TableView xmlns:table="http://schemas.android.com/apk/res-auto" android:id="@+id/tableView"

android:layout_width="match_parent" android:layout_height="match_parent" table:tableView_columnCount="5"/> </HorizontalScrollView>

</android.support.v7.widget.CardView> </LinearLayout>

DaftarActivity.java

package com.example.karinputriandili.absensi.activity;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream;

import java.io.InputStreamReader; import java.text.DateFormat;

import java.text.SimpleDateFormat; import java.util.ArrayList;

import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map;

import android.app.ProgressDialog; import android.os.Bundle;

import android.os.StrictMode;

import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;

import android.util.Log; import android.view.MenuItem; import android.view.View;

import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button;

import android.widget.FrameLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Spinner;

import android.widget.TextView; import android.widget.Toast;

import com.example.karinputriandili.absensi.Helper; import com.example.karinputriandili.absensi.JSONParser; import com.example.karinputriandili.absensi.R;

import com.example.karinputriandili.absensi.api.ApiClient;

(14)

import

com.example.karinputriandili.absensi.api.model.AbsentResponse; import

com.example.karinputriandili.absensi.api.model.RoomResponse;

import com.example.karinputriandili.absensi.ui.DatePickerFragment; import com.google.android.gms.appindexing.AppIndex;

import com.google.android.gms.common.api.GoogleApiClient; import com.google.gson.JsonObject;

import com.jaredrummler.materialspinner.MaterialSpinner; import de.codecrafters.tableview.TableView;

import de.codecrafters.tableview.model.TableColumnDpWidthModel; import de.codecrafters.tableview.toolkit.SimpleTableDataAdapter; import de.codecrafters.tableview.toolkit.SimpleTableHeaderAdapter; import retrofit2.Call;

import retrofit2.Callback; import retrofit2.Response;

public class DaftarActivity extends AppCompatActivity implements DatePickerFragment.OnCompleteListener {

protected Toolbar toolbar;

private TableView<String[]> tableView;

private FrameLayout date_from, date_to; private TextView txt_date_from, txt_date_to; private Calendar dateFrom, dateTo;

private Button btnOk;

private MaterialSpinner spinnerkelas; private List<RoomEntity> listRoom;

private static final String[][] DATA_TO_SHOW = {{"This", "is", "a", "test"},

{"and", "a", "second", "test"}};

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

setContentView(R.layout.activity_daftar);

toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setFitsSystemWindows(true);

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

spinnerkelas = (MaterialSpinner) findViewById(R.id.spinnerkelas);

initView(); setEvent(); getRooms();

tableView = (TableView<String[]>) findViewById(R.id.tableView);

TableColumnDpWidthModel columnModel = new TableColumnDpWidthModel(this, 9, 100);

columnModel.setColumnWidth(0, 200); tableView.setColumnModel(columnModel); }

private void initView() {

(15)

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

Calendar c = Calendar.getInstance();

DateFormat df = new SimpleDateFormat("dd MMM yyyy"); dateFrom = c;

txt_date_from.setText(df.format(c.getTime())); dateTo = c;

txt_date_to.setText(df.format(c.getTime()));

btnOk = (Button) findViewById(R.id.btn_ok); }

private void setEvent() {

date_from.setOnClickListener(new View.OnClickListener() public void onClick(View view) {

showDatePicker(R.id.date_from); }

});

date_to.setOnClickListener(new View.OnClickListener() { public void onClick(View view) {

showDatePicker(R.id.date_to); }

});

btnOk.setOnClickListener(new View.OnClickListener() { public void onClick(View view) {

if (spinnerkelas.getSelectedIndex() > -1) { Map<String, String> data = new HashMap<>(); data.put("room_id",

Integer.toString(listRoom.get(spinnerkelas.getSelectedIndex()).id) );

data.put("date_from", Helper.getDate(dateFrom)); data.put("date_to", Helper.getDate(dateTo)); final ProgressDialog progressDialog = new ProgressDialog(DaftarActivity.this);

progressDialog.setMessage("Loading ..."); progressDialog.setCancelable(false); progressDialog.show();

ApiClient.getInstance(DaftarActivity.this).getApi().getAbsent(data ).enqueue(new Callback<AbsentResponse>() {

public void

onResponse(Call<AbsentResponse> call, Response<AbsentResponse> response) {

JsonObject().get(response.body().toString()).getAsJsonObject(); if (response.isSuccessful()) { if (response.body().status) { if(response.body().data.length > 0){

int column = response.body().data[0].length; int row = response.body().data.length;

tableView.setColumnCount(column);

String[][] dataTable = new String[row][column]; String[] header = new String[column];

header[0] = "Nama";

Calendar c = (Calendar) dateFrom.clone(); for (int i = 1; i < column - 1; i++){

header[i] = c.get(Calendar.DATE) + "/" + (c.get(Calendar.MONTH) + 1);

(16)

c.add(Calendar.DATE, 1); }

header[column - 1 ] = "Jumlah"; for (int i = 0; i < row; i++){

for (int j = 0; j < column; j++){

dataTable[i][j] = response.body().data[i][j]; }

} tableView.setDataAdapter(new

SimpleTableDataAdapter(DaftarActivity.this, dataTable)); tableView.setHeaderAdapter(new

SimpleTableHeaderAdapter(DaftarActivity.this, header));} } else {

Toast.makeText(DaftarActivity.this, response.body().message, Toast.LENGTH_SHORT).show();}

} else {

Toast.makeText(DaftarActivity.this, "Error connecting to server", Toast.LENGTH_SHORT).show();

}

progressDialog.dismiss();}

public void onFailure(Call<AbsentResponse> call, Throwable t) {

Toast.makeText(DaftarActivity.this, "Error connecting to server", Toast.LENGTH_SHORT).show();

progressDialog.dismiss(); }

}); }

} }); }

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

switch (id) {

case android.R.id.home: onBackPressed(); return true; default:

return super.onOptionsItemSelected(item); }

}

public void getRooms() {

final ProgressDialog progressDialog = new ProgressDialog(this);

progressDialog.setMessage("Loading ..."); progressDialog.setCancelable(false); progressDialog.show();

ApiClient.getInstance(this).getApi().getAllRoom().enqueue(new Callback<RoomResponse>() {

public void onResponse(Call<RoomResponse> call, Response<RoomResponse> response) {

if (response.isSuccessful()) { if (response.body().status) { String[] kelas = new String[response.body().data.size()];

(17)

for (int i = 0; i < kelas.length; i++) {

kelas[i] = response.body().data.get(i).name; }

spinnerkelas.setItems(kelas); listRoom = response.body().data; } else {

Toast.makeText(getApplicationContext(), response.body().message, Toast.LENGTH_SHORT).show();

} } else {

Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show();

}

progressDialog.dismiss();}

public void onFailure(Call<RoomResponse> call, Throwable t) {

Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show();

progressDialog.dismiss(); }

}); }

public void onBackPressed() { finish();

}

public void showDatePicker(int target) {

DatePickerFragment datepicker = new DatePickerFragment(); datepicker.setTarget(this, target);

if (target == R.id.date_from) { if (dateFrom != null) { datepicker.setDate(this,

dateFrom.get(Calendar.YEAR), dateFrom.get(Calendar.MONTH), dateFrom.get(Calendar.DATE));

}

} else if (target == R.id.date_to) { if (dateTo != null) {

datepicker.setDate(this,

dateTo.get(Calendar.YEAR), dateTo.get(Calendar.MONTH), dateTo.get(Calendar.DATE));

} else {

final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR);

int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); datepicker.setDate(this, year, month, day); }

if (dateFrom != null) {

datepicker.setMin(dateFrom.getTimeInMillis()); }

}

datepicker.show(getSupportFragmentManager(), "datePicker");}

public void onComplete(Calendar time, int target) { DateFormat df = new SimpleDateFormat("dd MMM yyyy"); if (target == R.id.date_from) {

dateFrom = time;

(18)

else if (target == R.id.date_to) { dateTo = time;

txt_date_to.setText(df.format(time.getTime())); }

} }

activity_help.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent"

android:layout_height="wrap_content" android:orientation="vertical"

app:layout_collapseParallaxMultiplier="1.0"

android:background="?android:attr/detailsElementBackground" android:backgroundTintMode="src_over">

<android.support.design.widget.AppBarLayout android:id="@+id/main_appbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="0dp">

<android.support.v7.widget.Toolbar android:id="@+id/tool_bar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"

app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysCollaps ed"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> </android.support.design.widget.AppBarLayout>

<ScrollView

android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout

android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView

android:id="@+id/txtAbout"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=""

android:textSize="8pt" android:gravity="center"

android:layout_marginTop="29.5dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:paddingTop="10dp"/>

<TextView

android:id="@+id/txtAbout2"

(19)

android:layout_marginRight="10dp" android:text=""

android:textSize="8pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout3"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="8pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout4"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="8pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout5"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="8pt" android:gravity="center" /> <TextView

android:id="@+id/txtAbout6"

android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:text=""

android:textSize="8pt"

android:layout_marginBottom="18dp" android:gravity="center" />

</LinearLayout> </ScrollView>

</LinearLayout>

HelpActivity.java

package com.example.karinputriandili.absensi.activity;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

import android.support.v7.widget.Toolbar; import android.view.MenuItem;

import android.view.View;

import android.widget.TextView;

(20)

public class HelpActivity extends AppCompatActivity { protected Toolbar toolbar;

TextView judul, about, about2, about3, about4, about5, about6; String a1, a2, a3, a4, a5, a6;

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

setContentView(R.layout.activity_help);

toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setFitsSystemWindows(true);

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

judul = (TextView) findViewById(R.id.txtJudul); about = (TextView) findViewById(R.id.txtAbout); about2 = (TextView) findViewById(R.id.txtAbout2); about3 = (TextView) findViewById(R.id.txtAbout3); about4 = (TextView) findViewById(R.id.txtAbout4); about5 = (TextView) findViewById(R.id.txtAbout5); about6 = (TextView) findViewById(R.id.txtAbout6);

a1 = "Cara penggunaan aplikasi ini sangat mudah. "; a2 = "Masukan Nomor Induk Siswa (NIS) jika siswa ingin mengisi kehadirannya.";

a3 = "Jika siswa yang mengisi absen berada dalam jangkauan lingkungan sekolah.";

a4 = "Maka otomatis akan terdaftar kehadiran siswa tersebut";

a5 = "Sebaliknya, maka sistem absensi ini akan error."; a6 = "Kemudian para guru bisa melihat siswa-siswa yang hadir hari tersebut.";

about.setText(String.valueOf(a1)); about2.setText(String.valueOf(a2)); about3.setText(String.valueOf(a3)); about4.setText(String.valueOf(a4)); about5.setText(String.valueOf(a5)); about6.setText(String.valueOf(a6)); }

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

switch (id) {

case android.R.id.home: onBackPressed(); return true; default:

return super.onOptionsItemSelected(item); }

} }

activity_pilihan.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout

(21)

xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent"

android:layout_height="wrap_content"

xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"

android:id="@+id/btnSave">

<android.support.design.widget.AppBarLayout android:id="@+id/main_appbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:elevation="0dp">

<android.support.v7.widget.Toolbar android:id="@+id/tool_bar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary"

app:layout_scrollFlags="scroll|snap|enterAlways|enterAlwaysCollaps ed"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> </android.support.design.widget.AppBarLayout>

<ScrollView

android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout

android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <fragment

android:id="@+id/map_view"

android:layout_width="match_parent" android:layout_height="200dp"

class="com.google.android.gms.maps.SupportMapFragment" app:liteMode="false"

app:mapType="normal" />

<android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp"

android:layout_marginLeft="2dp" android:layout_marginRight="2dp" app:cardElevation="2dp">

<LinearLayout

android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp"

android:orientation="vertical"> <TextView

android:id="@+id/txt.welcome"

android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Welcome, Karin"

android:textSize="16sp" android:textStyle="bold"/> <TextView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kelas"/>

(22)

<com.jaredrummler.materialspinner.MaterialSpinner android:id="@+id/spinner_room" android:layout_marginTop="5dp" android:layout_width="match_parent" android:layout_height="wrap_content"/> <View

android:layout_width="match_parent" android:layout_height="1dp"

android:background="#dbdbdb"/> <FrameLayout

android:id="@+id/frm.date"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1"

android:paddingTop="8dp" android:paddingBottom="8dp" android:paddingRight="8dp"

android:orientation="horizontal"> <TextView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="Tanggal : "/>

<TextView

android:id="@+id/txt.date"

android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="60dp"

android:background="#fff" android:text="1 Juni 2017" android:textSize="14sp"/> <ImageView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_date_range_blue_24dp" android:layout_gravity="center_vertical|right"/> </FrameLayout>

<View

android:layout_width="match_parent" android:layout_height="1dp"

android:background="#dbdbdb"/> <TextView

android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Status"/>

<com.jaredrummler.materialspinner.MaterialSpinner android:id="@+id/spinner_status"

android:layout_marginTop="5dp" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button

android:id="@+id/btn.simpan"

(23)

android:text="Simpan"/> </LinearLayout>

</android.support.v7.widget.CardView> </LinearLayout>

</ScrollView> </LinearLayout>

PilihanActivity.java

package com.example.karinputriandili.absensi.activity;

import android.location.Criteria; import android.location.Location;

import android.location.LocationListener; import android.location.LocationManager; import android.support.v7.widget.Toolbar;

import com.example.karinputriandili.absensi.Helper; import com.example.karinputriandili.absensi.R;

import com.example.karinputriandili.absensi.api.ApiClient;

import com.example.karinputriandili.absensi.api.entity.RoomEntity; import

com.example.karinputriandili.absensi.api.entity.SchoolEntity; import

com.example.karinputriandili.absensi.api.entity.StudentEntity; import com.example.karinputriandili.absensi.api.model.ApiResponse; import

com.example.karinputriandili.absensi.api.model.RoomResponse; import

com.example.karinputriandili.absensi.api.model.SchoolsResponse; import com.example.karinputriandili.absensi.ui.DatePickerFragment; import com.google.android.gms.maps.CameraUpdateFactory;

import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment;

import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.Circle;

import com.google.android.gms.maps.model.CircleOptions; import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions; import com.jaredrummler.materialspinner.MaterialSpinner;

public class PilihanActivity extends AppCompatActivity {

protected Toolbar toolbar; private GoogleMap Gmap;

private LocationManager locationManager; private Location location;

Circle circle;

private TextView txt_welcome, txt_date;

private MaterialSpinner spinnerRoom, spinnerStatus; private Calendar selectedDate;

private FrameLayout frm_date; private Button btn_simpan; private StudentEntity student; private SchoolEntity school;

(24)

String[] daftarStatus = {

"Hadir","Sakit","Izin","Absen" };

private OnMapReadyCallback mapListener = new OnMapReadyCallback() {

@Override

public void onMapReady(GoogleMap map) { Gmap = map;

setSchoolLocation();

Criteria criteria = new Criteria(); String bestProvider =

locationManager.getBestProvider(criteria, true); if

(ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) !=

PackageManager.PERMISSION_GRANTED &&

ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) !=

PackageManager.PERMISSION_GRANTED) {return;}

locationManager.requestLocationUpdates(bestProvider, 1000, 20, locationListener);

location = locationManager.getLastKnownLocation(bestProvider); addLocationMarker(location);}};

private LocationListener locationListener = new LocationListener() {

public void onLocationChanged(Location _location) { location = _location;

addLocationMarker(location);

if (Build.VERSION.SDK_INT >= 23 &&

ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) !=

PackageManager.PERMISSION_GRANTED &&

ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {return;}

locationManager.removeUpdates(this);

Log.d("debugku", location.getLatitude() + "-" + location.getLongitude());}

public void onProviderDisabled(String provider) { }

public void onProviderEnabled(String provider) { }

public void onStatusChanged(String provider, int status, Bundle extras) {

} };

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

setContentView(R.layout.activity_pilihan);

Intent intent = getIntent(); student = (StudentEntity) intent.getSerializableExtra("user");

toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setFitsSystemWindows(true);

(25)

initView(); setEvent();

SupportMapFragment map = (SupportMapFragment) getSupportFragmentManager()

.findFragmentById(R.id.map_view); map.getMapAsync(mapListener);

map.getView().setClickable(false); if(Build.VERSION.SDK_INT>=23){

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

PackageManager.PERMISSION_GRANTED)) {

ActivityCompat.requestPermissions(this, new

String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);}} locationManager = (LocationManager)

this.getSystemService(Context.LOCATION_SERVICE); getRooms();}

protected void onStart() { super.onStart();

boolean gps_enabled = false; boolean network_enabled = false;

try { gps_enabled =

locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); } catch(Exception ex) {}

try { network_enabled =

locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER );} catch(Exception ex) {}

if(!gps_enabled && !network_enabled) { AlertDialog.Builder dialog = new AlertDialog.Builder(this);

dialog.setMessage(this.getResources().getString(R.string.gps_netwo rk_not_enabled));

dialog.setPositiveButton(this.getResources().getString(R.string.op en_location_settings), new DialogInterface.OnClickListener() { public void onClick(DialogInterface

paramDialogInterface, int paramInt) {

Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(myIntent); } });

dialog.setNegativeButton(getApplicationContext().getString(R.strin g.cancel), new DialogInterface.OnClickListener() {

public void onClick(DialogInterface paramDialogInterface, int paramInt) {

} });

dialog.show(); }} private void initView(){ spinnerRoom =

(MaterialSpinner)findViewById(R.id.spinner_room); spinnerStatus =

(MaterialSpinner)findViewById(R.id.spinner_status);

txt_welcome = (TextView)findViewById(R.id.txt_welcome); txt_date = (TextView)findViewById(R.id.txt_date);

(26)

spinnerStatus.setItems(daftarStatus);

txt_welcome.setText("Welcom, " + student.name); selectedDate = Calendar.getInstance();

DateFormat df = new SimpleDateFormat("dd MMM yyyy"); txt_date.setText(df.format(selectedDate.getTime())) ; }

private void setEvent(){

frm_date.setOnClickListener(new View.OnClickListener() { public void onClick(View view) {

DatePickerFragment datepicker = new DatePickerFragment();

datepicker.setTarget(new

DatePickerFragment.OnCompleteListener() {public void

onComplete(Calendar calender, int target) {DateFormat df = new SimpleDateFormat("dd MMM yyyy");

selectedDate = calender; txt_date.setText(df.format(calender.getTime())) ;} }, R.id.txt_date);

int year = selectedDate.get(Calendar.YEAR); int month = selectedDate.get(Calendar.MONTH); int day = selectedDate.get(Calendar.DAY_OF_MONTH);

datepicker.setDate(PilihanActivity.this, year, month, day); datepicker.show(getSupportFragmentManager(),

"datePicker");}});

btn_simpan.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) { String status =

daftarStatus[spinnerStatus.getSelectedIndex()];

if(checkRadius || !status.toLowerCase().equals("hadir")){ Map<String, String> data = new HashMap<String, String>();

data.put("student_id", Integer.toString(student.id)); data.put("room_id",Integer.toString(listRoom.get(spinnerRoom

.getSelectedIndex()).id));

data.put("date", Helper.getDate(selectedDate)); data.put("status",

daftarStatus[spinnerStatus.getSelectedIndex()]); final ProgressDialog progressDialog = new

ProgressDialog(PilihanActivity.this); progressDialog.setMessage("Loading ...");

progressDialog.setCancelable(false); progressDialog.show();

ApiClient.getInstance(getBaseContext()).getApi().absent(data ).enqueue(new Callback<ApiResponse>() {

public void

onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {

if (response.isSuccessful()){

if (response.body().status){ Toast.makeText(getApplicationContext(), "Data berhasil di simpan", Toast.LENGTH_SHORT).show();}else {

Toast.makeText(getApplicationContext(),

response.body().message, Toast.LENGTH_SHORT).show();}}else { Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show();}

progressDialog.dismiss();

}

(27)

public void onFailure(Call<ApiResponse> call, Throwable t) { progressDialog.dismiss();

Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show();}});

}else{

Toast.makeText(getBaseContext(), "Anda tidak berada pada lokasi sekolah" , Toast.LENGTH_SHORT).show();

} } }); }

public void getRooms() {

final ProgressDialog progressDialog = new ProgressDialog(this);

progressDialog.setMessage("Loading ..."); progressDialog.setCancelable(false); progressDialog.show();

ApiClient.getInstance(this).getApi().getRoom(student.id).enq ueue(new Callback<RoomResponse>() {

public void onResponse(Call<RoomResponse> call, Response<RoomResponse> response) {

if (response.isSuccessful()) { if (response.body().status) {

if(response.body().data.size() != 0){ String[] kelas = new

String[response.body().data.size()]; for (int i = 0; i < kelas.length; i++) { kelas[i] = response.body().data.get(i).name; }

spinnerRoom.setItems(kelas); listRoom = response.body().data; getLocation(progressDialog); }else{

progressDialog.dismiss(); Toast.makeText(getApplicationContext(), "Anda tidak

terdaftar dalam kelas", Toast.LENGTH_SHORT).show();} } else {

progressDialog.dismiss(); Toast.makeText(getApplicationContext(),

response.body().message, Toast.LENGTH_SHORT).show();} } else {

progressDialog.dismiss();

Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show();}}

public void onFailure(Call<RoomResponse> call, Throwable t) {

Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show();

progressDialog.dismiss();} });} public void getLocation(final ProgressDialog progressDialog){

ApiClient.getInstance(this).getApi().getSchool().enqueue(new Callback<SchoolsResponse>() {

public void onResponse(Call<SchoolsResponse> call, Response<SchoolsResponse> response) {

(28)

if (response.body().status) {

school = response.body().data;

setSchoolLocation();} else { Toast.makeText(getApplicationContext(),

response.body().message, Toast.LENGTH_SHORT).show(); } } else {

Toast.makeText(getApplicationContext(), "Error connecting to server", Toast.LENGTH_SHORT).show(); }

progressDialog.dismiss();}

public void onFailure(Call<SchoolsResponse> call, Throwable t) { Toast.makeText(getApplicationContext(), "Error

connecting to server", Toast.LENGTH_SHORT).show(); progressDialog.dismiss();} });}

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

switch (requestCode) { case 1: {

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

Log.d("PERMITION", "Permition granted"); } else { Log.d("PERMITION", "Permition denied");} return;} } }

private void addLocationMarker(Location location){ if (Gmap != null){

try {

if (location != null) {

LatLng position = new LatLng(location.getLatitude(), location.getLongitude()); changeMap(position);

Gmap.clear();Gmap.addMarker(new MarkerOptions() .position(new

LatLng(location.getLatitude(), location.getLongitude()))); setSchoolLocation();

}

} catch (Exception e) {

Toast.makeText(getApplicationContext(), "Location not found", Toast.LENGTH_SHORT).show();

e.printStackTrace();} } }

public void changeMap(LatLng location) {

Gmap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 16f));}

public void setSchoolLocation(){ if (Gmap != null){

try {

if (school != null){

LatLng position = new LatLng(school.latitude, school.longitude); changeMap(position);

MarkerOptions marker = new MarkerOptions() .position(new

LatLng(school.latitude, school.longitude)); marker.icon(BitmapDescriptorFactory.fromResource(R.drawable. map_marker));

Gmap.addMarker(marker); circle = Gmap.addCircle(new CircleOptions().center(new LatLng(school.latitude, school.longitude)).radius(100) .strokeColor(Color.RED));

(29)

float[] distance = new float[2];

Location.distanceBetween(location.getLatitude(), location.getLongitude(),circle.getCenter().latitude, circle.getCenter().longitude, distance);

if( distance[0] > circle.getRadius() ){checkRadius = false; Toast.makeText(getBaseContext(), "Anda tidak berada pada lokasi sekolah" , Toast.LENGTH_SHORT).show();

} else {

checkRadius = true;}} } catch (Exception e) {

Toast.makeText(getApplicationContext(), "Lokasi sekolah tidak ditemukan", Toast.LENGTH_SHORT).show();

e.printStackTrace(); } } } }

SpinnerAdapter.java

package com.example.karinputriandili.absensi.adapter;

import android.content.Context;

import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.widget.ArrayAdapter;

import com.example.karinputriandili.absensi.api.entity.RoomEntity;

public class SpinnerAdapter extends ArrayAdapter<RoomEntity> { public SpinnerAdapter(@NonNull Context context, @LayoutRes int resource) {

super(context, resource); }

}

RoomEntity.java

package com.example.karinputriandili.absensi.api.entity; public class RoomEntity {

public int id; public String name; }

SchoolEntity.java

package com.example.karinputriandili.absensi.api.entity; public class SchoolEntity {

public int id; public String name; public double longitude; public double latitude; }

StudentEntity.java

package com.example.karinputriandili.absensi.api.entity; import java.io.Serializable;

public class StudentEntity implements Serializable{ public int id;

public String username; public String name; }

(30)

package com.example.karinputriandili.absensi.api.entity; import java.io.Serializable;

public class StudentEntity implements Serializable{ public int id;

public String username; public String name; }

ApiResponse.java

package com.example.karinputriandili.absensi.api.model; public class ApiResponse {

public boolean status; public String message; }

LoginResponse.java

package com.example.karinputriandili.absensi.api.model; import

com.example.karinputriandili.absensi.api.entity.StudentEntity; public class LoginResponse extends ApiResponse {

public StudentEntity data; }

RoomResponse.java

package com.example.karinputriandili.absensi.api.model;

import com.example.karinputriandili.absensi.api.entity.RoomEntity; import java.util.List;

public class RoomResponse extends ApiResponse { public List<RoomEntity> data;

}

SchoolResponse.java

package com.example.karinputriandili.absensi.api.model; import

com.example.karinputriandili.absensi.api.entity.SchoolEntity; public class SchoolsResponse extends ApiResponse {

public SchoolEntity data; }

ApiClient.java

package com.example.karinputriandili.absensi.api; import android.content.Context;

import com.example.karinputriandili.absensi.BuildConfig; import okhttp3.OkHttpClient;

import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit;

import retrofit2.converter.gson.GsonConverterFactory; public class ApiClient {

private static ApiClient instance; private ApiInterface api;

private Retrofit retrofit; private Context context;

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); private ApiClient(Context context){

this.context = context;

(31)

}

public static String getURI(){ return BuildConfig.API_URL; }

public static String getApiUri(){ return getURI() + "api/"; }

public Retrofit getClient(){

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();

logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient.Builder httpClient = new

OkHttpClient.Builder();

httpClient.addInterceptor(logging); if (retrofit == null){

Retrofit.Builder builder = new Retrofit.Builder()

.baseUrl(getApiUri()).client(httpClient.build()).addConverterFacto ry(GsonConverterFactory.create());

retrofit = builder.build(); }

return retrofit; }

public ApiInterface getApi() { return api;

}

public static ApiClient getInstance(Context context){ return (instance == null) ? new ApiClient(context) : instance;

} }

ApiInterface.java

package com.example.karinputriandili.absensi.api; import

com.example.karinputriandili.absensi.api.entity.StudentEntity; import

com.example.karinputriandili.absensi.api.model.AbsentResponse; import com.example.karinputriandili.absensi.api.model.ApiResponse; import

com.example.karinputriandili.absensi.api.model.LoginResponse; import

com.example.karinputriandili.absensi.api.model.RoomResponse; import

com.example.karinputriandili.absensi.api.model.SchoolsResponse; import java.util.Map;

import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Path; public interface ApiInterface { @POST("room/absent")

Call<AbsentResponse> getAbsent(@Body Map<String, String> data);

@GET("room/getall")

(32)

@POST("student/login")

Call<LoginResponse> login(@Body Map<String, String> data); @POST("student/room/{id}")

Call<RoomResponse> getRoom(@Path("id") int id); @GET("school")

Call<SchoolsResponse> getSchool(); @POST("student/absent")

Call<ApiResponse> absent(@Body Map<String, String> data); }

MapsActivity.java

package com.example.karinputriandili.absensi; import android.support.v4.app.FragmentActivity; import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

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

setContentView(R.layout.activity_maps); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);

}

public void onMapReady(GoogleMap googleMap) { mMap = googleMap;

LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new

MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); }

}

Helper.java

package com.example.karinputriandili.absensi; import java.util.Calendar;

public class Helper {

public static String getDate(Calendar calendar){ return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" +

calendar.get(Calendar.DATE); }

}

Referensi

Dokumen terkait

Proses permohonan peminjaman sarana dan prasarana yang masih dilakukan dengan cara konvensional tersebut ternyata menimbulkan berbagai permasalahan, seperti jadwal

Tidak terjadi pengaruh interaksi antara pupuk organik pelepah kelapa sawit dengan pupuk majemuk NPK terhadap bobot basah akar dan bobot kering akar.. Aplikasi pupuk

Segala puja dan puji syukur kami panjatkan kehadirat Allah SWT yang maha pengasih lagi maha penyayang kepada seluruh hamba-Nya, yang mana hanya dengan rahmat, taufik, hidayah,

Bagi kajian ini, rancangan tersebut adalah Modul Pembelajaran Kejuruteraan Bekalan Air dan Air Sisa yang dihasilkan bagi membantu pelajar di dalam menerima konsep dan isi

Hasil penelitian dari evaluasi kesesuaian lahan aktual adalah sebanyak sepuluh lokasi yang tergolong S3 yaitu sesuai marginal dan dua puluh lokasi tergolong N yaitu tidak sesuai,

Penelitian dilakukan untuk mengkaji pengaruh muka air tanah dan dosis aplikasi terak baja terhadap sifat fisik gambut kaitannya dengan emisi karbon pada perkebunan kelapa

Dalam rangka menyelesaikan skripsi yang berjudul “Pengaruh Karakteristik Tujuan Anggaran, Sumber Daya Manusia, dan Pengadaan Barang dan Jasa Terhadap Penyerapan

Tetapi semenjak ada SHT ( Surabaya Heritage Track ) dari House of Sampoerna wisatawan mulai terbantu untuk mengetahui tentang wisata cagar budaya tersebut.. Wisata