LISTING PROGRAM
1.
MainActivity.java
package com.skripsi.zahra.haditsshahih;
import android.content.Context; import android.content.Intent; import android.os.Bundle;
import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView; import android.view.KeyEvent;
import android.view.View;
import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar;
import android.view.Menu; import android.view.MenuItem;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast;
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private boolean isSearchOpened = false; private EditText edPencarian;
private MenuItem mSearchAction;
// List view
private ListView lv;
// Listview Adapter
ArrayAdapter<String> adapter;
// List untuk dbhadits List<String> dbhadits;
//ALGORITMA APOSTOLICO-CROCHEMORE static int xsize = 256;
static int[] kmpNext = new int[xsize];
//menghitung fungsi pinggiran pada pattern public static void preKmp(String x, int m){ int i,j;
i = 0;
j = kmpNext[0] = -1; while(i < m){
while(j > -1 && x.charAt(i) != x.charAt(j)){ j = kmpNext[j];
} i++; j++;
char xi = 0; char xj = 0; if(i<m)
xi = x.charAt(i); xj = x.charAt(j); if(xi == xj){
else{
kmpNext[i] = j; }}}
public static int AXAMAC(String x, int m, String y, int n){ //Preprocessing
int ell, i, j, k;
preKmp(x, m); ell = 1; try{
for(ell = 1; x.charAt(ell - 1) == x.charAt(ell); ell++){ }}catch(Exception e){}
if(ell == m){ ell = 0; }
//Searching i = ell; j = k = 0;
while(j <= n - m){
while(i < m && x.charAt(i) == y.charAt(i+j)){ ++i;
}
if(i >= m){
while(k < ell && x.charAt(k) == y.charAt(j + k)){ ++k;
}
if(k >= ell) return j; }
j += (i - kmpNext[i]); if(i == ell){
k = Math.max(0, k-1); }
else{
if(kmpNext[i] <= ell){
} else{
k = ell;
i = kmpNext[i]; }}}
return -1; }
//AKHIR DARI ALGORITMA APOSTOLICO-CROCHEMORE
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//PENGAMBILAN DATABASES
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); databaseAccess.open();
dbhadits = databaseAccess.getData(); databaseAccess.close();
//PENAMBAHAN list dbhadits ke dalam ListView lv lv = (ListView) findViewById(R.id.list_view); adapter = new ArrayAdapter<String>(this,
R.layout.content_main, R.id.label, dbhadits); lv.setAdapter(adapter);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar,
R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState();
findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this); }
protected void handleMenuSearch(){
ActionBar action = getSupportActionBar();
if(isSearchOpened){
action.setDisplayShowCustomEnabled(false); action.setDisplayShowTitleEnabled(true);
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edPencarian.getWindowToken(), 0);
mSearchAction.setIcon(R.drawable.search_black);
isSearchOpened = false; } else {
action.setDisplayShowCustomEnabled(true);
action.setCustomView(R.layout.activity_search);
//untuk menyembunyikan judul
action.setDisplayShowTitleEnabled(false); //text editor
edPencarian =
(EditText)action.getCustomView().findViewById(R.id.idCari); edPencarian.setVisibility(View.VISIBLE);
//saat user klik tombol cari
edPencarian.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
//MASUK KE PROSES PENCARIAN String pattern =
edPencarian.getText().toString(); ArrayList saveResult = new ArrayList();
//PENYERATAAN HURUF
String ptn = pattern.toLowerCase();
String txt[] = new String[dbhadits.size()]; for(int i=0;i<dbhadits.size();i++){
txt[i] = dbhadits.get(i).toLowerCase(); }
//PENYIMPANAN HASIL PENCARIAN int jumlah_hasil=0;
int result;
for(int i=0;i<dbhadits.size();i++) { result = AXAMAC(ptn, ptn.length(),
txt[i], txt[i].length());
if (result != -1) { jumlah_hasil++;
saveResult.add(dbhadits.get(i)); }}
//MENAMPILKAN HASIL PENCARIAN DARI DATABASE adapter = new ArrayAdapter(getBaseContext(),
R.layout.content_main, R.id.label, saveResult); lv.setAdapter(adapter);
//MENAMPILKAN JUMLAH HADITS YANG BERHASIL DITEMUKAN SISTEM String jml = Integer.toString(jumlah_hasil);
Toast.makeText(getBaseContext(), "Hadits yang ditemukan sebanyak "+jml+" hadits", Toast.LENGTH_LONG).show(); return true;}
return false;} });
edPencarian.requestFocus();
//perintah membuka keyboard
imm.showSoftInput(edPencarian, InputMethodManager.SHOW_IMPLICIT);
mSearchAction.setIcon(R.drawable.search_color); isSearchOpened = true;
}}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mSearchAction = menu.findItem(R.id.action_search); SearchView searchView = (SearchView)
MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); return super.onPrepareOptionsMenu(menu);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else if(isSearchOpened) {
handleMenuSearch(); return;
}else {
super.onBackPressed(); }}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu); return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { //Menu Toolbar
case R.id.action_search: handleMenuSearch(); return true;
}
return super.onOptionsItemSelected(item); }
@SuppressWarnings("StatementWithEmptyBody") @Override
public boolean onNavigationItemSelected(MenuItem item) { int id = item.getItemId();
if (id == R.id.nav_help) {
// Menampilkan Petunjuk Penggunaan Intent about = new
Intent(MainActivity.this,HelpActivity.class); startActivity(about);
} else if (id == R.id.nav_about) { // Menampilkan About
Intent about = new
Intent(MainActivity.this,AboutActivity.class); startActivity(about);
} else if (id == R.id.nav_allhadits) { // Menampilkan Semua Hadits
adapter = new ArrayAdapter(getBaseContext(), R.layout.content_main, R.id.label, dbhadits);
lv.setAdapter(adapter);
Toast.makeText(this, "Kembali menampilkan semua hadits", Toast.LENGTH_LONG).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START); return true;
2.
DatabaseOpenHelper.java
package com.skripsi.zahra.haditsshahih;
/**
* Created by zahra on 12/08/16. */
import android.content.Context;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class DatabaseOpenHelper extends SQLiteAssetHelper { private static final String DATABASE_NAME = "db_hadits"; private static final int DATABASE_VERSION = 1;
public DatabaseOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); }
}
3.
DatabaseAccess.java
package com.skripsi.zahra.haditsshahih;
/**
* Created by zahra on 12/08/16. */
import android.content.Context; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList; import java.util.List;
public class DatabaseAccess {
private SQLiteOpenHelper openHelper; private SQLiteDatabase database;
/**
* Private constructor to aboid object creation from outside classes.
*
* @param context */
private DatabaseAccess(Context context) {
this.openHelper = new DatabaseOpenHelper(context); }
/**
* Return a singleton instance of DatabaseAccess. *
* @param context the Context
* @return the instance of DabaseAccess */
public static DatabaseAccess getInstance(Context context) { if (instance == null) {
instance = new DatabaseAccess(context); }
return instance; }
/**
* Open the database connection. */
public void open() {
this.database = openHelper.getWritableDatabase(); }
/**
* Close the database connection. */
public void close() {
if (database != null) { this.database.close(); }
} /**
*
* @return a List of tb_HaditsShahih */
public List<String> getData() {
List<String> list = new ArrayList<>();
Cursor cursor = database.rawQuery("SELECT * FROM tb_HaditsShahih", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) { list.add(cursor.getString(0)); cursor.moveToNext();
}
cursor.close(); return list; }
}
4.
HelpActivity.java
package com.skripsi.zahra.haditsshahih;
/**
* Created by zahra on 26/08/16. */
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;
public class HelpActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help); //menerima Intent yang dikirim
Intent i = this.getIntent(); }
5.
AboutActivity.java
package com.skripsi.zahra.haditsshahih; /**
* Created by zahra on 09/08/16. */
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;
public class AboutActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
//menerima Intent yang dikirim Intent i = this.getIntent(); }