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);
}, 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"
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); }
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"
<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"
</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)); }
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
<RelativeLayoutxmlns: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"
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"
<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);
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
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"
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>
</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;
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() {
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);
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()];
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;
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"
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;
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
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"/>
<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"
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;
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);
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);
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();
}
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) {
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));
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; }
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;
}
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")
@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); }
}