refactor: Implement SearchActivity using MVP pattern

This commit is contained in:
srv-twry 2018-02-14 07:47:24 +05:30 committed by Isaac Hutt
parent c359881df8
commit dbc12ec1e0
6 changed files with 84 additions and 17 deletions

View File

@ -152,7 +152,7 @@
</activity>
<activity android:name=".settings.KiwixSettingsActivity" />
<activity android:name=".SearchActivity" />
<activity android:name=".search.SearchActivity" />
<activity android:name=".bookmarks_view.BookmarksActivity" />
<provider

View File

@ -25,7 +25,6 @@ import android.appwidget.AppWidgetManager;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@ -83,6 +82,7 @@ import org.kiwix.kiwixmobile.bookmarks_view.BookmarksActivity;
import org.kiwix.kiwixmobile.database.BookmarksDao;
import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.di.components.ApplicationComponent;
import org.kiwix.kiwixmobile.search.SearchActivity;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
import org.kiwix.kiwixmobile.utils.DimenUtils;
import org.kiwix.kiwixmobile.utils.DocumentParser;

View File

@ -8,6 +8,7 @@ import org.kiwix.kiwixmobile.di.modules.JNIModule;
import org.kiwix.kiwixmobile.di.modules.NetworkModule;
import org.kiwix.kiwixmobile.downloader.DownloadService;
import org.kiwix.kiwixmobile.library.LibraryAdapter;
import org.kiwix.kiwixmobile.search.SearchActivity;
import org.kiwix.kiwixmobile.zim_manager.fileselect_view.ZimFileSelectFragment;
import org.kiwix.kiwixmobile.zim_manager.library_view.LibraryFragment;
@ -35,4 +36,6 @@ public interface ApplicationComponent {
void inject(ZimContentProvider zimContentProvider);
void inject(LibraryAdapter libraryAdapter);
void inject(SearchActivity searchActivity);
}

View File

@ -1,7 +1,6 @@
package org.kiwix.kiwixmobile;
package org.kiwix.kiwixmobile.search;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
@ -23,14 +22,17 @@ import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.database.RecentSearchDao;
import org.kiwix.kiwixmobile.KiwixApplication;
import org.kiwix.kiwixmobile.KiwixMobileActivity;
import org.kiwix.kiwixmobile.R;
import org.kiwix.kiwixmobile.views.AutoCompleteAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_IS_WIDGET_VOICE;
import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_SEARCH;
import static org.kiwix.kiwixmobile.utils.Constants.PREF_NIGHTMODE;
@ -38,21 +40,28 @@ import static org.kiwix.kiwixmobile.utils.Constants.TAG_FILE_SEARCHED;
import static org.kiwix.kiwixmobile.utils.StyleUtils.dialogStyle;
public class SearchActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener, SearchViewCallback {
private final int REQ_CODE_SPEECH_INPUT = 100;
private ListView mListView;
private AutoCompleteAdapter mAutoAdapter;
private ArrayAdapter<String> mDefaultAdapter;
private RecentSearchDao recentSearchDao;
private SearchView searchView;
@Inject
SearchPresenter searchPresenter;
private void setupDagger() {
KiwixApplication.getInstance().getApplicationComponent().inject(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
if (sharedPreferences.getBoolean(PREF_NIGHTMODE, false)) {
setTheme(R.style.AppTheme_Night);
}
setupDagger();
super.onCreate(savedInstanceState);
View contentView = LayoutInflater.from(this).inflate(R.layout.search, null);
setContentView(contentView);
@ -61,14 +70,13 @@ public class SearchActivity extends AppCompatActivity
setSupportActionBar(toolbar);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
getSupportActionBar().setHomeButtonEnabled(true);
searchPresenter.attachView(this);
mListView = findViewById(R.id.search_list);
recentSearchDao = new RecentSearchDao(KiwixDatabase.getInstance(this));
List<String> recentSearches = recentSearchDao.getRecentSearches();
mDefaultAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
searchPresenter.getRecentSearches(this);
mListView.setAdapter(mDefaultAdapter);
mDefaultAdapter.addAll(recentSearches);
mDefaultAdapter.notifyDataSetChanged();
mAutoAdapter = new AutoCompleteAdapter(this);
mListView.setOnItemClickListener(this);
mListView.setOnItemLongClickListener(this);
@ -79,6 +87,12 @@ public class SearchActivity extends AppCompatActivity
}
}
@Override
public void addRecentSearches(List<String> recentSearches) {
mDefaultAdapter.addAll(recentSearches);
mDefaultAdapter.notifyDataSetChanged();
}
@Override
public void finish() {
Toolbar toolbar = findViewById(R.id.toolbar);
@ -146,7 +160,7 @@ public class SearchActivity extends AppCompatActivity
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String title = ((TextView) view).getText().toString();
recentSearchDao.saveSearch(title);
searchPresenter.saveSearch(title, this);
sendMessage(title);
}
@ -187,16 +201,14 @@ public class SearchActivity extends AppCompatActivity
}
private void deleteSpecificSearchItem(String search) {
recentSearchDao.deleteSearchString(search);
searchPresenter.deleteSearchString(search, this);
resetAdapter();
}
private void resetAdapter() {
mDefaultAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
mListView.setAdapter(mDefaultAdapter);
List<String> recentSearches = recentSearchDao.getRecentSearches();
mDefaultAdapter.addAll(recentSearches);
mDefaultAdapter.notifyDataSetChanged();
searchPresenter.getRecentSearches(this);
}

View File

@ -0,0 +1,39 @@
package org.kiwix.kiwixmobile.search;
import android.content.Context;
import org.kiwix.kiwixmobile.base.BasePresenter;
import org.kiwix.kiwixmobile.database.KiwixDatabase;
import org.kiwix.kiwixmobile.database.RecentSearchDao;
import javax.inject.Inject;
/**
* Created by srv_twry on 14/2/18.
*/
public class SearchPresenter extends BasePresenter<SearchViewCallback> {
@Inject
public SearchPresenter() {}
@Override
public void attachView(SearchViewCallback searchViewCallback) {
super.attachView(searchViewCallback);
}
void getRecentSearches(Context context) {
RecentSearchDao recentSearchDao = new RecentSearchDao(KiwixDatabase.getInstance(context));
getMvpView().addRecentSearches(recentSearchDao.getRecentSearches());
}
void saveSearch(String title, Context context) {
RecentSearchDao recentSearchDao = new RecentSearchDao(KiwixDatabase.getInstance(context));
recentSearchDao.saveSearch(title);
}
void deleteSearchString(String search, Context context) {
RecentSearchDao recentSearchDao = new RecentSearchDao(KiwixDatabase.getInstance(context));
recentSearchDao.deleteSearchString(search);
}
}

View File

@ -0,0 +1,13 @@
package org.kiwix.kiwixmobile.search;
import org.kiwix.kiwixmobile.base.ViewCallback;
import java.util.List;
/**
* Created by srv_twry on 14/2/18.
*/
public interface SearchViewCallback extends ViewCallback {
void addRecentSearches(List<String> recentSearches);
}