import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.provider.Settings;
+import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.support.v7.widget.Toolbar;
import android.text.InputType;
import android.util.Log;
-import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.BaseAdapter;
import android.widget.Button;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
// Right-click:
// Delete, move to top.
-public class DictionaryManagerActivity extends ActionBarActivity {
+public class DictionaryManagerActivity extends AppCompatActivity {
- static final String LOG = "QuickDic";
- static boolean blockAutoLaunch = false;
+ private static final String LOG = "QuickDic";
+ private static boolean blockAutoLaunch = false;
private ListView listView;
private ListView getListView() {
}
// For DownloadManager bug workaround
- private Set<Long> finishedDownloadIds = new HashSet<Long>();
+ private final Set<Long> finishedDownloadIds = new HashSet<>();
- DictionaryApplication application;
+ private DictionaryApplication application;
- SearchView filterSearchView;
- ToggleButton showDownloadable;
+ private SearchView filterSearchView;
+ private ToggleButton showDownloadable;
- LinearLayout dictionariesOnDeviceHeaderRow;
- LinearLayout downloadableDictionariesHeaderRow;
+ private LinearLayout dictionariesOnDeviceHeaderRow;
+ private LinearLayout downloadableDictionariesHeaderRow;
- Handler uiHandler;
+ private Handler uiHandler;
- Runnable dictionaryUpdater = new Runnable() {
+ private final Runnable dictionaryUpdater = new Runnable() {
@Override
public void run() {
if (uiHandler == null) {
uiHandler.post(new Runnable() {
@Override
public void run() {
- setMyListAdapater();
+ setMyListAdapter();
}
});
}
};
- final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+ private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public synchronized void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
}
Log.w(LOG, "Download finished: " + dest + " Id: " + downloadId);
- Toast.makeText(context, getString(R.string.unzippingDictionary, dest),
- Toast.LENGTH_LONG).show();
+ if (!isFinishing())
+ Toast.makeText(context, getString(R.string.unzippingDictionary, dest),
+ Toast.LENGTH_LONG).show();
if (unzipInstall(context, Uri.parse(dest), dest, true)) {
finishedDownloadIds.add(downloadId);
zipOut = new FileOutputStream(targetFile);
copyStream(zipFile, zipOut);
application.backgroundUpdateDictionaries(dictionaryUpdater);
- Toast.makeText(context, getString(R.string.installationFinished, dest),
- Toast.LENGTH_LONG).show();
+ if (!isFinishing())
+ Toast.makeText(context, getString(R.string.installationFinished, dest),
+ Toast.LENGTH_LONG).show();
result = true;
} catch (Exception e) {
String msg = getString(R.string.unzippingFailed, dest + ": " + e.getMessage());
File dir = application.getDictDir();
- if (!dir.canWrite() || !application.checkFileCreate(dir)) {
+ if (!dir.canWrite() || !DictionaryApplication.checkFileCreate(dir)) {
msg = getString(R.string.notWritable, dir.getAbsolutePath());
}
new AlertDialog.Builder(context).setTitle(getString(R.string.error)).setMessage(msg).setNeutralButton("Close", null).show();
return intent;
}
- public void readableCheckAndError(boolean requestPermission) {
+ private void readableCheckAndError(boolean requestPermission) {
final File dictDir = application.getDictDir();
if (dictDir.canRead() && dictDir.canExecute()) return;
blockAutoLaunch = true;
}
@Override
- public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+ public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
readableCheckAndError(false);
application.backgroundUpdateDictionaries(dictionaryUpdater);
- setMyListAdapater();
+ setMyListAdapter();
}
@Override
getListView().getContext()).inflate(
R.layout.dictionary_manager_header_row_downloadable, getListView(), false);
- showDownloadable = (ToggleButton) downloadableDictionariesHeaderRow
+ showDownloadable = downloadableDictionariesHeaderRow
.findViewById(R.id.hideDownloadable);
showDownloadable.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
registerReceiver(broadcastReceiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
- setMyListAdapater();
+ setMyListAdapter();
registerForContextMenu(getListView());
getListView().setItemsCanFocus(true);
@Override
public boolean onQueryTextChange(String filterText) {
- setMyListAdapater();
+ setMyListAdapter();
return true;
}
});
application.backgroundUpdateDictionaries(dictionaryUpdater);
- setMyListAdapater();
+ setMyListAdapter();
}
@Override
sort.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
application.sortDictionaries();
- setMyListAdapater();
+ setMyListAdapter();
return true;
}
});
}
});
- application.onCreateGlobalOptionsMenu(this, menu);
+ DictionaryApplication.onCreateGlobalOptionsMenu(this, menu);
return true;
}
@Override
public boolean onMenuItemClick(android.view.MenuItem item) {
application.moveDictionaryToTop(row.dictionaryInfo);
- setMyListAdapater();
+ setMyListAdapter();
return true;
}
});
@Override
public boolean onMenuItemClick(android.view.MenuItem item) {
application.deleteDictionary(row.dictionaryInfo);
- setMyListAdapater();
+ setMyListAdapter();
return true;
}
});
}
private void onShowDownloadableChanged() {
- setMyListAdapater();
+ setMyListAdapter();
Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
prefs.putBoolean(C.SHOW_DOWNLOADABLE, showDownloadable.isChecked());
prefs.commit();
class MyListAdapter extends BaseAdapter {
- List<DictionaryInfo> dictionariesOnDevice;
- List<DictionaryInfo> downloadableDictionaries;
+ final List<DictionaryInfo> dictionariesOnDevice;
+ final List<DictionaryInfo> downloadableDictionaries;
class Row {
- DictionaryInfo dictionaryInfo;
- boolean onDevice;
+ final DictionaryInfo dictionaryInfo;
+ final boolean onDevice;
private Row(DictionaryInfo dictionaryInfo, boolean onDevice) {
this.dictionaryInfo = dictionaryInfo;
}
- private void setMyListAdapater() {
+ private void setMyListAdapter() {
final String filter = filterSearchView == null ? "" : filterSearchView.getQuery()
.toString();
final String[] filters = filter.trim().toLowerCase().split("(\\s|-)+");
row = LayoutInflater.from(parent.getContext()).inflate(
R.layout.dictionary_manager_row, parent, false);
}
- final TextView name = (TextView) row.findViewById(R.id.dictionaryName);
- final TextView details = (TextView) row.findViewById(R.id.dictionaryDetails);
+ final TextView name = row.findViewById(R.id.dictionaryName);
+ final TextView details = row.findViewById(R.id.dictionaryDetails);
name.setText(application.getDictionaryName(dictionaryInfo.uncompressedFilename));
final boolean updateAvailable = application.updateAvailable(dictionaryInfo);
- final Button downloadButton = (Button) row.findViewById(R.id.downloadButton);
+ final Button downloadButton = row.findViewById(R.id.downloadButton);
final DictionaryInfo downloadable = application.getDownloadable(dictionaryInfo.uncompressedFilename);
boolean broken = false;
if (!dictionaryInfo.isValid()) {
downloadButton.setVisibility(View.GONE);
}
- LinearLayout buttons = (LinearLayout) row.findViewById(R.id.dictionaryLauncherButtons);
+ LinearLayout buttons = row.findViewById(R.id.dictionaryLauncherButtons);
final List<IndexInfo> sortedIndexInfos = application
.sortedIndexInfos(dictionaryInfo.indexInfos);
continue;
}
final IndexInfo indexInfo = sortedIndexInfos.get(i);
- final View button = IsoUtils.INSTANCE.setupButton(textButton, imageButton, dictionaryInfo,
- indexInfo, application.languageButtonPixels);
+ final View button = IsoUtils.INSTANCE.setupButton(textButton, imageButton,
+ indexInfo);
if (canLaunch) {
button.setOnClickListener(