diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a193c5784..e2a192fc6 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,9 +1,9 @@
+ package="org.kiwix.kiwixmobile">
-
+
-
+
@@ -43,7 +43,6 @@
-
@@ -57,7 +56,6 @@
-
@@ -71,7 +69,6 @@
-
@@ -85,12 +82,11 @@
-
-
+
@@ -101,15 +97,17 @@
-
-
+
+
+
+
diff --git a/res/layout/activity_bookmarks.xml b/res/layout/activity_bookmarks.xml
new file mode 100644
index 000000000..d06b97975
--- /dev/null
+++ b/res/layout/activity_bookmarks.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/bookmarks_row.xml b/res/layout/bookmarks_row.xml
new file mode 100644
index 000000000..d1fba959c
--- /dev/null
+++ b/res/layout/bookmarks_row.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/menu/menu_main.xml b/res/menu/menu_main.xml
index 6503f7a5b..5618e35c6 100644
--- a/res/menu/menu_main.xml
+++ b/res/menu/menu_main.xml
@@ -15,6 +15,11 @@
android:visible="false"
app:showAsAction="ifRoom"/>
+
+
-
+
+ 64dp
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b0a18aae7..520df3b53 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -53,4 +53,6 @@
Could not find an installed application for this type of file
Your application is corrupted.\nThis might happen when you remove files on the SD Card.\nYou need to uninstall then reinstall the App from the Play Store.
Go to Play Store
+ No Bookmarks!
+ Bookmarks
\ No newline at end of file
diff --git a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java
index c93e969c2..3f724f45c 100644
--- a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java
+++ b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java
@@ -71,6 +71,7 @@ import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
+import android.widget.ToggleButton;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
@@ -91,11 +92,12 @@ import org.kiwix.kiwixmobile.utils.LanguageUtils;
import org.kiwix.kiwixmobile.utils.files.FileUtils;
import org.kiwix.kiwixmobile.utils.files.RateAppCounter;
import org.kiwix.kiwixmobile.views.AnimatedProgressBar;
+import org.kiwix.kiwixmobile.views.BookmarksActivity;
import org.kiwix.kiwixmobile.views.CompatFindActionModeCallback;
import org.kiwix.kiwixmobile.views.KiwixWebView;
public class KiwixMobileActivity extends AppCompatActivity
- implements BookmarkDialogFragment.BookmarkDialogListener {
+ {
public static final String TAG_KIWIX = "kiwix";
@@ -179,7 +181,7 @@ public class KiwixMobileActivity extends AppCompatActivity
private LinearLayout snackbarLayout;
private RateAppCounter visitCounterPref;
private int tempVisitCount;
-
+ private static final int BOOKMARK_CHOSEN_REQUEST = 1;
@Override public void onActionModeStarted(ActionMode mode) {
if (mActionMode == null) {
mActionMode = mode;
@@ -474,9 +476,11 @@ public class KiwixMobileActivity extends AppCompatActivity
mDrawerList.setItemChecked(mCurrentWebViewIndex, true);
}
} else {
- mWebViews.remove(0);
- mCurrentWebViewIndex = 0;
+ tempForUndo = mWebViews.get(index);
+ mWebViews.remove(index);
newTab();
+ mCurrentWebViewIndex = 0;
+ undoSnackbar(index);
}
mDrawerAdapter.notifyDataSetChanged();
}
@@ -485,9 +489,14 @@ public class KiwixMobileActivity extends AppCompatActivity
Snackbar undoSnackbar = Snackbar.make(snackbarLayout, "Tab closed", Snackbar.LENGTH_LONG)
.setAction("Undo", new View.OnClickListener() {
@Override public void onClick(View v) {
- restoreTabAtIndex(tempForUndo.getUrl(), index);
- selectTab(index);
+ if (index == 0)
+ openArticleFromBookmark(tempForUndo.getTitle());
+ else {
+ restoreTabAtIndex(tempForUndo.getUrl(), index);
+ selectTab(index);
+ }
mDrawerLayout.openDrawer(Gravity.LEFT);
+
}
});
undoSnackbar.setActionTextColor(getResources().getColor(R.color.white_undo));
@@ -537,9 +546,12 @@ public class KiwixMobileActivity extends AppCompatActivity
break;
case R.id.menu_bookmarks:
- viewBookmarks();
+ toggleBookmark();
break;
+ case R.id.menu_bookmarks_list:
+ goToBookmarks();
+ break;
case R.id.menu_randomarticle:
openRandomArticle();
break;
@@ -572,6 +584,12 @@ public class KiwixMobileActivity extends AppCompatActivity
return super.onOptionsItemSelected(item);
}
+ private void goToBookmarks() {
+ Intent intentBookmarks = new Intent(getBaseContext(), BookmarksActivity.class);
+ intentBookmarks.putExtra("bookmark_contents", bookmarks.toArray(new String[0]));
+ startActivityForResult(intentBookmarks, BOOKMARK_CHOSEN_REQUEST);
+ }
+
private void openFullScreen() {
mToolbarContainer.setVisibility(View.GONE);
@@ -609,14 +627,7 @@ public class KiwixMobileActivity extends AppCompatActivity
mIsFullscreenOpened = false;
}
- //These two methods are used with the BookmarkDialog.
- @Override public void onListItemSelect(String choice) {
- openArticleFromBookmark(choice);
- }
- @Override public void onBookmarkButtonPressed() {
- toggleBookmark();
- }
public void showWelcome() {
getCurrentWebView().loadUrl("file:///android_res/raw/welcome.html");
@@ -786,21 +797,42 @@ public class KiwixMobileActivity extends AppCompatActivity
public void toggleBookmark() {
String title = getCurrentWebView().getTitle();
-
+ boolean isBookmark;
if (title != null && !bookmarks.contains(title)) {
bookmarks.add(title);
+ isBookmark = true;
+ popBookmarkSnackbar(isBookmark);
} else {
bookmarks.remove(title);
+ isBookmark = false;
+ popBookmarkSnackbar(isBookmark);
}
supportInvalidateOptionsMenu();
+
}
- public void viewBookmarks() {
- new BookmarkDialogFragment(bookmarks.toArray(new String[bookmarks.size()]),
- bookmarks.contains(getCurrentWebView().getTitle())).show(getSupportFragmentManager(),
- "BookmarkDialog");
+ private void popBookmarkSnackbar(boolean isBookmark) {
+ if(isBookmark) {
+ Snackbar bookmarkSnackbar =
+ Snackbar.make(snackbarLayout, "Bookmark added", Snackbar.LENGTH_LONG)
+ .setAction("Open", new View.OnClickListener() {
+ @Override public void onClick(View v) {
+ goToBookmarks();
+ }
+ });
+ bookmarkSnackbar.setActionTextColor(getResources().getColor(R.color.white_undo));
+ bookmarkSnackbar.show();
+ }
+ else{
+ Snackbar bookmarkSnackbar =
+ Snackbar.make(snackbarLayout, "Bookmark removed", Snackbar.LENGTH_LONG);
+ bookmarkSnackbar.show();
+ }
+
}
+
+
private void refreshBookmarks() {
bookmarks.clear();
if (ZimContentProvider.getId() != null) {
@@ -1027,6 +1059,13 @@ public class KiwixMobileActivity extends AppCompatActivity
Log.e(TAG_KIWIX, KiwixMobileActivity.mPrefState.get(0).hasToBeRefreshed() + "");
}
break;
+
+ case BOOKMARK_CHOSEN_REQUEST:
+ if (resultCode == RESULT_OK){
+ String bookmarkChosen = data.getStringExtra("choseX");
+ newTab();
+ openArticleFromBookmark(bookmarkChosen);
+ }
}
super.onActivityResult(requestCode, resultCode, data);
diff --git a/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java b/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java
index 835170bd5..fffcd6eec 100644
--- a/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java
+++ b/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java
@@ -176,7 +176,7 @@ public class ZimFileSelectActivity extends AppCompatActivity
protected void onSaveInstanceState(Bundle outState) {
// Check, if the user has rescanned the file system, if he has, then we want to save this list,
- // so this can be shown again, if the actvitity is recreated (on a device rotation for example)
+ // so this can be shown again, if the activity is recreated (on a device rotation for example)
if (!mFiles.isEmpty()) {
Log.i(TAG_KIWIX, "Saved state of the ListView");
outState.putParcelableArrayList("rescanData", mFiles);
diff --git a/src/org/kiwix/kiwixmobile/views/BookmarksActivity.java b/src/org/kiwix/kiwixmobile/views/BookmarksActivity.java
new file mode 100644
index 000000000..cbfb192dd
--- /dev/null
+++ b/src/org/kiwix/kiwixmobile/views/BookmarksActivity.java
@@ -0,0 +1,55 @@
+package org.kiwix.kiwixmobile.views;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.Toast;
+import java.util.ArrayList;
+import org.kiwix.kiwixmobile.R;
+
+public class BookmarksActivity extends AppCompatActivity
+ implements AdapterView.OnItemClickListener {
+
+ private String[] contents;
+ private ListView bookmarksList;
+
+ @Override protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_bookmarks);
+ setUpToolbar();
+ contents = getIntent().getStringArrayExtra("bookmark_contents");
+ bookmarksList = (ListView) findViewById(R.id.bookmarks_list);
+ ArrayAdapter adapter =
+ new ArrayAdapter<>(getApplicationContext(),R.layout.bookmarks_row,R.id.bookmark_title, contents);
+ bookmarksList.setAdapter(adapter);
+ bookmarksList.setOnItemClickListener(this);
+ }
+
+
+
+
+ private void setUpToolbar() {
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ toolbar.setTitle(getResources().getString(R.string.menu_bookmarks_list));
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setHomeButtonEnabled(true);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ toolbar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override public void onClick(View v) {
+ finish();
+ }
+ });
+ }
+
+ @Override public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ Intent intent = new Intent();
+ intent.putExtra("choseX",contents[position]);
+ setResult(RESULT_OK, intent);
+ finish();
+ }
+}