Added InputManager and fixed a NPE for the Tabs.

This commit is contained in:
Rashiq Ahmad 2013-12-04 15:22:37 +01:00
parent 390fd6708e
commit 8c4b169d3e
2 changed files with 103 additions and 80 deletions

View File

@ -2,6 +2,8 @@ package org.kiwix.kiwixmobile;
import android.app.ActionBar; import android.app.ActionBar;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -23,6 +25,7 @@ import android.view.ViewGroup;
import android.view.ViewParent; import android.view.ViewParent;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.HorizontalScrollView; import android.widget.HorizontalScrollView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.Spinner; import android.widget.Spinner;
@ -126,10 +129,13 @@ public class KiwixMobileActivity extends FragmentActivity implements ActionBar.T
mCurrentFragment = getCurrentVisibleFragment(); mCurrentFragment = getCurrentVisibleFragment();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.menu_home: case R.id.menu_home:
case android.R.id.home: case android.R.id.home:
imm.hideSoftInputFromWindow(mCurrentFragment.articleSearchtextView.getWindowToken(), 0);
mCurrentFragment.openMainPage(); mCurrentFragment.openMainPage();
break; break;
@ -146,12 +152,14 @@ public class KiwixMobileActivity extends FragmentActivity implements ActionBar.T
break; break;
case R.id.menu_forward: case R.id.menu_forward:
imm.hideSoftInputFromWindow(mCurrentFragment.articleSearchtextView.getWindowToken(), 0);
if (mCurrentFragment.webView.canGoForward()) { if (mCurrentFragment.webView.canGoForward()) {
mCurrentFragment.webView.goForward(); mCurrentFragment.webView.goForward();
} }
break; break;
case R.id.menu_back: case R.id.menu_back:
imm.hideSoftInputFromWindow(mCurrentFragment.articleSearchtextView.getWindowToken(), 0);
if (mCurrentFragment.webView.canGoBack()) { if (mCurrentFragment.webView.canGoBack()) {
mCurrentFragment.menu.findItem(R.id.menu_forward).setVisible(true); mCurrentFragment.menu.findItem(R.id.menu_forward).setVisible(true);
mCurrentFragment.webView.goBack(); mCurrentFragment.webView.goBack();
@ -466,7 +474,9 @@ public class KiwixMobileActivity extends FragmentActivity implements ActionBar.T
getCurrentVisibleFragment().handleTabDeleteCross(); getCurrentVisibleFragment().handleTabDeleteCross();
v.startDrag(null, shadowBuilder, v, 0); ClipData data = ClipData.newPlainText("", "");
v.startDrag(data, shadowBuilder, v, 0);
return true; return true;
} }

View File

@ -13,8 +13,8 @@ import android.graphics.Color;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.os.Environment;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
@ -25,27 +25,27 @@ import android.text.InputType;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.ContextMenu;
import android.view.DragEvent; import android.view.DragEvent;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.MenuItem;
import android.view.View.MeasureSpec; import android.view.View.MeasureSpec;
import android.view.View.OnTouchListener;
import android.view.ContextMenu;
import android.view.View.OnCreateContextMenuListener; import android.view.View.OnCreateContextMenuListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.webkit.WebChromeClient; import android.webkit.WebChromeClient;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebView.HitTestResult; import android.webkit.WebView.HitTestResult;
import android.webkit.WebViewClient;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
@ -60,13 +60,11 @@ import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast; import android.widget.Toast;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.io.FileInputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.InputStream; import java.util.ArrayList;
import java.io.FileOutputStream;
public class KiwixMobileFragment extends Fragment { public class KiwixMobileFragment extends Fragment {
@ -106,6 +104,8 @@ public class KiwixMobileFragment extends Fragment {
public ImageButton exitFullscreenButton; public ImageButton exitFullscreenButton;
public AutoCompleteTextView articleSearchtextView;
protected boolean requestClearHistoryAfterLoad; protected boolean requestClearHistoryAfterLoad;
protected boolean requestInitAllMenuItems; protected boolean requestInitAllMenuItems;
@ -118,8 +118,6 @@ public class KiwixMobileFragment extends Fragment {
private boolean isButtonEnabled = true; private boolean isButtonEnabled = true;
private AutoCompleteTextView articleSearchtextView;
private ArrayAdapter<String> adapter; private ArrayAdapter<String> adapter;
private Button mBackToTopButton; private Button mBackToTopButton;
@ -310,6 +308,9 @@ public class KiwixMobileFragment extends Fragment {
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(articleSearchtextView.getWindowToken(), 0);
articleSearchtextView.setText(parent.getItemAtPosition(position).toString()); articleSearchtextView.setText(parent.getItemAtPosition(position).toString());
openArticleFromSearch(); openArticleFromSearch();
} }
@ -325,79 +326,91 @@ public class KiwixMobileFragment extends Fragment {
articleSearchtextView.setInputType(InputType.TYPE_CLASS_TEXT); articleSearchtextView.setInputType(InputType.TYPE_CLASS_TEXT);
final Handler saveHandler = new Handler() { final Handler saveHandler = new
@Override Handler() {
public void handleMessage(Message msg) {
String url = (String) msg.getData().get("url");
String src = (String) msg.getData().get("src");
if (url != null && src != null) { @Override
url = url.substring(url.lastIndexOf('/')+1, url.length()); public void handleMessage(Message msg) {
url = url.substring(url.indexOf("%3A")+3, url.length()); String url = (String) msg.getData().get("url");
int dotIndex = url.lastIndexOf('.'); String src = (String) msg.getData().get("src");
File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), url);
String newurl = url;
for (int i = 2; storageDir.exists(); i++) {
newurl = url.substring(0, dotIndex) + "_" + i + url.substring(dotIndex, url.length());
storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), newurl);
}
Uri source = Uri.parse(src); if (url != null && src != null) {
Uri picUri = Uri.fromFile(storageDir); url = url.substring(url.lastIndexOf('/') + 1, url.length());
url = url.substring(url.indexOf("%3A") + 3, url.length());
int dotIndex = url.lastIndexOf('.');
File storageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), url);
String newurl = url;
for (int i = 2; storageDir.exists(); i++) {
newurl = url.substring(0, dotIndex) + "_" + i + url
.substring(dotIndex, url.length());
storageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), newurl);
}
String toastText; Uri source = Uri.parse(src);
try { Uri picUri = Uri.fromFile(storageDir);
InputStream istream = getActivity().getContentResolver().openInputStream(source);
OutputStream ostream = new FileOutputStream(storageDir);
byte[] buffer = new byte[1024]; String toastText;
int len; try {
while((len = istream.read(buffer)) > 0) { InputStream istream = getActivity().getContentResolver()
ostream.write(buffer, 0, len); .openInputStream(source);
} OutputStream ostream = new FileOutputStream(storageDir);
istream.close(); byte[] buffer = new byte[1024];
ostream.close(); int len;
} catch (IOException e) { while ((len = istream.read(buffer)) > 0) {
Log.d("kiwix", "Couldn't save image", e); ostream.write(buffer, 0, len);
toastText = getResources().getString(R.string.save_image_error); }
} finally {
toastText = String.format(getResources().getString(R.string.save_image_saved), newurl);
}
Toast toast = Toast.makeText(getActivity().getApplicationContext(), toastText, Toast.LENGTH_LONG); istream.close();
toast.show(); ostream.close();
} } catch (IOException e) {
} Log.d("kiwix", "Couldn't save image", e);
}; toastText = getResources().getString(R.string.save_image_error);
} finally {
toastText = String
.format(getResources().getString(R.string.save_image_saved), newurl);
}
final Handler viewHandler = new Handler() { Toast toast = Toast.makeText(getActivity().getApplicationContext(), toastText,
@Override Toast.LENGTH_LONG);
public void handleMessage(Message msg) { toast.show();
String url = (String) msg.getData().get("url"); }
}
};
if (url != null) { final Handler viewHandler = new
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent); Handler() {
} @Override
} public void handleMessage(Message msg) {
}; String url = (String) msg.getData().get("url");
if (url != null) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
}
};
// Image long-press // Image long-press
webView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { webView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
final HitTestResult result = ((WebView) v).getHitTestResult(); final HitTestResult result = ((WebView) v).getHitTestResult();
if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
menu.add(0, 1, 0, getResources().getString(R.string.save_image)).setOnMenuItemClickListener(new OnMenuItemClickListener() { menu.add(0, 1, 0, getResources().getString(R.string.save_image))
public boolean onMenuItemClick(MenuItem item) { .setOnMenuItemClickListener(
Message msg = saveHandler.obtainMessage(); new OnMenuItemClickListener() {
webView.requestFocusNodeHref(msg); public boolean onMenuItemClick(MenuItem item) {
return true; Message msg = saveHandler.obtainMessage();
} webView.requestFocusNodeHref(msg);
}); return true;
}
});
} }
} }
}); });
// js includes will not happen unless we enable JS // js includes will not happen unless we enable JS