diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..355f015 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/app/build +/captures +.externalNativeBuild diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..01d88c5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libs/ebookparser"] + path = libs/ebookparser + url = https://github.com/Leszek111/ebookparser.git diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..2db0587 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml new file mode 100644 index 0000000..97d83b7 --- /dev/null +++ b/.idea/markdown-navigator.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator/profiles_settings.xml b/.idea/markdown-navigator/profiles_settings.xml new file mode 100644 index 0000000..57927c5 --- /dev/null +++ b/.idea/markdown-navigator/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3963879 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f2ecebc --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.project b/.project deleted file mode 100644 index 7193920..0000000 --- a/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - ReLaunch - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 6473c0e..0000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Wed Aug 03 15:49:35 PDT 2011 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/README b/README deleted file mode 100644 index 8bf4a19..0000000 --- a/README +++ /dev/null @@ -1,84 +0,0 @@ -ReLaunch - filemanager / launcher for Nook Simple Touch. - -This is a simple filenamager and/or launcher for Nook Simple Touch. It calls -predefined reader on file selection, In addition it has task manager, task killer, -application manager and file viewer/editor functionality. - -The tool is able to work in two modes: - -1. Application mode -=================== -When ReLaunch is invoked from other launcher (technically speaking when it -invoked using main intent - android.intent.action.MAIN) it works in application mode. - -1.1 filemanager ---------------- -You see a directory structure, you can walk on it. Tap on directory name to go into -the directory, tap on ".." labeled line to go one directory up. - -1.2 on-file actions, single tap -------------------------------- -When you tap on regular file (not a directory) the ReLaunch may perform a few actions, depending -on you settings (see 1.4 for settings details) - -- call explicit package or create intent for that file if such action is defined in - Settings->Associations screen -- for .apk file - install it -- for any other file - open viewer (if file is small enough, see 1.4). Note - that editor can be opened from the viewer -- do nothing if file is too big for viewer and association for that file not found - -1.3 on-file actions, long tap ------------------------------ -On long tap context menu is opened. The file can be added to favorites, marked as read (we -are speaking about ebooks, isn't it?) or removed (with confirmations, see 1.4). -Note that directories can be removed too, even recursively. Be careful! - -1.4 settings (first from left button on top panel) --------------------------------------------------- -Some application-wide settings. Pay attention to "Filter settings" and "Association". - -Filter settings defines which files are visible in file manager. If you define some rules there do not -forget to switch on "Filter result" checkbox in general settings section. - -Association defines action which performs on file tap (according to file's extension) - -1.5 search (second from left button on top panel ------------------------------------------------- -You can search files (books) from any root by some patterns. Note "Show all books" button. By pressing -it you see all files with known extension (see 1.4 associations). - -1.6 last opened files list (third from left button on top panel) ----------------------------------------------------------------- -Each file opened by ReLaunch remembered in last opened files (LIFO order). - -1.7 favorites list (fourth from left button on top panel --------------------------------------------------------- -You can manage favorites list by adding / removing books to it. - -1.8 about (fifth from left button on top panel) ------------------------------------------------ -Application info - - -2. Launcher mode -================ -When ReLanuch is invoked by pressing "Home" (in a NookSimpleTouch case by SoftKey -"home" button), or by pressing "Nook button - > Shop" or "Nook button - > Library" it -works in launcher mode. In that mode it has all standard launcher functionality (task -manager / application manager) in addition to application mode possibilities described above. - -Launcher mode functionality: -- Task manager (tap on memory status, first left bottom button) -- Last used applications (second left bottom button) -- All applications (third left bottom button) - You can launch application by taping on it, or uninstall it by - long tap (context menu opened) -- Favorites applications (fourth left bottom button) -- Battery status (tap on battery status, fifth left bottom button) - - -Notes -===== -Note 1: I build it in debug mode using eclipse. Do not forget to copy -debug.keystore to ~/.android in order to be compatible with old version diff --git a/README.md b/README.md new file mode 100644 index 0000000..60ce817 --- /dev/null +++ b/README.md @@ -0,0 +1,258 @@ +# ReLaunchX - filemanager / launcher for ONYX Boox Max + +ReLaunchX is a versatile reading programs launcher and system-wide shell for Onyx Boox Max. It is a continuation of ReLaunch 1.3.8 made for Nook Simple Touch (also supported by Sony PRS-T1). +It is assumed that the user library is organized in an ordered structure of folders and files have names of books that match their names. +ReLaunchX supports flexible configuration of many on-screen buttons for quick access to certain features of the program and run third party applications. + +Non-obvious possibilities: +* Some functions of the program available only with run as a desktop shell for system. +* Some functions require a device with root-access, or only implemented for Nook Simple Touch (you will receive appropriate notice). +* On-screen scrolling buttons support double click to navigate to the specified number of percents in list and long-click to quickly move to the end (beginning) of the file list. This feature often will not work properly, be careful (you need to enable it in settings). +* If you open with the button, for example, the second-to-read book, it will be after the opening of the first. Thus, you will start in round fashion two (three, etc., depending on the configuration), the last-readed books. + +Note: +I aim to keep compatibility with previously supported devices however the only device on which I can run/debug the app is Onyx Boox Max as of today hence I decided to rename/rebrand the product in order to not cause any confusion. + +# The tool is able to work in two modes: + +### Application mode +When ReLaunch is invoked from other launcher (technically speaking when it invoked using main intent - android.intent.action.MAIN) it works in application mode. + +1. filemanager +You see a directory structure, you can walk on it. Tap on directory name to go into the directory, tap on ".." labeled line to go one directory up. + +2. on-file actions, single tap +When you tap on regular file (not a directory) the ReLaunch may perform a few actions, depending on you settings (see 4.) + * call explicit package or create intent for that file if such action is defined in Settings->Associations screen + * for .apk file - install it + * for any other file - open viewer (if file is small enough, see 4.). Note that editor can be opened from the viewer + * do nothing if file is too big for viewer and association for that file not found + +3. on-file actions, long tap +On long tap context menu is opened. The file can be added to favorites, marked as read (we are speaking about ebooks, isn't it?) or removed (with confirmations, see 4.). +Note that directories can be removed too, even recursively. Be careful! + +4. settings (first from left button on top panel) +Some application-wide settings. Pay attention to "Filter settings" and "Association". +Filter settings defines which files are visible in file manager. If you define some rules there do not forget to switch on "Filter result" checkbox in general settings section. +Association defines action which performs on file tap (according to file's extension) + +5. search (second from left button on top panel +You can search files (books) from any root by some patterns. Note "Show all books" button. By pressing it you see all files with known extension (see 4.). + +6. last opened files list (third from left button on top panel) +Each file opened by ReLaunch remembered in last opened files (LIFO order). + +7. favorites list (fourth from left button on top panel +You can manage favorites list by adding / removing books to it. + +8. about (fifth from left button on top panel) +Application info + +### Launcher mode +When ReLanuch is invoked by pressing "Home" (in a NookSimpleTouch case by SoftKey "home" button), or by pressing "Nook button - > Shop" or "Nook button - > Library" it works in launcher mode. In that mode it has all standard launcher functionality (task manager / application manager) in addition to application mode possibilities described above. + +Launcher mode functionality: +* Task manager (tap on memory status, first left bottom button) +* Last used applications (second left bottom button) +* All applications (third left bottom button) + You can launch application by taping on it, or uninstall it by + long tap (context menu opened) +* Favorites applications (fourth left bottom button) +* Battery status (tap on battery status, fifth left bottom button) + + +# CREDITS +* [ReLaunch project](https://github.com/yiselieren/ReLaunch) +* [CoolReader Engine project](http://sourceforge.net/projects/crengine/) (Eink support code) +* [Android Asset Studio](https://romannurik.github.io/AndroidAssetStudio/index.html) (icons) +* [DefaultIcon](http://www.defaulticon.com/) (icons) +* [Interactivemania](http://www.interactivemania.com/) (icon pack) + + +# CHANGELOG +* 2.1.3 + * Add possibility to remove item from recent list +* 2.1.2 + * Fix off-by-one-line navigation bug on PgUp button action. Now PgUp should return to exactly the same view as before PgDn. +* 2.1.1 + * Fix Go Up button animation. + * Fix txt directory icons. + * Fix PgUp / PgDn scrolling. +* 2.1.0 + * UI improvement: detection of optimal number of columns based on text size and display width. + * Hidden items and filtered items icons and easy manipulation by long press on Upper Dir button. +* 2.0.2 + * Fix build for Nook Simple Touch. Reverting to gradle 2.3.1 as gradle 3.0.1 auto uplift project minimum supported platform to Gingerbread. +* 2.0.1 + * Fix app settings compatibility with 1.x.x version + * Fix bug related with file name / file extension display. + * Adjust height of Current Dir bar. + * Fix bug related to favorites list display. + * Fix bug, file added to favorites was treated as directory. +* 2.0.0 + * Add support for Onyx Boox Max2 + * Rework of hdpi layout, size increase - it was very small + * UI speed improvements + * Rework of search screen. Add option for hidden items. + * New list mode: extensions instead of icons. Works faster. Icons can be enabled via settings. + * Version increased to 2.0 to stop confusion about original ReLaunch v.1.4.4 from some fork. +* 1.3.0 + * Adds Lock Screen. +* 1.2.3 + * Fixes for Boox Max on Android 4.4, WiFi button, SD card, compatibility list +* 1.2.2 + * Fix for crash on Boyue T63. Changed method to hide app window status bar. + * Added action to Settings button - Open Options Menu. Active on long tap by default. +* 1.2.1 + * Added setting to adjust buttons size (height). + * Fixed launcher mode: back button does not cause about to quit message. + * Simplified run mode: removed the setting about start mode. When started from another launcher the app always works in file manager mode. When started as launcher (at boot time or by pressing home button) it works as launcher. +* 1.2.0 + * Added nice graphical storage info view. + * Added preference "Advanced Settings > Appearance > Storage Info View", enabled adds the old filesystem details print to Storage info view. + * Fixed app hungs due to signal interrupted exec() by using Android API. + * Fixed text visibility on a few views (in few places text was white on white). +* 1.1.0 + * Added more file sorting options + * Added new setting for File Manager 'Show file details' + * Minor bugfixes +* 1.0.0 + * fixed partition size and free space view for Onyx Boox Max + * added Onyx Boox Max to supported devices + * changed name to ReLaunchX and icon to differentiate from Legacy ReLaunch app + * changed Application ID to not conflict with Legacy ReLaunch app + * imported legacy project to AndroidStudio + * forked ReLaunch 1.3.8 project + + +## Legacy changelog from ReLaunch + +* 1.3.8 + * added file properties dialog + * rewritten book annotation dialog + * returned function "add to Start folders" +* 1.3.7 + * added annotation window for fb2/epub files + * Back button may be used for folder navigation + * Start Folder, selected from context menu, replaces the old ones + * single line output mode for filenames + * fixed bug, then longpress event fired after doubletap +* 1.3.6 + * updated preferences screen for SONY PRS-T1 + * new option \"Add start folder\" in context menu + * new options for double and long taps on "Favorite applications" button + * disabled fullscreen mode in Preferences activity + * fixed bug with symbol # in file names + * tunable number of columns of All and Favorite applications + * added new variable %f to book name template +* 1.3.5 + * new appearance of preference screen + * added support for Sony PRS-T1 buttons + * added new file associations + * fixed bug with second line of book title disappearance + * added options for clear Favorites and Last opened lists +* 1.3.4 + * showing the book title in two lines + * database cleanup function implemented + * added items separator to files list + * fixed font size for SONY-PRS-T1 in preferences screen + * fixed rename file from tags with a template with line break + * fixed sort order in "Show titles" mode +* 1.3.3 + * interface is partially adapted for SONY-PRS-T1 + * save/restore settings function implemented + * show book titles in Favorites and Last recent opened lists + * a new mechanism of context menu implementation + * fixed bug with battery status intent reciever + * fixed bug of incorrect book series sorting + * fixed some minor bugs +* 1.3.2 + * almost fully implemented file operations (create, rename, copy, move file and folders) + * book title pattern changed + * added context menu item [Rename from fb2/epub tags] + * added saving current position in the directory between calls bookreaders + * fixed sorting in book titles mode +* 1.3.1 + * Option "Show hidden files" added to preferences + * Copy/move file functions added to context menu + * Show book titles functionality implemented for .fb2 and .epub files +* 1.3.0 + * source code cleaning and formatting + * fixed filtering on directories, now not under filtering + * some fixes in search (strange behavior) + * quick scroll in "results screens" fixes + * preferences "save dialog" only after changing something + * added ability configure icon size + * added on-screen scroll buttons for preferences + * added ability to disable (buggy) percentage scroll on Nook + * added extended functionality to Last Used, Favorites and Settings buttons + * added Setup WiFi button to advanced screen + * Advanced, Memory, Battery buttons now configurable + * Full new icons and some layout changes - in original NOOK look and feel. + * Scroll by on-screen buttons changed to satisfy Sony users. + * Lock functionality in Advanced screen. + * some changes in Home button configuration. + * simplify buttons on Preferences screen. + * force screen orientation change (configurable). + * Some fixes in power adapter show when attached. + * Configurable File Manager (now implemented deletion only, sorry) menu items (user can disable). + * Configurable hiding of known (via associations) file extensions (user can enable). + * Configurable hiding of known (via home dirs) parts of directories names (user can enable). + * Fixes in context menu creation for empty dir and leaking of mount sdcard broadcast receiver. +* 1.2.10 + * skipped due quick development +* 1.2.9 + * Home icon changed. + * Spanish translation added. +* 1.2.8 + * Added USB or AC adapter connection information. + * Redone support for Eink Nook display. + * Configurable multicolumn output. + * Close Fav, Lru and so on windows after start reader (configurable). + * Font size for files and directory names (configurable). + * User may have now many home folders. + * User may disable to go up from home folders. + * Smart configurable Home button with distinct reaction to tap, double tap and long tap introduced. + * Fixes: "scroll buttons" sometimes not working; invocation dir from favorites and search results, now shown in main window; search results representation when search from root. +* 1.2.7 + * Preferences Light Theme for Sony reader and mobiles. + * Application and readers invocation code fixes. + * Small layout and visual fixes. +* 1.2.6 + * Source code and resources reformatted, caused by i18n. + * Russian translation. + * WiFi signal strength receive fixed, now with dBm level and "classic" visual output. + * Application and readers detection and invocation code rewritten, many bugfixes. + * Fully redesigned to original White NOOK ST "look and feel". + * Startup as launcher at boot fixes. + * History supporting fixes. +* 1.2.5 + * Source code cleaned, now compiled without warnings. + * Source code prepared to i18n. + * Reading Lists (i.e. FAVs, LRUs) with full UTF8 support. + * Writing Lists (i.e. FAVs, LRUs) now is more frequent. + * Added "Power Off" functionality (in complement to "Reboot") and rewriting implementation. +* 1.2.4 + * Sony PRS-T1 support is added, some layout changes. + * Optional return to main window after application starts from "All Applications" window. +* 1.2.3 + * Context menu items 'Open with ...' and 'Create intent ...' added. Note that these items can be disabled via configuration settings. + * Search root can be comma separated directories list as well as a single directory. +* 1.2.2 + * All configured networks now are present in advanced screen. +* 1.2.1 + * New buttons: scroll up/down by big steps. Note that the step length is configurable. + * New advanced information screen (marked with '#' character). +* 1.2.0 + * New directory navigation, visible scrollbar (see settings). + * gl16 mode (eInk refresh mode) may be set now via settings. +* 1.1.3 + * Check HW and warn if it isn\'t NookSimpleTouch. +* 1.1.2 + * Associations settings allows now to configure explicit applications invocation as well as general intent creation. + * Obsolete 'how to call readers' setting removed. +* 1.1.1 + * New Cancel/Revert buttons in settings screen. +* 1.1.0 + * Task manager / battery manager - just tap on memory or battery status (bottom of the main screen, launcher mode only). diff --git a/ReLaunchX.iml b/ReLaunchX.iml new file mode 100644 index 0000000..429ba3c --- /dev/null +++ b/ReLaunchX.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TODO b/TODO index 0a3cec0..28d7c87 100644 --- a/TODO +++ b/TODO @@ -1,3 +1,19 @@ +=============== +== ReLaunchX == +=============== +- connect to Callibre server +- add cloud storage support +- (DONE)fix or add preference setting for full screen mode with Android OS toolbar +- (DONE)fix blank screen (screen not refreshed until tapped) on startup, happens on Onyx Boox Max +- (DONE)fix file system space info in Advanced view hang (currently disabled to prevent app misbehavior) + +DONE +- (DONE) fixed partition size and free space view for Onyx Boox Max +- (DONE) upgrade project from Eclipse to AndroidStudio + +============== +== ReLaunch == +============== gamba69@gmail.com: I left the project for an indefinite period... sorry. ========== diff --git a/app/app.iml b/app/app.iml new file mode 100644 index 0000000..d10d6e1 --- /dev/null +++ b/app/app.iml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..48d0bb5 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) + buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION + defaultConfig { + applicationId 'com.gacode.relaunchx' + minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION) + targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION) + versionCode 200103000 + versionName '2.1.3' + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + debug { + jniDebuggable true + } + } + productFlavors { + } + lintOptions { + disable 'MissingTranslation' + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + compile project(':libs:ebookparser') +} diff --git a/AndroidManifest.xml b/app/src/main/AndroidManifest.xml similarity index 90% rename from AndroidManifest.xml rename to app/src/main/AndroidManifest.xml index 23a74cb..381122f 100644 --- a/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,17 +1,21 @@ - + package="com.gacode.relaunchx" > - - + - - + + + + + + - + + + diff --git a/app/src/main/java/com/gacode/relaunchx/Advanced.java b/app/src/main/java/com/gacode/relaunchx/Advanced.java new file mode 100644 index 0000000..71ebf9d --- /dev/null +++ b/app/src/main/java/com/gacode/relaunchx/Advanced.java @@ -0,0 +1,753 @@ +package com.gacode.relaunchx; + +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.graphics.Typeface; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.SpannableString; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; +import android.widget.AbsListView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import java.text.DecimalFormat; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class Advanced extends Activity { + final static String TAG = "Advanced"; + + SharedPreferences prefs; + ReLaunchApp app; + Button rebootBtn; + Button powerOffBtn; + WebView infoPanelView; + boolean addSView = true; + + WifiManager wfm; + Button wifiOnOff; + Button wifiScan; + List wifiNetworks = new ArrayList(); + WiFiAdapter adapter; + ListView lv_wifi; + IntentFilter i1; + IntentFilter i2; + BroadcastReceiver b1; + BroadcastReceiver b2; + String connectedSSID; + + private void setEinkController() { + if (prefs != null) { + Integer einkUpdateMode = 1; + try { + einkUpdateMode = Integer.parseInt(prefs.getString( + "einkUpdateMode", "1")); + } catch (Exception e) { + einkUpdateMode = 1; + } + if (einkUpdateMode < -1 || einkUpdateMode > 2) + einkUpdateMode = 1; + if (einkUpdateMode >= 0) { + EinkScreen.UpdateMode = einkUpdateMode; + + Integer einkUpdateInterval = 10; + try { + einkUpdateInterval = Integer.parseInt(prefs.getString( + "einkUpdateInterval", "10")); + } catch (Exception e) { + einkUpdateInterval = 10; + } + if (einkUpdateInterval < 0 || einkUpdateInterval > 100) + einkUpdateInterval = 10; + EinkScreen.UpdateModeInterval = einkUpdateInterval; + + EinkScreen.PrepareController(null, false); + } + } + } + + static class NetInfo { + static int unknownLevel = -5000; + String SSID; + String extra; + int level; + int netId; + boolean inrange; + boolean configured; + + NetInfo(String s, int id, boolean in, boolean conf) { + SSID = s; + extra = ""; + level = unknownLevel; + netId = id; + inrange = in; + configured = conf; + } + + NetInfo(String s, boolean in, boolean conf) { + SSID = s; + extra = ""; + level = unknownLevel; + netId = 0; + inrange = in; + configured = conf; + } + + NetInfo(String s, String e, int id, boolean in, boolean conf) { + SSID = s; + extra = e; + level = unknownLevel; + netId = id; + inrange = in; + configured = conf; + } + + NetInfo(String s, String e, boolean in, boolean conf) { + SSID = s; + extra = e; + level = unknownLevel; + netId = 0; + inrange = in; + configured = conf; + } + } + + public class NetInfoComparator implements java.util.Comparator { + public int compare(NetInfo o1, NetInfo o2) { + if (connectedSSID != null && connectedSSID.equals(o1.SSID)) { + return -1; + } + if (connectedSSID != null && connectedSSID.equals(o2.SSID)) { + return 1; + } + if (o1.inrange && !o2.inrange) + return -1; + if (!o1.inrange && o2.inrange) + return 1; + if (o1.level < o2.level) + return 1; + if (o1.level > o2.level) + return -1; + return o1.SSID.compareToIgnoreCase(o2.SSID); + } + } + + static class ViewHolder { + TextView tv1; + TextView tv2; + TextView tv3; + ImageView iv; + } + + class WiFiAdapter extends BaseAdapter { + final Context cntx; + + WiFiAdapter(Context context) { + cntx = context; + } + + public int getCount() { + return wifiNetworks.size(); + } + + public Object getItem(int position) { + return wifiNetworks.get(position); + } + + public long getItemId(int position) { + return 0; + } + + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder holder; + View v = convertView; + if (v == null) { + LayoutInflater vi = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + v = vi.inflate(R.layout.adv_wifi_item, null); + if (v == null) { + return null; + } + holder = new ViewHolder(); + holder.tv1 = (TextView) v.findViewById(R.id.wf_ssid); + holder.tv2 = (TextView) v.findViewById(R.id.wf_capabilities); + holder.tv3 = (TextView) v.findViewById(R.id.wf_other); + holder.iv = (ImageView) v.findViewById(R.id.wf_icon); + v.setTag(holder); + } else { + holder = (ViewHolder) v.getTag(); + } + TextView tv1 = holder.tv1; + TextView tv2 = holder.tv2; + TextView tv3 = holder.tv3; + ImageView iv = holder.iv; + final WifiInfo winfo = wfm.getConnectionInfo(); + final NetInfo item = wifiNetworks.get(position); + if (item != null) { + int backgroundColor; + int textColor; + if (item.inrange && item.configured) { + backgroundColor = getResources().getColor(R.color.file_reading_bg); + textColor = getResources().getColor(R.color.file_reading_fg); + iv.setImageDrawable(getResources().getDrawable(R.drawable.file_ok)); + } else { + backgroundColor = getResources().getColor(R.color.file_finished_bg); + textColor = getResources().getColor(R.color.file_finished_fg); + iv.setImageDrawable(getResources().getDrawable(R.drawable.file_notok)); + } + tv1.setBackgroundColor(backgroundColor); + tv1.setTextColor(textColor); + tv2.setBackgroundColor(backgroundColor); + tv2.setTextColor(textColor); + tv3.setBackgroundColor(backgroundColor); + tv3.setTextColor(textColor); + + if (item.SSID.equals(winfo.getSSID())) { + SpannableString s1 = new SpannableString(item.SSID); + s1.setSpan(Typeface.BOLD, 0, item.SSID.length(), 0); + tv1.setText(s1); + if (item.extra.equals("")) { + tv2.setText(""); + } else { + SpannableString s2 = new SpannableString(item.extra); + s2.setSpan(Typeface.BOLD, 0, item.extra.length(), 0); + tv2.setText(s2); + } + int ipAddress = winfo.getIpAddress(); + // "Connected, IP: %d.%d.%d.%d" + String s = String.format( + getResources().getString( + R.string.jv_advanced_connected) + + " %d.%d.%d.%d", (ipAddress & 0xff), + (ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff), + (ipAddress >> 24 & 0xff)); + int sl1 = s.length(); + // ", Level: " + s += ", " + + getResources().getString( + R.string.jv_advanced_level) + " " + + item.level + "dBm " + levelToString(item.level); + SpannableString s3 = new SpannableString(s); + s3.setSpan(Typeface.BOLD, 0, sl1, 0); + tv3.setText(s3); + } else { + SpannableString s1 = new SpannableString(item.SSID); + s1.setSpan(Typeface.BOLD, 0, item.SSID.length(), 0); + tv1.setText(s1); + tv2.setText(item.extra); + String s; + if (item.inrange) { + // "Level: " + s = getResources() + .getString(R.string.jv_advanced_level) + + " " + + item.level + + "dBm " + + levelToString(item.level); + } else { + // "Not in range" + s = getResources().getString( + R.string.jv_advanced_notrange); + } + if (!item.configured) { + // ", not configured" + s += ", " + + getResources().getString( + R.string.jv_advanced_not_configured); + } + tv3.setText(s); + } + } + return v; + } + } + + private String levelToString(int level) { + if (level >= -56) + return "[\u25A0\u25A0\u25A0\u25A0\u25A0]"; + if (level >= -63) + return "[\u25A0\u25A0\u25A0\u25A0\u25A1]"; + if (level >= -70) + return "[\u25A0\u25A0\u25A0\u25A1\u25A1]"; + if (level >= -77) + return "[\u25A0\u25A0\u25A1\u25A1\u25A1]"; + if (level >= -84) + return "[\u25A0\u25A1\u25A1\u25A1\u25A1]"; + return "[\u25A1\u25A1\u25A1\u25A1\u25A1]"; + } + + private List readScanResults(WifiManager w) { + List rc = new ArrayList(); + List rc1 = w.getScanResults(); + List rc2 = w.getConfiguredNetworks(); + if (rc2 == null) + rc2 = new ArrayList(); + + connectedSSID = w.getConnectionInfo().getSSID(); + + if (rc1 == null) { + // No scan results - just copy configured networks to returned value + for (WifiConfiguration wc : rc2) { + rc.add(new NetInfo(wc.SSID, wc.networkId, false, true)); + } + Collections.sort(rc, new NetInfoComparator()); + return rc; + } + + // Merge uniq scanresult items with configured network info + for (ScanResult s : rc1) { + boolean alreadyHere = false; + for (NetInfo s1 : rc) { + if (s1.SSID.equals(s.SSID)) { + alreadyHere = true; + s1.level = s.level; + break; + } + } + if (!alreadyHere) { + boolean in = false; + for (WifiConfiguration wc : rc2) { + String ssid = wc.SSID; + if (ssid.startsWith("\"") && ssid.endsWith("\"")) { + ssid = ssid.substring(1, ssid.length() - 1); + } + if (ssid.equals(s.SSID)) { + rc.add(new NetInfo(ssid, s.capabilities, wc.networkId, + true, true)); + rc.get(rc.size() - 1).level = s.level; + in = true; + break; + } + } + if (!in) { + // In range but not configured + rc.add(new NetInfo(s.SSID, s.capabilities, true, false)); + } + rc.get(rc.size() - 1).level = s.level; + } + } + + // Add confiured but not active networks + for (WifiConfiguration wc : rc2) { + String ssid = wc.SSID; + if (ssid.startsWith("\"") && ssid.endsWith("\"")) { + ssid = ssid.substring(1, ssid.length() - 1); + } + boolean alreadyHere = false; + for (NetInfo s : rc) { + if (s.SSID.equals(ssid)) { + alreadyHere = true; + break; + } + } + if (!alreadyHere) { + rc.add(new NetInfo(ssid, false, true)); + } + } + Collections.sort(rc, new NetInfoComparator()); + return rc; + } + + private void updateWiFiInfo() { + wifiOnOff.setEnabled(true); + if (wfm.isWifiEnabled()) { + // "Turn WiFi off" + wifiOnOff.setText(getResources().getString( + R.string.jv_advanced_turn_wifi_off)); + wifiOnOff.setCompoundDrawablesWithIntrinsicBounds(getResources() + .getDrawable(R.drawable.wifi_off), getResources() + .getDrawable(R.drawable.ci_wifi), getResources() + .getDrawable(R.drawable.wifi_off), null); + wifiOnOff.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + try { + wfm.setWifiEnabled(false); + // "Turning WiFi off" + wifiOnOff.setText(getResources().getString( + R.string.jv_advanced_turning_wifi_off)); + wifiOnOff.setEnabled(false); + } catch (SecurityException e) { + e.printStackTrace(); + } + } + }); + wifiNetworks = readScanResults(wfm); + setEinkController(); + adapter.notifyDataSetChanged(); + wifiScan.setEnabled(true); + } else { + // "Turn WiFi on" + wifiOnOff.setText(getResources().getString( + R.string.jv_advanced_turn_wifi_on)); + wifiOnOff.setCompoundDrawablesWithIntrinsicBounds(getResources() + .getDrawable(R.drawable.wifi_on), getResources() + .getDrawable(R.drawable.ci_wifi), getResources() + .getDrawable(R.drawable.wifi_on), null); + wifiOnOff.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + try { + wfm.setWifiEnabled(true); + // "Turning WiFi on" + wifiOnOff.setText(getResources().getString( + R.string.jv_advanced_turning_wifi_on)); + wifiOnOff.setEnabled(false); + } catch (SecurityException e) { + e.printStackTrace(); + } + } + }); + wifiNetworks.clear(); + setEinkController(); + adapter.notifyDataSetChanged(); + wifiScan.setEnabled(false); + } + } + + public String getStorageUsageDetailedInfo() { + List fileSystemsToSkip = Arrays.asList( + getResources().getStringArray(R.array.filesystems_to_ignore)); + List fsInfo = FileSystem.getFilesytemInfo(fileSystemsToSkip); + StringBuilder sb = new StringBuilder() + .append("") + .append("") + .append(""); + for (FileSystem.MountInfo i : fsInfo) { + sb.append("") + .append("") + .append(""); + } + sb.append("
") + .append(getResources().getString(R.string.jv_advanced_mount_mountpoint)) + .append("") + .append(getResources().getString(R.string.jv_advanced_mount_FS)) + .append("") + .append(getResources().getString(R.string.jv_advanced_mount_total)) + .append("") + .append(getResources().getString(R.string.jv_advanced_mount_used)) + .append("") + .append(getResources().getString(R.string.jv_advanced_mount_free)) + .append("") + .append(getResources().getString(R.string.jv_advanced_mount_rorw)) + .append("
") + .append(i.mpoint) + .append("") + .append(i.fs) + .append("") + .append(FileSystem.bytesToString(i.total)) + .append("") + .append(FileSystem.bytesToString(i.used)) + .append("") + .append(FileSystem.bytesToString(i.free)) + .append("") + .append((i.ro ? getResources().getString(R.string.jv_advanced_mount_ro) + : getResources().getString(R.string.jv_advanced_mount_rw))) + .append("
"); + return sb.toString(); + } + + private String getStorageUsageInfo() { + FileSystem.MountInfo primaryStorage = FileSystem.getExternalStorageInfo(); + FileSystem.MountInfo secondaryStorage = FileSystem.getSecondaryStorageInfo(); + DecimalFormat df = new DecimalFormat("#"); + String primaryStorageUsage = "0"; + String secondaryStorageUsage = "0"; + if (primaryStorage != null) { + primaryStorageUsage = df.format(100 * ((double)primaryStorage.used / primaryStorage.total)); + } + if (secondaryStorage != null) { + secondaryStorageUsage = df.format(100 * ((double)secondaryStorage.used / secondaryStorage.total)); + } + + Display display = getWindowManager().getDefaultDisplay(); + DisplayMetrics displayMetrics = new DisplayMetrics(); + display.getMetrics(displayMetrics); + + //On physically bigger screens I want to make the bars proportionally thicker + int barHeight = (int)(display.getHeight() / displayMetrics.density)/32; + int fontSize = 100 + (int)((display.getWidth() / displayMetrics.density)/20 - 20); + Resources r = getResources(); + StringBuilder sb = new StringBuilder() + .append("") + + .append("

" + r.getString(R.string.jv_advanced_mount_storage) +"

") + .append(""); + + if (primaryStorage != null) { + String headline = MessageFormat.format("", + "1:", + r.getString(R.string.jv_advanced_mount_total), FileSystem.bytesToString(primaryStorage.total), + r.getString(R.string.jv_advanced_mount_used), FileSystem.bytesToString(primaryStorage.used), + r.getString(R.string.jv_advanced_mount_free), FileSystem.bytesToString(primaryStorage.free)); + sb.append("") + .append(headline) + .append("") + .append("") + .append("") + .append(""); + } + + if (secondaryStorage != null) { + String headline = MessageFormat.format("", + "2:", + r.getString(R.string.jv_advanced_mount_total), FileSystem.bytesToString(secondaryStorage.total), + r.getString(R.string.jv_advanced_mount_used), FileSystem.bytesToString(secondaryStorage.used), + r.getString(R.string.jv_advanced_mount_free), FileSystem.bytesToString(secondaryStorage.free)); + sb.append("") + .append(headline) + .append("") + .append("") + .append("") + .append(""); + } + sb.append("
{0}{1} {2}{3} {4}{5} {6}
{0}{1} {2}{3} {4}{5} {6}
"); + + if (prefs.getBoolean("filesystemDetails", false)) { + return sb.toString() + "
" + getStorageUsageDetailedInfo(); + } + + return sb.toString(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + + setEinkController(); + + app = ((ReLaunchApp) getApplicationContext()); + if(app == null ) { + finish(); + } + app.setFullScreenIfNecessary(this); + setContentView(R.layout.advanced_layout); + + // "Advanced functions, info, etc." + ((TextView) findViewById(R.id.results_title)).setText(getResources() + .getString(R.string.jv_advanced_title)); + findViewById(R.id.results_btn) + .setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + finish(); + } + }); + + // Wifi info + lv_wifi = (ListView) findViewById(R.id.wifi_lv); + adapter = new WiFiAdapter(this); + lv_wifi.setAdapter(adapter); + + if (prefs.getBoolean("customScroll", app.customScrollDef)) { + int scrollW; + try { + scrollW = Integer + .parseInt(prefs.getString("scrollWidth", "25")); + } catch (NumberFormatException e) { + scrollW = 25; + } + + if (addSView) { + LinearLayout ll = (LinearLayout) findViewById(R.id.wifi_lv_layout); + final SView sv = new SView(getBaseContext()); + LinearLayout.LayoutParams pars = new LinearLayout.LayoutParams( + scrollW, ViewGroup.LayoutParams.FILL_PARENT, 1f); + sv.setLayoutParams(pars); + ll.addView(sv); + lv_wifi.setOnScrollListener(new AbsListView.OnScrollListener() { + public void onScroll(AbsListView view, + int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + sv.total = totalItemCount; + sv.count = visibleItemCount; + sv.first = firstVisibleItem; + setEinkController(); + sv.invalidate(); + } + + public void onScrollStateChanged(AbsListView view, + int scrollState) { + } + }); + addSView = false; + } + } else { + lv_wifi.setOnScrollListener(new AbsListView.OnScrollListener() { + public void onScroll(AbsListView view, int firstVisibleItem, + int visibleItemCount, int totalItemCount) { + setEinkController(); + } + + public void onScrollStateChanged(AbsListView view, + int scrollState) { + } + }); + } + + // Wifi + wfm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); + wifiNetworks = readScanResults(wfm); + + wifiScan = (Button) findViewById(R.id.wifi_scan_btn); + wifiScan.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + wfm.startScan(); + wifiScan.setEnabled(false); + } + }); + + // Receive broadcast when scan results are available + i1 = new IntentFilter(); + i1.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); + b1 = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + wifiNetworks = readScanResults(wfm); + wifiScan.setEnabled(true); + adapter.notifyDataSetChanged(); + } + }; + registerReceiver(b1, i1); + + // Receive broadcast when WiFi status changed + i2 = new IntentFilter(); + i2.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); + i2.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); + i2.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION); + i2.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); + i2.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); + b2 = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + wifiNetworks = readScanResults(wfm); + wifiScan.setEnabled(true); + adapter.notifyDataSetChanged(); + updateWiFiInfo(); + } + }; + registerReceiver(b2, i2); + + wifiOnOff = (Button) findViewById(R.id.wifi_onoff_btn); + updateWiFiInfo(); + + Button wifiSetup = (Button) findViewById(R.id.wifi_setup_btn); + wifiSetup.setOnClickListener(new View.OnClickListener() { + + public void onClick(View v) { + if (DeviceInfo.EINK_SONY) { + final Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + // SONY PRS-Tx only! + final ComponentName cn = new ComponentName( + "com.sony.drbd.ebook.NetworkManagerSettings", + "com.sony.drbd.ebook.NetworkManagerSettings.NMWirelessSetting"); + intent.setComponent(cn); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } else if (DeviceInfo.EINK_NOOK) { + final Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + // NOOK ST only! + final ComponentName cn = new ComponentName( + "com.android.settings", + "com.android.settings.wifi.Settings_Wifi_Settings"); + intent.setComponent(cn); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } else { + final Intent intent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + } + }); + + // Lock button + final Activity parent = this; + Button lockBtn = (Button) findViewById(R.id.lock_btn); + lockBtn.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + if (PowerFunctions.actionLock(parent)) { + parent.finish(); + } + } + }); + + // Reboot button + rebootBtn = (Button) findViewById(R.id.reboot_btn); + rebootBtn.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + PowerFunctions.actionReboot(parent); + } + }); + + // Power Off button + powerOffBtn = (Button) findViewById(R.id.poweroff_btn); + powerOffBtn.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + PowerFunctions.actionPowerOff(parent); + } + }); + + // Web info view + infoPanelView = (WebView) findViewById(R.id.info_panel_web_view); + infoPanelView.loadDataWithBaseURL(null, getStorageUsageInfo(), "text/html", "utf-8", null); + + ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + } + + @Override + protected void onDestroy() { + unregisterReceiver(b1); + unregisterReceiver(b2); + super.onDestroy(); + } + + @Override + protected void onStop() { + super.onStop(); + } + + @Override + protected void onResume() { + super.onResume(); + setEinkController(); + app.generalOnResume(TAG, this); + } + +} diff --git a/src/com/harasoft/relaunch/AllApplications.java b/app/src/main/java/com/gacode/relaunchx/AllApplications.java similarity index 99% rename from src/com/harasoft/relaunch/AllApplications.java rename to app/src/main/java/com/gacode/relaunchx/AllApplications.java index 577f3ef..abe81c1 100644 --- a/src/com/harasoft/relaunch/AllApplications.java +++ b/app/src/main/java/com/gacode/relaunchx/AllApplications.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.util.ArrayList; import java.util.HashMap; @@ -359,6 +359,7 @@ public void onItemClick(AdapterView parent, View view, } }); ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); } @Override diff --git a/src/com/harasoft/relaunch/BooksBase.java b/app/src/main/java/com/gacode/relaunchx/BooksBase.java similarity index 71% rename from src/com/harasoft/relaunch/BooksBase.java rename to app/src/main/java/com/gacode/relaunchx/BooksBase.java index 71e477c..f6a4593 100644 --- a/src/com/harasoft/relaunch/BooksBase.java +++ b/app/src/main/java/com/gacode/relaunchx/BooksBase.java @@ -1,6 +1,7 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.ByteArrayOutputStream; +import java.io.File; import java.util.regex.Pattern; import ebook.EBook; import ebook.Person; @@ -9,6 +10,7 @@ import android.content.ContentValues; import android.content.Context; +import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; @@ -20,10 +22,6 @@ public class BooksBase { DbHelper dbHelper; public static SQLiteDatabase db; - private Pattern purgeBracketsPattern = Pattern.compile("\\[[\\s\\.\\-_]*\\]"); -// private Pattern purgeBracketsPattern = Pattern -// .compile("\\[[\\[\\]\\s\\.\\-_]*\\]"); - private class DbHelper extends SQLiteOpenHelper { final static int VERSION = 1; @@ -161,57 +159,6 @@ public EBook getBookByFileName(String fileName) { return book; } - public String getEbookName(String fileName, String format) { - EBook eBook; - String file = fileName.substring(fileName.lastIndexOf('/') + 1, - fileName.length()); - if ((!file.endsWith("fb2")) && (!file.endsWith("fb2.zip")) - && (!file.endsWith("epub"))) - return file; - eBook = getBookByFileName(fileName); - if (!eBook.isOk) { - Parser parser = new InstantParser(); - eBook = parser.parse(fileName); - if (eBook.isOk) { - if ((eBook.sequenceNumber != null) - && (eBook.sequenceNumber.length() == 1)) - eBook.sequenceNumber = "0" + eBook.sequenceNumber; - addBook(eBook); - } - } - if (eBook.isOk) { - String output = format; - if (eBook.authors.size() > 0) { - String author = ""; - if (eBook.authors.get(0).firstName != null) - author += eBook.authors.get(0).firstName; - if (eBook.authors.get(0).lastName != null) - author += " " + eBook.authors.get(0).lastName; - output = output.replace("%a", author); - } - if (eBook.title != null) - output = output.replace("%t", eBook.title); - if (eBook.sequenceName != null) - output = output.replace("%s", eBook.sequenceName); - else - output = output.replace("%s", ""); - if (eBook.sequenceNumber != null) - output = output.replace("%n", eBook.sequenceNumber); - else - output = output.replace("%n", ""); - output = output.replace("%f", fileName); - output = purgeBracketsPattern.matcher(output).replaceAll(""); - output = output.replace("[", ""); - output = output.replace("]", ""); - return output; - } else - return file; - } - - public String getEbookName(String dir, String file, String format) { - return getEbookName(dir + "/" + file, format); - } - public void resetDb() { db.execSQL("delete from BOOKS"); db.execSQL("delete from COVERS"); diff --git a/src/com/harasoft/relaunch/DeviceInfo.java b/app/src/main/java/com/gacode/relaunchx/DeviceInfo.java similarity index 56% rename from src/com/harasoft/relaunch/DeviceInfo.java rename to app/src/main/java/com/gacode/relaunchx/DeviceInfo.java index 7e27a36..ac0801b 100644 --- a/src/com/harasoft/relaunch/DeviceInfo.java +++ b/app/src/main/java/com/gacode/relaunchx/DeviceInfo.java @@ -1,13 +1,16 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; /** * originate from CoolReader * http://http://sourceforge.net/projects/crengine/ */ +import android.app.Application; import android.os.Build; import android.util.Log; +import java.io.File; + public class DeviceInfo { public final static String MANUFACTURER; @@ -23,6 +26,7 @@ public class DeviceInfo { public final static boolean SONY_NAVIGATION_KEYS; public final static boolean USE_CUSTOM_TOAST; public final static boolean AMOLED_SCREEN; + public final static boolean EINK_ONYX; static { MANUFACTURER = getBuildField("MANUFACTURER"); @@ -40,7 +44,9 @@ public class DeviceInfo { && DEVICE.toLowerCase().contentEquals("zoom2"); EINK_SONY = MANUFACTURER.toLowerCase().contentEquals("sony") && MODEL.contentEquals("PRS-T1"); - EINK_SCREEN = EINK_SONY || EINK_NOOK; // TODO: set to true for eink + EINK_ONYX = MANUFACTURER.toLowerCase().contentEquals("onyx") + && MODEL.contentEquals("max"); + EINK_SCREEN = EINK_SONY || EINK_NOOK || EINK_ONYX; // TODO: set to true for eink // devices like Nook Touch NOOK_NAVIGATION_KEYS = EINK_NOOK; // TODO: add autodetect @@ -52,6 +58,53 @@ public class DeviceInfo { USE_CUSTOM_TOAST = EINK_SCREEN; } + public static boolean isRooted() { + File isrooted = new File("/system/bin", "su"); + if (isrooted.exists()) { + return true; + } + + isrooted = new File("/system/xbin", "su"); + if (isrooted.exists()) { + return true; + } + + isrooted = new File ("/su/bin", "su"); + if (isrooted.exists()){ + return true; + } + + return false; + } + + public static boolean isCompatibleDevice(Application app) { + String[] allowedModels = app.getApplicationContext().getResources() + .getStringArray(R.array.allowed_models); + String[] allowedDevices = app.getApplicationContext().getResources() + .getStringArray(R.array.allowed_devices); + String[] allowedManufacts = app.getApplicationContext().getResources() + .getStringArray(R.array.allowed_manufacturers); + String[] allowedProducts = app.getApplicationContext().getResources() + .getStringArray(R.array.allowed_products); + + if (!checkField(allowedModels, Build.MODEL)) + return false; + if (!checkField(allowedDevices, Build.DEVICE)) + return false; + if (!checkField(allowedManufacts, Build.MANUFACTURER)) + return false; + if (!checkField(allowedProducts, Build.PRODUCT)) + return false; + return true; + } + + private static boolean checkField(String[] a, String f) { + for (int i = 0; i < a.length; i++) + if (a[i].equals("*") || a[i].equals(f)) + return true; + return false; + } + private static String getBuildField(String fieldName) { try { diff --git a/src/com/harasoft/relaunch/Editor.java b/app/src/main/java/com/gacode/relaunchx/Editor.java similarity index 95% rename from src/com/harasoft/relaunch/Editor.java rename to app/src/main/java/com/gacode/relaunchx/Editor.java index 610a22b..aee43dd 100644 --- a/src/com/harasoft/relaunch/Editor.java +++ b/app/src/main/java/com/gacode/relaunchx/Editor.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -71,7 +71,7 @@ private boolean saveChanges(String newBuf, final String fname) { // "Open failure" builder.setTitle(getResources().getString( R.string.jv_editor_openerr_title)); - // "Can't open file \"" + fname + "\" for writting" + // "Can't open file \"" + fullPathName + "\" for writting" builder.setMessage(getResources().getString( R.string.jv_editor_openerr_text1) + " \"" @@ -101,7 +101,7 @@ public void onClick(DialogInterface dialog, // "Write failure" builder.setTitle(getResources().getString( R.string.jv_editor_writerr_title)); - // "Can't write to file \"" + fname + "\"" + // "Can't write to file \"" + fullPathName + "\"" builder.setMessage(getResources().getString( R.string.jv_editor_writerr_text) + " \"" + fname + "\""); @@ -127,7 +127,7 @@ public void onClick(DialogInterface dialog, // "Close failure" builder.setTitle(getResources().getString( R.string.jv_editor_closerr_title)); - // "Can't close file \"" + fname + "\"" + // "Can't close file \"" + fullPathName + "\"" builder.setMessage(getResources().getString( R.string.jv_editor_closerr_text) + " \"" + fname + "\""); @@ -179,7 +179,7 @@ protected void onCreate(Bundle savedInstanceState) { // "File too big" builder.setTitle(getResources().getString( R.string.jv_editor_file_too_big)); - // "File \"" + fname + "\" is too big for editor (" + f.length() + + // "File \"" + fullPathName + "\" is too big for editor (" + f.length() + // " bytes)\n" // + "Maximal allowed size is " + app.editorMax + " bytes" builder.setMessage(getResources() @@ -276,6 +276,7 @@ public void onClick(DialogInterface dialog, rereadFile(fname, editTxt); } ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); } @Override diff --git a/src/com/harasoft/relaunch/EinkScreen.java b/app/src/main/java/com/gacode/relaunchx/EinkScreen.java similarity index 98% rename from src/com/harasoft/relaunch/EinkScreen.java rename to app/src/main/java/com/gacode/relaunchx/EinkScreen.java index e5e1581..126d025 100644 --- a/src/com/harasoft/relaunch/EinkScreen.java +++ b/app/src/main/java/com/gacode/relaunchx/EinkScreen.java @@ -1,11 +1,11 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; /** * originate from CoolReader * http://http://sourceforge.net/projects/crengine/ */ -import com.harasoft.relaunch.N2EpdController; +import com.gacode.relaunchx.N2EpdController; import android.view.View; public class EinkScreen { diff --git a/app/src/main/java/com/gacode/relaunchx/FileSystem.java b/app/src/main/java/com/gacode/relaunchx/FileSystem.java new file mode 100644 index 0000000..31ef50d --- /dev/null +++ b/app/src/main/java/com/gacode/relaunchx/FileSystem.java @@ -0,0 +1,217 @@ +package com.gacode.relaunchx; + +import android.os.Environment; +import android.os.StatFs; +import android.text.TextUtils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + + +public class FileSystem { + + public static class MountInfo { + String dev; + String mpoint; + String fs; + long total; + long used; + long free; + boolean ro; + } + + /** + * Read text file + * @param fname - file path + * @return file content + */ + private static List readTextFile(String fname) { + BufferedReader bufferedReader; + String line; + List returnCollection = new ArrayList(); + try { + bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(fname)), 1000); + } catch (FileNotFoundException e) { + return returnCollection; + } + + try { + while ((line = bufferedReader.readLine()) != null) { + returnCollection.add(line); + } + } catch (IOException e) { + return returnCollection; + } + finally { + try { + bufferedReader.close(); + } catch (IOException e) { + } + } + + return returnCollection; + } + + public static List getFilesytemInfo(List fileSystemsToSkip) { + ArrayList mountInfoList = new ArrayList(); + for (String line : readTextFile("/proc/mounts")) { + String[] fsMount = line.split("\\s+"); + if (fsMount.length < 4) { + continue; + } + String fileSystem = fsMount[2]; + String flagsString = fsMount[3]; + if (fileSystemsToSkip.contains(fileSystem)) { + continue; + } + MountInfo mountInfo = new MountInfo(); + mountInfo.dev = fsMount[0]; + mountInfo.mpoint = fsMount[1]; + mountInfo.fs = fileSystem; + String[] flags = flagsString.split(","); + for (String flag : flags) { + if (flag.equals("ro")) { + mountInfo.ro = true; + break; + } else if (flag.equals("rw")) { + mountInfo.ro = false; + break; + } + } + mountInfo.total = 0; + mountInfo.used = 0; + mountInfo.free = 0; + mountInfoList.add(mountInfo); + } + + for (MountInfo mountInfo : mountInfoList) { + try { + StatFs statFs = new StatFs(mountInfo.mpoint); + long total = ((long) statFs.getBlockCount() * (long) statFs.getBlockSize()); + long free = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize()); + mountInfo.used = total - free; + mountInfo.free = free; + mountInfo.total = total; + } catch (Exception e) { + e.printStackTrace(); + } + } + return mountInfoList; + } + + /** + * Convert bytes to x.x human readable string + * @param size in bytes + * @return x.x [GMK]B string + */ + public static String bytesToString(long size) + { + final long KB = 1 * 1024; + final long MB = KB * 1024; + final long GB = MB * 1024; + DecimalFormat df = new DecimalFormat("#.#"); + + if (size >= GB) return df.format((double)size / GB) + "GB"; + if (size >= MB) return df.format((double)size / MB) + "MB"; + if (size >= KB) return df.format((double)size / KB) + "KB"; + return df.format(size) + "B "; + } + + /** + * Get External storage info + * @return + */ + public static MountInfo getExternalStorageInfo() { + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + return null; + }; + try { + MountInfo mountInfo = new MountInfo(); + mountInfo.mpoint = Environment.getExternalStorageDirectory().getAbsolutePath(); + StatFs statFs = new StatFs(mountInfo.mpoint); + long total = ((long) statFs.getBlockCount() * (long) statFs.getBlockSize()); + long free = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize()); + mountInfo.used = total - free; + mountInfo.free = free; + mountInfo.total = total; + return mountInfo; + } catch (Exception e){ + e.printStackTrace(); + return null; + } + } + + /** + * Discover removable SD card storage directory + * @return + */ + private static File getRemovableStorage() { + final String value = System.getenv("SECONDARY_STORAGE"); + if (!TextUtils.isEmpty(value)) { + final String[] paths = value.split(":"); + for (String path : paths) { + File file = new File(path); + if (file.isDirectory() && path.toLowerCase().contains("sd")) { + return file; + } + } + } + + //Fallback to guessing, just check if there is anything like + // /mnt/extsd + // /mnt/extSdCard + // /mnt/ext_sd + + File mnt = new File("/mnt"); + if (mnt.isDirectory()) { + for (String dir : mnt.list()) { + if (dir.toLowerCase().contains("ext") && dir.toLowerCase().contains("sd")) { + return new File("/mnt/" + dir); + } + } + } + + File storage = new File("/storage"); + if (storage.isDirectory()) { + for (String dir : storage.list()) { + if (dir.toLowerCase().contains("ext") && dir.toLowerCase().contains("sd")) { + return new File("/storage/" + dir); + } + } + } + + return null; + } + + /** + * Get removable SD card storage info + * @return + */ + public static MountInfo getSecondaryStorageInfo() { + File sd = getRemovableStorage(); + if (sd == null) { + return null; + }; + try { + MountInfo mountInfo = new MountInfo(); + mountInfo.mpoint = sd.getAbsolutePath(); + StatFs statFs = new StatFs(mountInfo.mpoint); + long total = ((long) statFs.getBlockCount() * (long) statFs.getBlockSize()); + long free = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize()); + mountInfo.used = total - free; + mountInfo.free = free; + mountInfo.total = total; + return mountInfo; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/com/harasoft/relaunch/FiltersActivity.java b/app/src/main/java/com/gacode/relaunchx/FiltersActivity.java similarity index 97% rename from src/com/harasoft/relaunch/FiltersActivity.java rename to app/src/main/java/com/gacode/relaunchx/FiltersActivity.java index 1bd920f..6bc0c1b 100644 --- a/src/com/harasoft/relaunch/FiltersActivity.java +++ b/app/src/main/java/com/gacode/relaunchx/FiltersActivity.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.util.ArrayList; import java.util.HashMap; @@ -276,6 +276,8 @@ public void onClick(View v) { } }); ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutBottom)); } @Override diff --git a/src/com/harasoft/relaunch/Home.java b/app/src/main/java/com/gacode/relaunchx/Home.java similarity index 96% rename from src/com/harasoft/relaunch/Home.java rename to app/src/main/java/com/gacode/relaunchx/Home.java index 66241a1..b35dcc2 100644 --- a/src/com/harasoft/relaunch/Home.java +++ b/app/src/main/java/com/gacode/relaunchx/Home.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.app.Activity; import android.app.PendingIntent; diff --git a/src/com/harasoft/relaunch/Home1.java b/app/src/main/java/com/gacode/relaunchx/Home1.java similarity index 96% rename from src/com/harasoft/relaunch/Home1.java rename to app/src/main/java/com/gacode/relaunchx/Home1.java index e462d92..3f9d3eb 100644 --- a/src/com/harasoft/relaunch/Home1.java +++ b/app/src/main/java/com/gacode/relaunchx/Home1.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.app.Activity; import android.app.PendingIntent; diff --git a/src/com/harasoft/relaunch/Library.java b/app/src/main/java/com/gacode/relaunchx/Library.java similarity index 96% rename from src/com/harasoft/relaunch/Library.java rename to app/src/main/java/com/gacode/relaunchx/Library.java index fbeaf4c..476b4cf 100644 --- a/src/com/harasoft/relaunch/Library.java +++ b/app/src/main/java/com/gacode/relaunchx/Library.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.app.Activity; import android.app.PendingIntent; diff --git a/src/com/harasoft/relaunch/ListActions.java b/app/src/main/java/com/gacode/relaunchx/ListActions.java similarity index 91% rename from src/com/harasoft/relaunch/ListActions.java rename to app/src/main/java/com/gacode/relaunchx/ListActions.java index 1514cbb..ccabf84 100644 --- a/src/com/harasoft/relaunch/ListActions.java +++ b/app/src/main/java/com/gacode/relaunchx/ListActions.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.util.ArrayList; import java.util.Collections; @@ -30,15 +30,15 @@ private void createItemsArray() { if (!prefs.getBoolean("filterResults", false) || app.filterFile(n[0], n[1])) { HashMap item = new HashMap(); - item.put("dname", n[0]); - item.put("fname", n[1]); + item.put("directoryName", n[0]); + item.put("fullPathName", n[1]); if (n[1].equals(app.DIR_TAG)) { int ind = n[0].lastIndexOf('/'); if (ind == -1) { - item.put("fname", ""); + item.put("fullPathName", ""); } else { - item.put("fname", n[0].substring(ind + 1)); - item.put("dname", n[0].substring(0, ind)); + item.put("fullPathName", n[0].substring(ind + 1)); + item.put("directoryName", n[0].substring(0, ind)); } item.put("type", "dir"); } else @@ -115,9 +115,9 @@ public int compare(String a, String b) { final CharSequence[] lnames = new CharSequence[itemsArray.size()]; for (int i = 0; i < itemsArray.size(); i++) { HashMap item = itemsArray.get(i); - String fname = item.get("fname"); - String sname = item.get("fname"); - String dname = item.get("dname"); + String fname = item.get("fullPathName"); + String sname = item.get("fullPathName"); + String dname = item.get("directoryName"); // clean extension, if needed if (prefs.getBoolean("hideKnownExts", false)) { for (int j = 0; j < exts.size(); j++) { @@ -171,7 +171,7 @@ public void runItem(String listName, int position) { HashMap item = itemsArray.get(position); - String fullName = item.get("dname") + "/" + item.get("fname"); + String fullName = item.get("directoryName") + "/" + item.get("fullPathName"); if (item.get("type").equals("dir")) { Intent intent = new Intent(act, ReLaunch.class); intent.putExtra("dirviewer", false); @@ -182,14 +182,14 @@ public void runItem(String listName, int position) { intent.putExtra("library", ReLaunch.useLibrary); act.startActivityForResult(intent, ReLaunch.DIR_ACT); } else { - String fileName = item.get("fname"); + String fileName = item.get("fullPathName"); if (!app.specialAction(act, fullName)) { if (app.readerName(fileName).equals("Nope")) app.defaultAction(act, fullName); else { // Launch reader if (app.askIfAmbiguous) { - List rdrs = app.readerNames(item.get("fname")); + List rdrs = app.readerNames(item.get("fullPathName")); if (rdrs.size() < 1) return; else if (rdrs.size() == 1) diff --git a/app/src/main/java/com/gacode/relaunchx/LockScreen.java b/app/src/main/java/com/gacode/relaunchx/LockScreen.java new file mode 100644 index 0000000..f9d5a12 --- /dev/null +++ b/app/src/main/java/com/gacode/relaunchx/LockScreen.java @@ -0,0 +1,164 @@ +package com.gacode.relaunchx; + +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.media.AudioManager; +import android.media.Ringtone; +import android.media.RingtoneManager; +import android.media.ToneGenerator; +import android.net.Uri; +import android.os.Build; +import android.os.IBinder; +import android.os.SystemClock; +import android.preference.PreferenceManager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +public class LockScreen extends Service implements View.OnClickListener { + + private final String TAG = "ReLaunchX"; + public final static String ACTION_LOCK_SCREEN = "com.gacode.relaunch.ACTION_LOCK_SCREEN"; + public final int MAX_PASSWORD_LEN = 15; + + private LinearLayout lockView; + private WindowManager.LayoutParams lockViewParams; + private WindowManager windowManager; + private SharedPreferences prefs; + private String password; + private String lockPassword; + private TextView passwordView; + private boolean incorrectPassword; + private int retryCount; + private BroadcastReceiver screenReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + lockPassword = prefs.getString("lockPassword", ""); + if (lockPassword.length() > 0 && lockView == null) { + if (lockPassword.length() > MAX_PASSWORD_LEN) { + lockPassword = lockPassword.substring(0, MAX_PASSWORD_LEN); + } + displayLock(); + } + } + }; + + private void displayLock() { + password = ""; + retryCount = 3; + incorrectPassword = false; + + lockView = new LinearLayout(this); + windowManager.addView(lockView, lockViewParams); + ((LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE)).inflate(R.layout.lock_screen, lockView); + passwordView = (TextView)lockView.findViewById(R.id.passwordView); + lockView.findViewById(R.id.unlockPasswordButton).setOnClickListener(this); + lockView.findViewById(R.id.deletePasswordButton).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton0).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton1).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton2).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton3).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton4).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton5).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton6).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton7).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton8).setOnClickListener(this); + lockView.findViewById(R.id.passwordButton9).setOnClickListener(this); + +// try { +// ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 100); +// toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); +// } catch (Exception e) { +// e.printStackTrace(); +// } + } + + private void addDigit(String digit) { + if (password.length() < MAX_PASSWORD_LEN) { + passwordView.append("*"); + password += digit; + } + } + + private void delDigit() { + CharSequence passwdMask = passwordView.getText(); + if (passwdMask.length() > 0){ + passwdMask = passwdMask.subSequence(1, passwdMask.length()); + passwordView.setText(passwdMask); + password = password.substring(0, password.length() - 1); + } + } + + + @Override + public void onClick(View view) { + if (incorrectPassword) { + incorrectPassword = false; + passwordView.setText(""); + password = ""; + if (--retryCount <= 0) { + SystemClock.sleep(5000); + retryCount = 3; + } + } + switch (view.getId()) { + default: + addDigit((String)view.getTag()); + break; + + case R.id.deletePasswordButton: + delDigit(); + break; + + case R.id.unlockPasswordButton: + if(!lockPassword.equals(password)) { + passwordView.setText(getText(R.string.lock_screen_incorrect_passwd)); + incorrectPassword = true; + } else { + windowManager.removeView(lockView); + lockView = null; + } + break; + } + } + + @Override + public void onCreate() { + super.onCreate(); + + Log.i(TAG, "Create Lock Screen"); + + prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + IntentFilter bootCompleted = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); + registerReceiver(screenReceiver, bootCompleted); + + IntentFilter screenOffFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF); + registerReceiver(screenReceiver, screenOffFilter); + IntentFilter appLockFilter = new IntentFilter(ACTION_LOCK_SCREEN); + registerReceiver(screenReceiver, appLockFilter); + + windowManager = ((WindowManager) getSystemService(WINDOW_SERVICE)); + int lockViewFlags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD; + lockViewParams = new WindowManager.LayoutParams( + WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, lockViewFlags); + } + + @Override + public void onDestroy() { + unregisterReceiver(screenReceiver); + super.onDestroy(); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } +} diff --git a/src/com/harasoft/relaunch/Main.java b/app/src/main/java/com/gacode/relaunchx/Main.java similarity index 84% rename from src/com/harasoft/relaunch/Main.java rename to app/src/main/java/com/gacode/relaunchx/Main.java index 44aad42..3ecf5f3 100644 --- a/src/com/harasoft/relaunch/Main.java +++ b/app/src/main/java/com/gacode/relaunchx/Main.java @@ -1,9 +1,11 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; +import java.lang.System; +import android.os.Build; public class Main extends Activity { final String TAG = "Main"; @@ -14,6 +16,9 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); app = ((ReLaunchApp) getApplicationContext()); + if (Build.MODEL == "BNRV520") { + System.setProperty("bn.bootanim.exit", "1"); + }; app.RestartIntent = PendingIntent.getActivity(this, 0, getIntent(), getIntent().getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/src/com/harasoft/relaunch/N2EpdController.java b/app/src/main/java/com/gacode/relaunchx/N2EpdController.java similarity index 99% rename from src/com/harasoft/relaunch/N2EpdController.java rename to app/src/main/java/com/gacode/relaunchx/N2EpdController.java index 56104b2..8896a3b 100644 --- a/src/com/harasoft/relaunch/N2EpdController.java +++ b/app/src/main/java/com/gacode/relaunchx/N2EpdController.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; /** * originate from CoolReader diff --git a/src/com/harasoft/relaunch/PowerFunctions.java b/app/src/main/java/com/gacode/relaunchx/PowerFunctions.java similarity index 85% rename from src/com/harasoft/relaunch/PowerFunctions.java rename to app/src/main/java/com/gacode/relaunchx/PowerFunctions.java index 544ce7d..2194eba 100644 --- a/src/com/harasoft/relaunch/PowerFunctions.java +++ b/app/src/main/java/com/gacode/relaunchx/PowerFunctions.java @@ -1,21 +1,22 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.DataOutputStream; -import java.io.File; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; import android.os.SystemClock; +import android.preference.PreferenceManager; import android.widget.Toast; public class PowerFunctions { public static boolean actionLock(Activity act) { - File isrooted = new File("/system/bin", "su"); - if (isrooted.exists()) { + if (DeviceInfo.isRooted() && DeviceInfo.EINK_NOOK) { try { Process p = Runtime.getRuntime().exec( act.getResources().getString(R.string.shell)); @@ -36,18 +37,21 @@ public static boolean actionLock(Activity act) { } return true; } else { - Toast.makeText( - act, - act.getResources() - .getString(R.string.jv_advanced_root_only), - Toast.LENGTH_LONG).show(); - return false; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(act.getBaseContext()); + final String lockPassword = prefs.getString("lockPassword", ""); + if (lockPassword.length() == 0) { + Toast.makeText(act, act.getResources().getString(R.string.lock_screen_empty_passwd), + Toast.LENGTH_SHORT).show(); + } else { + Intent lockScreen = new Intent(LockScreen.ACTION_LOCK_SCREEN); + act.sendBroadcast(lockScreen); + } + return true; } } public static void actionReboot(Activity act) { - File isrooted = new File("/system/bin", "su"); - if (isrooted.exists()) { + if (DeviceInfo.isRooted()) { AlertDialog.Builder builder = new AlertDialog.Builder(act); // "Reboot confirmation" builder.setTitle(act.getResources().getString( @@ -106,8 +110,7 @@ public void onClick(DialogInterface dialog, } public static void actionPowerOff(Activity act) { - File isrooted = new File("/system/bin", "su"); - if (isrooted.exists()) { + if (DeviceInfo.isRooted()) { AlertDialog.Builder builder = new AlertDialog.Builder(act); // "Reboot confirmation" builder.setTitle(act.getResources().getString( diff --git a/src/com/harasoft/relaunch/PrefsActivity.java b/app/src/main/java/com/gacode/relaunchx/PrefsActivity.java similarity index 96% rename from src/com/harasoft/relaunch/PrefsActivity.java rename to app/src/main/java/com/gacode/relaunchx/PrefsActivity.java index 56c691f..ece513d 100644 --- a/src/com/harasoft/relaunch/PrefsActivity.java +++ b/app/src/main/java/com/gacode/relaunchx/PrefsActivity.java @@ -1,11 +1,9 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; -import android.R.integer; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; @@ -29,7 +27,6 @@ import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; -import android.widget.ListAdapter; import android.widget.ListView; import android.os.SystemClock; import android.view.MotionEvent; @@ -261,7 +258,7 @@ protected void onCreate(Bundle savedInstanceState) { oldPrefs = prefs.getAll(); - findViewById(R.id.LLbuttons).setVisibility(View.GONE); + findViewById(R.id.linearLayoutBottom).setVisibility(View.GONE); findPreference("cleanupDatabase").setOnPreferenceClickListener( new Preference.OnPreferenceClickListener() { @@ -283,7 +280,7 @@ public void onClick(DialogInterface dialog, }); builder.setNegativeButton( getResources().getString( - R.string.jv_relaunch_no), + R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -315,7 +312,7 @@ public void onClick(DialogInterface dialog, }); builder.setNegativeButton( getResources().getString( - R.string.jv_relaunch_no), + R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -347,7 +344,7 @@ public void onClick(DialogInterface dialog, }); builder.setNegativeButton( getResources().getString( - R.string.jv_relaunch_no), + R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -642,6 +639,8 @@ public void run() { } ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutBottom)); } @Override @@ -690,32 +689,7 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, } if (do_pref_subrequest) { - if (key.equals("startMode")) { - String value = sharedPreferences.getString(key, "UNKNOWN"); - if (value.equals("LAUNCHER")) { - do_pref_subrequest = false; - ((CheckBoxPreference) findPreference("fullScreen")) - .setChecked(true); - ((CheckBoxPreference) findPreference("homeMode")) - .setChecked(true); - ((CheckBoxPreference) findPreference("libraryMode")) - .setChecked(true); - ((CheckBoxPreference) findPreference("shopMode")) - .setChecked(true); - do_pref_subrequest = false; - } else if (value.equals("PROGRAM")) { - do_pref_subrequest = false; - ((CheckBoxPreference) findPreference("fullScreen")) - .setChecked(false); - ((CheckBoxPreference) findPreference("homeMode")) - .setChecked(false); - ((CheckBoxPreference) findPreference("libraryMode")) - .setChecked(false); - ((CheckBoxPreference) findPreference("shopMode")) - .setChecked(false); - do_pref_subrequest = true; - } - } else if (key.equals("workMode")) { + if (key.equals("workMode")) { String value = sharedPreferences.getString(key, "UNKNOWN"); if (value.equals("FILES")) { do_pref_subrequest = false; @@ -730,7 +704,8 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, ((CheckBoxPreference) findPreference("showFullDirPath")) .setChecked(true); SharedPreferences.Editor editor = prefs.edit(); - editor.putInt("sortMode", 0); + editor.putInt("sortKey", 0); + editor.putInt("sortOrder", 0); editor.putBoolean("showBookTitles", false); editor.putBoolean("rowSeparator", false); editor.putBoolean("useFileManagerFunctions", true); @@ -751,7 +726,8 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, ((CheckBoxPreference) findPreference("showFullDirPath")) .setChecked(false); SharedPreferences.Editor editor = prefs.edit(); - editor.putInt("sortMode", 2); + editor.putInt("sortKey", 1); + editor.putInt("sortOrder", 0); editor.putBoolean("showBookTitles", true); editor.putBoolean("rowSeparator", true); editor.putBoolean("useFileManagerFunctions", false); @@ -769,24 +745,8 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, ((ListPreference) findPreference("einkUpdateMode")) .setValueIndex(1); } - } else if (key.equals("fileFontSize")) { - do_pref_subrequest = false; - String sValue = sharedPreferences.getString("fileFontSize", "20"); - int f1Size = (new Integer(sValue)).intValue(); - int f2Size = f1Size*4/5; - ((EditTextPreference) findPreference("firstLineFontSizePx")) - .setText(((Integer) f1Size).toString()); - ((EditTextPreference) findPreference("secondLineFontSizePx")) - .setText(((Integer) f2Size).toString()); - do_pref_subrequest = true; } - if ((key.equals("fullScreen")) || (key.equals("homeMode")) - || (key.equals("libraryMode")) || (key.equals("shopMode"))) { - do_pref_subrequest = false; - ((ListPreference) findPreference("startMode")).setValueIndex(2); - do_pref_subrequest = true; - } if ((key.equals("showBookTitles")) || (key.equals("useFileManagerFunctions"))) { do_pref_subrequest = false; @@ -1466,6 +1426,8 @@ public boolean onPreferenceClick(Preference pref) { LayoutInflater inflater = (LayoutInflater) getApplicationContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View prefView = inflater.inflate(R.layout.prefs_main, null); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, prefView.findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, prefView.findViewById(R.id.linearLayoutBottom)); prefScreen.getDialog().setContentView(prefView); final ListView prefListView = (ListView) prefView .findViewById(android.R.id.list); diff --git a/src/com/harasoft/relaunch/ReLaunch.java b/app/src/main/java/com/gacode/relaunchx/ReLaunch.java similarity index 75% rename from src/com/harasoft/relaunch/ReLaunch.java rename to app/src/main/java/com/gacode/relaunchx/ReLaunch.java index 110ca32..7e936c1 100644 --- a/src/com/harasoft/relaunch/ReLaunch.java +++ b/app/src/main/java/com/gacode/relaunchx/ReLaunch.java @@ -1,13 +1,10 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.BufferedReader; import java.io.File; -import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; -import java.io.OutputStream; +import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; @@ -17,11 +14,12 @@ import java.util.List; import java.util.Set; import java.util.Stack; +import java.util.regex.Pattern; import ebook.EBook; import ebook.parser.InstantParser; import ebook.parser.Parser; -import android.R.style; + import android.app.Activity; import android.app.ActivityManager; import android.app.AlertDialog; @@ -53,7 +51,6 @@ import android.text.TextUtils.TruncateAt; import android.text.style.StyleSpan; import android.util.Log; -import android.util.TypedValue; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.KeyEvent; @@ -65,13 +62,12 @@ import android.view.View.MeasureSpec; import android.view.View.OnTouchListener; import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; import android.webkit.WebView; import android.widget.AdapterView; import android.view.LayoutInflater; import android.widget.AbsListView; import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; @@ -81,14 +77,16 @@ import android.widget.ListView; import android.widget.LinearLayout.LayoutParams; import android.widget.ListAdapter; -import android.widget.SimpleAdapter; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import static com.gacode.relaunchx.FileSystem.bytesToString; + public class ReLaunch extends Activity { - final static String TAG = "ReLaunch"; + final static String TAG = "ReLaunchX"; static public final String APP_LRU_FILE = "AppLruFile.txt"; static public final String APP_FAV_FILE = "AppFavorites.txt"; static public final String LRU_FILE = "LruFile.txt"; @@ -96,11 +94,16 @@ public class ReLaunch extends Activity { static public final String HIST_FILE = "History.txt"; static public final String FILT_FILE = "Filters.txt"; static public final String COLS_FILE = "Columns.txt"; - final String defReaders = ".fb2,.fb2.zip:org.coolreader%org.coolreader.CoolReader%Cool Reader|.epub:Intent:application/epub|.jpg,.jpeg:Intent:image/jpeg" - + "|.png:Intent:image/png|.pdf:Intent:application/pdf" - + "|.djv,.djvu:Intent:image/vnd.djvu|.doc:Intent:application/msword" + final String defReaders = ".fb2,.fb2.zip:org.coolreader%org.coolreader.CoolReader%Cool Reader" + + "|.epub:Intent:application/epub" + + "|.jpg,.jpeg:Intent:image/jpeg" + + "|.png:Intent:image/png" + + "|.pdf:Intent:application/pdf" + + "|.djv,.djvu:Intent:image/vnd.djvu" + + "|.doc:Intent:application/msword" + "|.chm,.pdb,.prc,.mobi,.azw:org.coolreader%org.coolreader.CoolReader%Cool Reader" - + "|.cbz,.cb7:Intent:application/x-cbz|.cbr:Intent:application/x-cbr"; + + "|.cbz,.cb7:Intent:application/x-cbz" + + "|.cbr:Intent:application/x-cbr"; final static public String defReader = "org.coolreader%org.coolreader.CoolReader%Cool Reader"; final static public int TYPES_ACT = 1; final static public int DIR_ACT = 2; @@ -130,15 +133,12 @@ public class ReLaunch extends Activity { final static int BROWSE_FILES = 0; final static int BROWSE_TITLES = 1; final static int BROWSE_COVERS = 2; - final static int SORT_FILES_ASC = 0; - final static int SORT_FILES_DESC = 1; - final static int SORT_TITLES_ASC = 2; - final static int SORT_TITLES_DESC = 3; String currentRoot = "/sdcard"; Integer currentPosition = -1; - List> itemsArray; + List itemsArray; Stack positions = new Stack(); - SimpleAdapter adapter; + Stack scrollPositions = new Stack(); + BaseAdapter adapter; SharedPreferences prefs; ReLaunchApp app; static public boolean useHome = false; @@ -147,11 +147,7 @@ public class ReLaunch extends Activity { static boolean useLibrary = false; boolean useDirViewer = false; static public boolean filterMyself = true; - static public String selfName = "com.harasoft.relaunch.Main"; - String[] allowedModels; - String[] allowedDevices; - String[] allowedManufacts; - String[] allowedProducts; + static public String selfName = "com.gacode.relaunchx.Main"; boolean addSView = true; // multicolumns per directory configuration @@ -169,22 +165,52 @@ public class ReLaunch extends Activity { TextView battTitle; TextView battLevel; IntentFilter batteryLevelFilter; - + String fileOpFile; String fileOpDir; int fileOp; - final String[] sortType = new String[] {"sname"}; - final boolean[] sortOrder = new boolean[] {true}; + + enum SortMode { + Ascending, + Descending + } + SortMode sortMode = SortMode.Ascending; + + enum SortKey { + BookTitle, //used only when Show Book Titles is on + FileName, + FileExtension, + FileSize, + FileDate, + } + SortKey sortKey = SortKey.FileName; + + public enum FsItemType { + File, + Directory + }; + + private final class FileDetails { + public String name; + public String displayName; + public String extension; + public String directoryName; + public String fullPathName; + public FsItemType type; + public Date date; + public long size; + public String reader; + } private void actionSwitchWiFi() { WifiManager wifiManager; - wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); + wifiManager = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (wifiManager.isWifiEnabled()) { // "WiFi is off" Toast.makeText( ReLaunch.this, getResources().getString( - R.string.jv_relaunch_turning_wifi_off), + R.string.jv_relaunchx_turning_wifi_off), Toast.LENGTH_SHORT).show(); wifiManager.setWifiEnabled(false); } else { @@ -192,7 +218,7 @@ private void actionSwitchWiFi() { Toast.makeText( ReLaunch.this, getResources().getString( - R.string.jv_relaunch_turning_wifi_on), + R.string.jv_relaunchx_turning_wifi_on), Toast.LENGTH_SHORT).show(); wifiManager.setWifiEnabled(true); } @@ -285,22 +311,9 @@ private void setEinkController() { } } - private boolean checkField(String[] a, String f) { - for (int i = 0; i < a.length; i++) - if (a[i].equals("*") || a[i].equals(f)) - return true; - return false; - } - private void checkDevice(String dev, String man, String model, String product) { - if (checkField(allowedModels, model)) - return; - if (checkField(allowedDevices, dev)) - return; - if (checkField(allowedManufacts, man)) - return; - if (checkField(allowedProducts, product)) + if (DeviceInfo.isCompatibleDevice(app)) return; if (!prefs.getBoolean("allowDevice", false)) { @@ -311,11 +324,11 @@ private void checkDevice(String dev, String man, String model, "text/html", "utf-8", null); // "Wrong model !" builder.setTitle(getResources().getString( - R.string.jv_relaunch_wrong_model)); + R.string.jv_relaunchx_wrong_model)); builder.setView(wv); // "YES" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_yes), + getResources().getString(R.string.jv_relaunchx_yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -327,7 +340,7 @@ public void onClick(DialogInterface dialog, }); // "NO" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_no), + getResources().getString(R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -342,7 +355,9 @@ public void onClick(DialogInterface dialog, static class ViewHolder { TextView tv; TextView tv2; + TextView tvSizeDate; ImageView iv; + TextView tvicon; ImageView is; LinearLayout tvHolder; } @@ -358,18 +373,27 @@ private Bitmap scaleDrawable(Drawable d, int size) { size, size, true); } - class FLSimpleAdapter extends SimpleAdapter { - - FLSimpleAdapter(Context context, List> data, - int resource, String[] from, int[] to) { - super(context, data, resource, from, to); - } + class FilesViewAdapter extends BaseAdapter { + private Context ctx = null; + FilesViewAdapter(Context context) { + this.ctx = context; + } @Override public int getCount() { - return itemsArray.size(); + return itemsArray.size(); } + @Override + public Object getItem(int position) { + return itemsArray.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; @@ -381,7 +405,9 @@ public View getView(int position, View convertView, ViewGroup parent) { v = vi.inflate(R.layout.flist_layout, null); holder = new ViewHolder(); holder.tv = (TextView) v.findViewById(R.id.fl_text); - holder.tv2 = (TextView) v.findViewById(R.id.fl_text2); + holder.tv2 = (TextView) v.findViewById(R.id.fl_text2); + holder.tvSizeDate = (TextView) v.findViewById(R.id.fl_SizeDate); + holder.tvicon = (TextView) v.findViewById(R.id.textViewIcon); holder.iv = (ImageView) v.findViewById(R.id.fl_icon); holder.is = (ImageView) v.findViewById(R.id.fl_separator); holder.tvHolder = (LinearLayout) v.findViewById(R.id.fl_holder); @@ -429,37 +455,39 @@ public int compare(String a, String b) { Collections.sort(exts, new ExtsComparator()); } - HashMap item = itemsArray.get(position); + FileDetails item = itemsArray.get(position); if (item != null) { TextView tv = holder.tv; TextView tv2 = holder.tv2; + TextView tvSizeDate = holder.tvSizeDate; LinearLayout tvHolder = holder.tvHolder; ImageView iv = holder.iv; ImageView is = holder.is; if (!prefs.getBoolean("rowSeparator", false)) is.setVisibility(View.GONE); - String sname = item.get("sname"); + String sname = item.displayName; // clean extension, if needed - if (prefs.getBoolean("hideKnownExts", false) && !prefs.getBoolean("showBookTitles", false)) { + if (prefs.getBoolean("showIcon", false) == false) { + if (item.extension != null && !item.extension.equals("")) + sname = sname.substring(0, sname.length() - (item.extension.length() + 1)); + } else if (prefs.getBoolean("hideKnownExts", false) && !prefs.getBoolean("showBookTitles", false)) { for (int i = 0; i < exts.size(); i++) { if (sname.endsWith(exts.get(i))) { - sname = sname.substring(0, sname.length() - - exts.get(i).length()); + sname = sname.substring(0, sname.length() - exts.get(i).length()); } } } - String fname = item.get("fname"); + String fname = item.fullPathName; boolean setBold = false; boolean useFaces = prefs.getBoolean("showNew", true); - tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, Integer - .parseInt(prefs.getString("firstLineFontSizePx", "20"))); - tv2.setTextSize(TypedValue.COMPLEX_UNIT_PX, Integer - .parseInt(prefs.getString("secondLineFontSizePx", "16"))); + SizeManipulation.AdjustWithPreferencesFileListLine1(app, prefs, tv); + SizeManipulation.AdjustWithPreferencesFileListLine2(app, prefs, tv2); + SizeManipulation.AdjustWithPreferencesFileListLine2(app, prefs, tvSizeDate); - if (item.get("type").equals("dir")) { + if (item.type == FsItemType.Directory) { tv2.setVisibility(View.GONE); tv2.getLayoutParams().height = 0; if (useFaces) { @@ -467,13 +495,11 @@ public int compare(String a, String b) { R.color.dir_bg)); tv.setTextColor(getResources().getColor(R.color.dir_fg)); } - if (prefs.getString("firstLineIconSizePx", "48") - .equals("0")) { - iv.setVisibility(View.GONE); - } else { - iv.setImageBitmap(scaleDrawableById(R.drawable.dir_ok, - Integer.parseInt(prefs.getString( - "firstLineIconSizePx", "48")))); + if (SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.dir_ok)) { + holder.tvicon.setVisibility(View.GONE); + }else { + holder.iv.setVisibility(View.GONE); + holder.tvicon.setText(">"); } } else { if (useFaces) { @@ -514,59 +540,35 @@ public int compare(String a, String b) { } // setup icon - if (prefs.getString("firstLineIconSizePx", "48") - .equals("0")) { - iv.setVisibility(View.GONE); - } else { - Drawable d = app.specialIcon(item.get("fname"), false); + if (SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv)) + { + holder.tvicon.setVisibility(View.GONE); + Drawable d = app.specialIcon(item.fullPathName, false); if (d != null) - iv.setImageBitmap(scaleDrawable(d, Integer - .parseInt(prefs.getString( - "firstLineIconSizePx", "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, d); else { - String rdrName = item.get("reader"); + String rdrName = item.reader; if (rdrName.equals("Nope")) { - File f = new File(item.get("fname")); + File f = new File(item.fullPathName); if (f.length() > app.viewerMax*1024) - iv.setImageBitmap(scaleDrawableById( - R.drawable.file_notok, - Integer.parseInt(prefs - .getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.file_notok); else - iv.setImageBitmap(scaleDrawableById( - R.drawable.file_ok, - Integer.parseInt(prefs - .getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.file_ok); } else if (rdrName.startsWith("Intent:")) - iv.setImageBitmap(scaleDrawableById( - R.drawable.icon, Integer.parseInt(prefs - .getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.icon); else { if (app.getIcons().containsKey(rdrName)) - iv.setImageBitmap(scaleDrawable( - app.getIcons().get(rdrName), - Integer.parseInt(prefs - .getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, app.getIcons().get(rdrName)); else - iv.setImageBitmap(scaleDrawableById( - R.drawable.file_ok, - Integer.parseInt(prefs - .getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.file_ok); } } + } else { + iv.setVisibility(View.GONE); + holder.tvicon.setText(item.extension.toUpperCase()); } } - +//TODO check the file bitmap and extension String sname1 = sname; String sname2 = ""; int newLinePos = sname.indexOf('\n'); @@ -598,6 +600,23 @@ public int compare(String a, String b) { } else { tv2.setVisibility(View.VISIBLE); } + + boolean displayFileSizeAndDate = prefs.getBoolean("showFileDetails", false); + + String fileSizeDate = ""; + if (displayFileSizeAndDate && item.type == FsItemType.File) { + fileSizeDate += getResources().getString(R.string.jv_relaunchx_fileinfo_size) + " " + bytesToString(item.size); + final SimpleDateFormat fileDateFormat = new SimpleDateFormat("yyyy.MM.dd"); + fileSizeDate += " " + getResources().getString(R.string.jv_relaunchx_fileinfo_date) + + " " + String.valueOf(fileDateFormat.format(item.date)); + } + tvSizeDate.setText(fileSizeDate); + + if (fileSizeDate.equalsIgnoreCase("")) { + tvSizeDate.setVisibility(View.GONE); + } else { + tvSizeDate.setVisibility(View.VISIBLE); + } } // fixes on rows height in grid if (currentColsNum != 1) { @@ -626,55 +645,26 @@ public int compare(String a, String b) { } } - private Integer Percentile(ArrayList values, Integer Quantile) - // not fully "mathematical proof", but not too difficult and working - { - Collections.sort(values); - Integer index = (values.size() * Quantile) / 100; - return values.get(index); - } - private Integer getAutoColsNum() { - // implementation - via percentiles len - Integer auto_cols_num = 1; - ArrayList tmp = new ArrayList(); + ArrayList textLength = new ArrayList(); if (itemsArray.size() > 0) { - Integer factor = 0; for (Integer i = 0; i < itemsArray.size(); i++) { - tmp.add(itemsArray.get(i).get("sname").length()); - } - String pattern = prefs.getString("columnsAlgIntensity", - "70 3:5 7:4 15:3 48:2"); // default - medium - String[] spat = pattern.split("[\\s\\:]+"); - Integer quantile = Integer.parseInt(spat[0]); - factor = Percentile(tmp, quantile); - for (Integer i = 1; i < spat.length; i = i + 2) { - try { - double fval = Double.parseDouble(spat[i]); - int cval = Integer.parseInt(spat[i + 1]); - if (factor <= fval) { - auto_cols_num = cval; - break; - } - } catch (Exception e) { - } + textLength.add(itemsArray.get(i).displayName.length()); } } - if (auto_cols_num > itemsArray.size()) - auto_cols_num = itemsArray.size(); - return auto_cols_num; + + return SizeManipulation.AutoColumnsNumber(app, prefs, textLength); } private void redrawList() { setEinkController(); - GridView gv = (GridView) findViewById(useDirViewer ? R.id.results_list - : R.id.gl_list); + GridView gv = (GridView) findViewById(useDirViewer ? R.id.results_list : R.id.gl_list); if (prefs.getBoolean("filterResults", false)) { - List> newItemsArray = new ArrayList>(); + List newItemsArray = new ArrayList(); - for (HashMap item : itemsArray) { - if (item.get("type").equals("dir") - || app.filterFile(item.get("dname"), item.get("name"))) + for (FileDetails item : itemsArray) { + if (item.type == FsItemType.Directory + || app.filterFile(item.directoryName, item.name)) newItemsArray.add(item); } itemsArray = newItemsArray; @@ -742,28 +732,38 @@ private void pushCurrentPos(AdapterView parent, boolean push_to_stack) { currentPosition = p1; } + private void setUpButtonIcons() { + TextView filterOutputListIcon = (TextView) findViewById(R.id.filter_results_icon); + TextView showHiddenItemsIcon = (TextView) findViewById(R.id.show_hidden_icon); + if (prefs.getBoolean("filterResults", false)) { + filterOutputListIcon.setCompoundDrawablesWithIntrinsicBounds(R.drawable.filter_on, 0,0,0); + } else { + filterOutputListIcon.setCompoundDrawablesWithIntrinsicBounds(R.drawable.filter_off, 0,0,0); + } + if (prefs.getBoolean("showHidden", false)) { + showHiddenItemsIcon.setCompoundDrawablesWithIntrinsicBounds(R.drawable.show_hidden_on, 0,0,0); + } else { + showHiddenItemsIcon.setCompoundDrawablesWithIntrinsicBounds(R.drawable.show_hidden_off, 0,0,0); + } + } + private void setUpButton(final Button up, final String upDir, String currDir) { if (up != null) { - // more versatile check against home, if needed - boolean enabled = !upDir.equals(""); - if (enabled && !currDir.equals("/") - && prefs.getBoolean("notLeaveStartDir", false)) { - enabled = false; - String[] homes = prefs.getString("startDir", - "/sdcard,/media/My Files").split("\\,"); - for (int i = 0; i < homes.length; i++) { - if (homes[i].length() < currDir.length() - && currDir.startsWith(homes[i])) { - enabled = true; - break; - } - } - } - up.setEnabled(enabled); + setUpButtonIcons(); + // gesture listener class UpSimpleOnGestureListener extends SimpleOnGestureListener { @Override public boolean onSingleTapConfirmed(MotionEvent e) { + if (prefs.getBoolean("notLeaveStartDir", false)) { + String[] homes = prefs.getString("startDir", + "/sdcard,/media/My Files").split("\\,"); + for (int i = 0; i < homes.length; i++) { + if (homes[i].length() == currentRoot.length() && currentRoot.equals(homes[i])) { + return true; + } + } + } if (!upDir.equals("")) { Integer p = -1; if (!positions.empty()) @@ -780,9 +780,45 @@ public boolean onDoubleTap(MotionEvent e) { @Override public void onLongPress(MotionEvent e) { - if (up.hasWindowFocus()) { - - } + final CharSequence[] items = { + app.getResources().getString(R.string.pref_i_filterResults_title), + app.getResources().getString(R.string.pref_i_showHidden_title) + }; + final boolean[] checkStates = new boolean[2]; + checkStates[0] = prefs.getBoolean("filterResults", false); + checkStates[1] = prefs.getBoolean("showHidden", false); + + AlertDialog dialog = new AlertDialog.Builder(ReLaunch.this) + .setTitle(app.getResources().getString(R.string.pref_s_file_title)) + .setMultiChoiceItems(items, checkStates, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) { + checkStates[indexSelected] = isChecked; + } + }).setPositiveButton(app.getResources().getString(R.string.jv_relaunchx_viewOptions_adjustFilters_title), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean("filterResults", checkStates[0]); + editor.putBoolean("showHidden", checkStates[1]); + editor.commit(); + Intent intent = new Intent(ReLaunch.this, FiltersActivity.class); + startActivityForResult(intent, -1); + + } + }).setNegativeButton(app.getResources().getString(R.string.jv_relaunchx_viewOptions_OK), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean("filterResults", checkStates[0]); + editor.putBoolean("showHidden", checkStates[1]); + editor.commit(); + drawDirectory(currentRoot, currentPosition); + } + }).create(); + dialog.show(); } } ; @@ -822,13 +858,13 @@ private void refreshBottomInfo() { if (memLevel != null) { // "M free" memLevel.setText(mi.availMem / 1048576L - + getResources().getString(R.string.jv_relaunch_m_free)); + + getResources().getString(R.string.jv_relaunchx_m_free)); memLevel.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.ram), null); } // Wifi status - WifiManager wfm = (WifiManager) getSystemService(Context.WIFI_SERVICE); + WifiManager wfm = (WifiManager) this.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (battTitle != null) { if (wfm.isWifiEnabled()) { String nowConnected = wfm.getConnectionInfo().getSSID(); @@ -836,7 +872,7 @@ private void refreshBottomInfo() { battTitle.setText(nowConnected); } else { battTitle.setText(getResources().getString( - R.string.jv_relaunch_wifi_is_on)); + R.string.jv_relaunchx_wifi_is_on)); } battTitle.setCompoundDrawablesWithIntrinsicBounds( getResources().getDrawable(R.drawable.wifi_on), null, @@ -844,7 +880,7 @@ private void refreshBottomInfo() { } else { // "WiFi is off" battTitle.setText(getResources().getString( - R.string.jv_relaunch_wifi_is_off)); + R.string.jv_relaunchx_wifi_is_off)); battTitle.setCompoundDrawablesWithIntrinsicBounds( getResources().getDrawable(R.drawable.wifi_off), null, null, null); @@ -916,9 +952,10 @@ else if (level < 75) } private void drawDirectory(String root, Integer startPosition) { - File dir = new File(root); + + File dir = new File(root); File[] allEntries = dir.listFiles(); - List files = new ArrayList(); + List files = new ArrayList(); List dirs = new ArrayList(); setEinkController(); @@ -944,7 +981,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) { R.array.output_columns_names); final CharSequence[] columnsmode = new CharSequence[columns.length + 1]; columnsmode[0] = getResources().getString( - R.string.jv_relaunch_default); + R.string.jv_relaunchx_default); for (int i = 0; i < columns.length; i++) { columnsmode[i + 1] = columns[i]; } @@ -963,7 +1000,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) { ReLaunch.this); // "Select application" builder.setTitle(getResources().getString( - R.string.jv_relaunch_select_columns)); + R.string.jv_relaunchx_select_columns)); builder.setSingleChoiceItems(columnsmode, checked, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { @@ -1089,7 +1126,7 @@ public boolean onTouch(View v, MotionEvent event) { }); } - itemsArray = new ArrayList>(); + itemsArray = new ArrayList(); if (dir.getParent() != null) dirs.add(".."); if (allEntries != null) { @@ -1097,60 +1134,58 @@ public boolean onTouch(View v, MotionEvent event) { if (entry.isDirectory()) dirs.add(entry.getName()); else if (!prefs.getBoolean("filterResults", false) - || app.filterFile(dir.getAbsolutePath(), - entry.getName())) - files.add(entry.getName()); + || app.filterFile(dir.getAbsolutePath(), entry.getName())) + files.add(entry); } } + Collections.sort(dirs); -// Collections.sort(files); String upDir = ""; for (String f : dirs) { if ((f.charAt(0) == '.') && (f.charAt(1) != '.') && (!prefs.getBoolean("showHidden", false))) continue; - HashMap item = new HashMap(); - item.put("name", f); - item.put("sname", f); - item.put("dname", dir.getAbsolutePath()); + FileDetails item = new FileDetails(); + item.name = f; + item.displayName = f; + item.directoryName = dir.getAbsolutePath(); if (f.equals("..")) { upDir = dir.getParent(); continue; } else - item.put("fname", dir.getAbsolutePath() + "/" + f); - item.put("type", "dir"); - item.put("reader", "Nope"); + item.fullPathName = dir.getAbsolutePath() + File.separator + f; + item.type = FsItemType.Directory; + item.reader = "Nope"; itemsArray.add(item); } - List> fileItemsArray = new ArrayList>(); - for (String f : files) { - if ((f.startsWith(".")) && (!prefs.getBoolean("showHidden", false))) + List fileItemsArray = new ArrayList(); + for (File f : files) { + String fname = f.getName(); + if ((fname.startsWith(".")) && (!prefs.getBoolean("showHidden", false))) continue; - HashMap item = new HashMap(); - if (prefs.getBoolean("showBookTitles", false)) - item.put("sname", app.dataBase.getEbookName(dir.getAbsolutePath(), f, prefs.getString("bookTitleFormat", "%t[\n%a][. %s][-%n]"))); + FileDetails item = new FileDetails(); + String[] fparts = fname.split("[.]"); + item.extension = fparts.length > 1 ? fparts[fparts.length -1] : ""; + if (prefs.getBoolean("showBookTitles", false)) + item.displayName = getEbookName(dir.getAbsolutePath(), fname); else - item.put("sname", f); - item.put("name", f); - item.put("dname", dir.getAbsolutePath()); - item.put("fname", dir.getAbsolutePath() + "/" + f); - item.put("type", "file"); - item.put("reader", app.readerName(f)); - fileItemsArray.add(item); - } - - setSortMode(prefs.getInt("sortMode", 0)); - fileItemsArray = sortFiles(fileItemsArray, sortType[0], sortOrder[0]); + item.displayName = fname; + item.name = fname; + item.directoryName = dir.getAbsolutePath(); + item.fullPathName = dir.getAbsolutePath() + File.separator + fname; + item.type = FsItemType.File; + item.date = new Date(f.lastModified()); + item.size = f.length(); + item.reader = app.readerName(fname.toLowerCase()); + fileItemsArray.add(item); + } + + setSortMode(prefs.getInt("sortKey", 0), prefs.getInt("sortOrder", 0)); + fileItemsArray = sortFiles(fileItemsArray, sortKey, sortMode); itemsArray.addAll(fileItemsArray); - - String[] from = new String[] { "name" }; - int[] to = new int[] { R.id.fl_text }; setUpButton(up, upDir, currentRoot); - final GridView gv = (GridView) findViewById(useDirViewer ? R.id.results_list : R.id.gl_list); - adapter = new FLSimpleAdapter(this, itemsArray, - useDirViewer ? R.layout.results_layout : R.layout.flist_layout, - from, to); + adapter = new FilesViewAdapter(this); gv.setAdapter(adapter); gv.setHorizontalSpacing(0); @@ -1248,41 +1283,39 @@ public boolean onSingleTapConfirmed(MotionEvent e) { int position = findViewByXY(e); if (position == -1) return true; - HashMap item = itemsArray.get(position); + FileDetails item = itemsArray.get(position); - if (item.get("type").equals("dir")) { + if (item.type == FsItemType.Directory) { // Goto directory pushCurrentPos(gv, true); - drawDirectory(item.get("fname"), -1); - } else if (app.specialAction(ReLaunch.this, item.get("fname"))) + drawDirectory(item.fullPathName, -1); + } else if (app.specialAction(ReLaunch.this, item.fullPathName)) pushCurrentPos(gv, false); else { SharedPreferences.Editor editor = prefs.edit(); editor.putInt("posInFolder", gv.getFirstVisiblePosition()); editor.commit(); pushCurrentPos(gv, false); - if (item.get("reader").equals("Nope")) - app.defaultAction(ReLaunch.this, item.get("fname")); + if (item.reader.equals("Nope")) + app.defaultAction(ReLaunch.this, item.fullPathName); else { // Launch reader if (app.askIfAmbiguous) { - List rdrs = app.readerNames(item - .get("fname")); + List rdrs = app.readerNames(item.fullPathName); if (rdrs.size() < 1) return true; else if (rdrs.size() == 1) - start(app.launchReader(rdrs.get(0), - item.get("fname"))); + start(app.launchReader(rdrs.get(0), item.fullPathName)); else { final CharSequence[] applications = rdrs .toArray(new CharSequence[rdrs.size()]); - final String rdr1 = item.get("fname"); + final String rdr1 = item.fullPathName; AlertDialog.Builder builder = new AlertDialog.Builder( ReLaunch.this); // "Select application" builder.setTitle(getResources() .getString( - R.string.jv_relaunch_select_application)); + R.string.jv_relaunchx_select_application)); builder.setSingleChoiceItems(applications, -1, new DialogInterface.OnClickListener() { public void onClick( @@ -1299,8 +1332,7 @@ public void onClick( alert.show(); } } else - start(app.launchReader(item.get("reader"), - item.get("fname"))); + start(app.launchReader(item.reader, item.fullPathName)); } } return true; @@ -1310,8 +1342,8 @@ public void onClick( public boolean onDoubleTap(MotionEvent e) { int position = findViewByXY(e); if (position != -1) { - HashMap item = itemsArray.get(position); - String file = item.get("dname") + "/" + item.get("name"); + FileDetails item = itemsArray.get(position); + String file = item.directoryName + File.separator + item.name; if (file.endsWith("fb2") || file.endsWith("fb2.zip") || file.endsWith("epub")) { SharedPreferences.Editor editor = prefs.edit(); editor.putInt("posInFolder", gv.getFirstVisiblePosition()); @@ -1330,21 +1362,21 @@ public void onLongPress(MotionEvent e) { return; int menuType = 0; int position = findViewByXY(e); - HashMap item; + FileDetails item; String fn = null; String dr = null; - String tp = null; + FsItemType tp = null; String fullName = null; ArrayList aList = new ArrayList(10); if (position == -1) menuType = 0; else { item = itemsArray.get(position); - fn = item.get("name"); - dr = item.get("dname"); - tp = item.get("type"); - fullName = dr + "/" + fn; - if (tp == "dir") + fn = item.name; + dr = item.directoryName; + tp = item.type; + fullName = dr + File.separator + fn; + if (tp == FsItemType.Directory) menuType = 1; else if (fn.endsWith("fb2") || fn.endsWith("fb2.zip") || fn.endsWith("epub")) menuType = 2; @@ -1353,97 +1385,97 @@ else if (fn.endsWith("fb2") || fn.endsWith("fb2.zip") || fn.endsWith("epub")) } if (menuType == 0) { if (prefs.getBoolean("useFileManagerFunctions", true)) { - aList.add(getString(R.string.jv_relaunch_create_folder)); + aList.add(getString(R.string.jv_relaunchx_create_folder)); if (fileOp != 0) { - aList.add(getString(R.string.jv_relaunch_paste)); + aList.add(getString(R.string.jv_relaunchx_paste)); } } } else if (menuType == 1) { if ((!app.isStartDir(fullName)) && (prefs.getBoolean("showAddStartDir", false))) { - aList.add(getString(R.string.jv_relaunch_set_startdir)); - aList.add(getString(R.string.jv_relaunch_add_startdir)); + aList.add(getString(R.string.jv_relaunchx_set_startdir)); + aList.add(getString(R.string.jv_relaunchx_add_startdir)); } if (!app.contains("favorites", fullName, app.DIR_TAG)) - aList.add(getString(R.string.jv_relaunch_add)); + aList.add(getString(R.string.jv_relaunchx_add)); if (prefs.getBoolean("useFileManagerFunctions", true)) { File d = new File(fullName); String[] allEntries = d.list(); - aList.add(getString(R.string.jv_relaunch_create_folder)); - aList.add(getString(R.string.jv_relaunch_rename)); - aList.add(getString(R.string.jv_relaunch_move)); + aList.add(getString(R.string.jv_relaunchx_create_folder)); + aList.add(getString(R.string.jv_relaunchx_rename)); + aList.add(getString(R.string.jv_relaunchx_move)); if (fileOp != 0) { - aList.add(getString(R.string.jv_relaunch_paste)); + aList.add(getString(R.string.jv_relaunchx_paste)); } if (allEntries != null && allEntries.length > 0) { - aList.add(getString(R.string.jv_relaunch_delete_non_emp_dir)); + aList.add(getString(R.string.jv_relaunchx_delete_non_emp_dir)); } else { - aList.add(getString(R.string.jv_relaunch_delete_emp_dir)); + aList.add(getString(R.string.jv_relaunchx_delete_emp_dir)); } } - aList.add(getString(R.string.jv_relaunch_fileinfo)); + aList.add(getString(R.string.jv_relaunchx_fileinfo)); } else if (menuType == 2) { - aList.add(getString(R.string.jv_relaunch_bookinfo)); + aList.add(getString(R.string.jv_relaunchx_bookinfo)); if (!app.contains("favorites", dr, fn)) { - aList.add(getString(R.string.jv_relaunch_add)); + aList.add(getString(R.string.jv_relaunchx_add)); } if (app.history.containsKey(fullName)) { if (app.history.get(fullName) == app.READING) { - aList.add(getString(R.string.jv_relaunch_mark)); + aList.add(getString(R.string.jv_relaunchx_mark)); } else if (app.history.get(fullName) == app.FINISHED) { - aList.add(getString(R.string.jv_relaunch_unmark)); + aList.add(getString(R.string.jv_relaunchx_unmark)); } - aList.add(getString(R.string.jv_relaunch_unmarkall)); + aList.add(getString(R.string.jv_relaunchx_unmarkall)); } else { - aList.add(getString(R.string.jv_relaunch_mark)); + aList.add(getString(R.string.jv_relaunchx_mark)); } if (prefs.getBoolean("openWith", true)) - aList.add(getString(R.string.jv_relaunch_openwith)); + aList.add(getString(R.string.jv_relaunchx_openwith)); if (prefs.getBoolean("createIntent", false)) - aList.add(getString(R.string.jv_relaunch_createintent)); + aList.add(getString(R.string.jv_relaunchx_createintent)); if (prefs.getBoolean("useFileManagerFunctions", true)) { if (!prefs.getBoolean("showBookTitles", false)) - aList.add(getString(R.string.jv_relaunch_tags_rename)); - aList.add(getString(R.string.jv_relaunch_create_folder)); + aList.add(getString(R.string.jv_relaunchx_tags_rename)); + aList.add(getString(R.string.jv_relaunchx_create_folder)); if (!prefs.getBoolean("showBookTitles", false)) - aList.add(getString(R.string.jv_relaunch_rename)); - aList.add(getString(R.string.jv_relaunch_copy)); - aList.add(getString(R.string.jv_relaunch_move)); + aList.add(getString(R.string.jv_relaunchx_rename)); + aList.add(getString(R.string.jv_relaunchx_copy)); + aList.add(getString(R.string.jv_relaunchx_move)); if (fileOp != 0) - aList.add(getString(R.string.jv_relaunch_paste)); - aList.add(getString(R.string.jv_relaunch_delete)); + aList.add(getString(R.string.jv_relaunchx_paste)); + aList.add(getString(R.string.jv_relaunchx_delete)); } - aList.add(getString(R.string.jv_relaunch_fileinfo)); + aList.add(getString(R.string.jv_relaunchx_fileinfo)); } else if (menuType == 3) { if (!app.contains("favorites", dr, fn)) { - aList.add(getString(R.string.jv_relaunch_add)); + aList.add(getString(R.string.jv_relaunchx_add)); } if (app.history.containsKey(fullName)) { if (app.history.get(fullName) == app.READING) { - aList.add(getString(R.string.jv_relaunch_mark)); + aList.add(getString(R.string.jv_relaunchx_mark)); } else if (app.history.get(fullName) == app.FINISHED) { - aList.add(getString(R.string.jv_relaunch_unmark)); + aList.add(getString(R.string.jv_relaunchx_unmark)); } - aList.add(getString(R.string.jv_relaunch_unmarkall)); + aList.add(getString(R.string.jv_relaunchx_unmarkall)); } else { - aList.add(getString(R.string.jv_relaunch_mark)); + aList.add(getString(R.string.jv_relaunchx_mark)); } if (prefs.getBoolean("openWith", true)) - aList.add(getString(R.string.jv_relaunch_openwith)); + aList.add(getString(R.string.jv_relaunchx_openwith)); if (prefs.getBoolean("createIntent", false)) - aList.add(getString(R.string.jv_relaunch_createintent)); + aList.add(getString(R.string.jv_relaunchx_createintent)); if (prefs.getBoolean("useFileManagerFunctions", true)) { - aList.add(getString(R.string.jv_relaunch_create_folder)); + aList.add(getString(R.string.jv_relaunchx_create_folder)); if (!prefs.getBoolean("showBookTitles", false)) - aList.add(getString(R.string.jv_relaunch_rename)); - aList.add(getString(R.string.jv_relaunch_copy)); - aList.add(getString(R.string.jv_relaunch_move)); + aList.add(getString(R.string.jv_relaunchx_rename)); + aList.add(getString(R.string.jv_relaunchx_copy)); + aList.add(getString(R.string.jv_relaunchx_move)); if (fileOp != 0) - aList.add(getString(R.string.jv_relaunch_paste)); - aList.add(getString(R.string.jv_relaunch_delete)); + aList.add(getString(R.string.jv_relaunchx_paste)); + aList.add(getString(R.string.jv_relaunchx_delete)); } - aList.add(getString(R.string.jv_relaunch_fileinfo)); + aList.add(getString(R.string.jv_relaunchx_fileinfo)); } - aList.add(getString(R.string.jv_relaunch_cancel)); + aList.add(getString(R.string.jv_relaunchx_cancel)); final int pos = position; final String[] list = aList.toArray(new String[aList.size()]); @@ -1454,52 +1486,51 @@ else if (fn.endsWith("fb2") || fn.endsWith("fb2.zip") || fn.endsWith("epub")) builder.setAdapter(cmAdapter, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { String s = list[item]; - if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_cancel))) + if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_cancel))) onContextMenuSelected(CNTXT_MENU_CANCEL, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_delete))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_delete))) onContextMenuSelected(CNTXT_MENU_DELETE_F, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_delete_emp_dir))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_delete_emp_dir))) onContextMenuSelected(CNTXT_MENU_DELETE_D_EMPTY, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_delete_non_emp_dir))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_delete_non_emp_dir))) onContextMenuSelected(CNTXT_MENU_DELETE_D_NON_EMPTY, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_add))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_add))) onContextMenuSelected(CNTXT_MENU_ADD, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_mark))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_mark))) onContextMenuSelected(CNTXT_MENU_MARK_FINISHED, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_unmark))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_unmark))) onContextMenuSelected(CNTXT_MENU_MARK_READING, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_unmarkall))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_unmarkall))) onContextMenuSelected(CNTXT_MENU_MARK_FORGET, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_createintent))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_createintent))) onContextMenuSelected(CNTXT_MENU_INTENT, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_openwith))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_openwith))) onContextMenuSelected(CNTXT_MENU_OPENWITH, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_copy))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_copy))) onContextMenuSelected(CNTXT_MENU_COPY_FILE, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_move))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_move))) onContextMenuSelected(CNTXT_MENU_MOVE_FILE, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_paste))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_paste))) onContextMenuSelected(CNTXT_MENU_PASTE, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_rename))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_rename))) onContextMenuSelected(CNTXT_MENU_RENAME, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_create_folder))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_create_folder))) onContextMenuSelected(CNTXT_MENU_CREATE_DIR, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_move_dir))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_move_dir))) onContextMenuSelected(CNTXT_MENU_MOVE_DIR, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_tags_rename))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_tags_rename))) onContextMenuSelected(CNTXT_MENU_TAGS_RENAME, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_set_startdir))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_set_startdir))) onContextMenuSelected(CNTXT_MENU_SET_STARTDIR, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_add_startdir))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_add_startdir))) onContextMenuSelected(CNTXT_MENU_ADD_STARTDIR, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_bookinfo))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_bookinfo))) onContextMenuSelected(CNTXT_MENU_SHOW_BOOKINFO, pos); - else if (s.equalsIgnoreCase(getString(R.string.jv_relaunch_fileinfo))) + else if (s.equalsIgnoreCase(getString(R.string.jv_relaunchx_fileinfo))) onContextMenuSelected(CNTXT_MENU_FILE_INFO, pos); } }); AlertDialog alert = builder.create(); - alert.requestWindowFeature(Window.FEATURE_NO_TITLE); alert.show(); } }; @@ -1518,7 +1549,7 @@ public boolean onTouch(View v, MotionEvent event) { upScroll.setText(app.scrollStep + "%"); } else { upScroll.setText(getResources() - .getString(R.string.jv_relaunch_prev)); + .getString(R.string.jv_relaunchx_prev)); } class upScrlSimpleOnGestureListener extends SimpleOnGestureListener { @Override @@ -1540,18 +1571,25 @@ public boolean onSingleTapConfirmed(MotionEvent e) { gv.dispatchTouchEvent(ev); } else { // other devices int first = gv.getFirstVisiblePosition(); - int visible = gv.getLastVisiblePosition() - - gv.getFirstVisiblePosition() + 1; - int total = itemsArray.size(); - first -= visible; - if (first < 0) - first = 0; - gv.setSelection(first); - // some hack workaround against not scrolling in some cases - if (total > 0) { - gv.requestFocusFromTouch(); - gv.setSelection(first); + int target = 0; + if (first == 0) { + //clear the stack if the view was reset + scrollPositions.clear(); } + + if (scrollPositions.empty()) { + int visible = gv.getLastVisiblePosition() - first + 1; + target = first - visible; + if (target < 0) + target = 0; + } else { + target = scrollPositions.pop() + currentColsNum; + } + gv.setSelection(target); + + // some hack workaround against not scrolling in some cases + gv.requestFocusFromTouch(); + gv.setSelection(target); } return true; } @@ -1605,17 +1643,13 @@ public boolean onTouch(View v, MotionEvent event) { class RepeatedDownScroll { public void doIt(int first, int target, int shift) { final GridView gv = (GridView) findViewById(R.id.gl_list); - int total = gv.getCount(); - int last = gv.getLastVisiblePosition(); - if (total == last + 1) - return; final int ftarget = target + shift; gv.clearFocus(); - gv.post(new Runnable() { - public void run() { - gv.setSelection(ftarget); - } - }); + gv.setSelection(ftarget); + if (ftarget == gv.getLastVisiblePosition()) { + return; + } + final int ffirst = first; final int fshift = shift; gv.postDelayed(new Runnable() { @@ -1635,7 +1669,7 @@ public void run() { downScroll.setText(app.scrollStep + "%"); } else { downScroll.setText(getResources().getString( - R.string.jv_relaunch_next)); + R.string.jv_relaunchx_next)); } class dnScrlSimpleOnGestureListener extends SimpleOnGestureListener { @Override @@ -1657,13 +1691,16 @@ public boolean onSingleTapConfirmed(MotionEvent e) { gv.dispatchTouchEvent(ev); } else { // other devices int first = gv.getFirstVisiblePosition(); - int total = itemsArray.size(); - int last = gv.getLastVisiblePosition(); - if (total == last + 1) - return true; - int target = last + 1; - if (target > (total - 1)) - target = total - 1; + int target = gv.getLastVisiblePosition(); + if (first == 0) { + scrollPositions.clear(); + } else if (prefs.getBoolean("disableScrollJump", true)) { + //remember top element to easily go back to current view via PgUp + if (scrollPositions.empty()) + scrollPositions.push(first); + else if (scrollPositions.peek() != first) //don't repeat at the bottom + scrollPositions.push(first); + } RepeatedDownScroll ds = new RepeatedDownScroll(); ds.doIt(first, target, 0); } @@ -1810,7 +1847,7 @@ private void start(Intent i) { Toast.makeText( ReLaunch.this, getResources().getString( - R.string.jv_relaunch_activity_not_found), + R.string.jv_relaunchx_activity_not_found), Toast.LENGTH_LONG).show(); } } @@ -1845,7 +1882,7 @@ public void onReceive(Context context, Intent intent) { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + final Activity relaunchx = this; // If we called from Home launcher? final Intent data = getIntent(); if (data.getExtras() == null) { @@ -1861,14 +1898,6 @@ public void onCreate(Bundle savedInstanceState) { useLibrary = data.getBooleanExtra("library", false); useDirViewer = data.getBooleanExtra("dirviewer", false); } - - // Global arrays - allowedModels = getResources().getStringArray(R.array.allowed_models); - allowedDevices = getResources().getStringArray(R.array.allowed_devices); - allowedManufacts = getResources().getStringArray( - R.array.allowed_manufacturers); - allowedProducts = getResources().getStringArray( - R.array.allowed_products); // Create global storage with values app = (ReLaunchApp) getApplicationContext(); @@ -1884,8 +1913,7 @@ public void onCreate(Bundle savedInstanceState) { // Preferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - if (prefs.getString("startMode", "UNKNOWN").equalsIgnoreCase("LAUNCHER")) - useHome = true; + String typesString = prefs.getString("types", defReaders); try { app.scrollStep = Integer.parseInt(prefs.getString("scrollPerc", @@ -1911,7 +1939,7 @@ public void onCreate(Bundle savedInstanceState) { useHome = true; if (useLibrary && prefs.getBoolean("libraryMode", true)) useHome = true; - app.fullScreen = prefs.getBoolean("fullScreen", true); + app.fullScreen = prefs.getBoolean("fullScreen", false); app.setFullScreenIfNecessary(this); if (app.dataBase == null) @@ -1943,7 +1971,7 @@ public void onCreate(Bundle savedInstanceState) { else if (r[1].equals("FINISHED")) app.history.put(r[0], app.FINISHED); } - setSortMode(prefs.getInt("sortMode", 0)); + setSortMode(prefs.getInt("sortKey", 0), prefs.getInt("sortOrder", 0)); if (useDirViewer) { String start_dir = null; setContentView(R.layout.results_layout); @@ -1963,6 +1991,7 @@ public void onClick(View v) { if (!prefs.getBoolean("showButtons", true)) { hideLayout(R.id.linearLayoutTop); } + if (useHome) { app.readFile("app_last", APP_LRU_FILE, ":"); app.readFile("app_favorites", APP_FAV_FILE, ":"); @@ -1979,7 +2008,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) { intent.putExtra( "title", getResources().getString( - R.string.jv_relaunch_lru_a)); + R.string.jv_relaunchx_lru_a)); startActivity(intent); return true; } @@ -2016,7 +2045,7 @@ public boolean onSingleTapConfirmed(MotionEvent e) { intent.putExtra( "title", getResources().getString( - R.string.jv_relaunch_all_a)); + R.string.jv_relaunchx_all_a)); startActivity(intent); return true; } @@ -2050,7 +2079,7 @@ private boolean processEvent(String action) { if (prefs.getString(action, "RELAUNCH").equals("RELAUNCH")) { Intent intent = new Intent(ReLaunch.this, AllApplications.class); intent.putExtra("list", "app_favorites"); - intent.putExtra("title", getResources().getString(R.string.jv_relaunch_fav_a)); + intent.putExtra("title", getResources().getString(R.string.jv_relaunchx_fav_a)); startActivity(intent); } else if (prefs.getString(action, "RELAUNCH").equals("RUN")) { actionRun(prefs.getString(action + "app", "%%")); @@ -2216,6 +2245,12 @@ public void onLongPress(MotionEvent e) { "RELAUNCH").equals("RUN")) { actionRun(prefs.getString( "settingsButtonLTapp", "%%")); + } else if (prefs.getString("settingsButtonLT", + "RELAUNCH").equals("OPTIONSMENU")) { + if (Build.VERSION.SDK_INT > 14) + app.About(relaunchx); + else + openOptionsMenu(); } } } @@ -2409,7 +2444,7 @@ public boolean onTouch(View v, MotionEvent event) { } // Memory buttons (task manager activity) - final LinearLayout mem_l = (LinearLayout) findViewById(R.id.mem_layout); + final RelativeLayout mem_l = (RelativeLayout) findViewById(R.id.mem_layout); if (mem_l != null) { class MemlSimpleOnGestureListener extends SimpleOnGestureListener { @@ -2502,7 +2537,7 @@ public boolean onTouch(View v, MotionEvent event) { memTitle = (TextView) findViewById(R.id.mem_title); // Battery Layout - final LinearLayout bat_l = (LinearLayout) findViewById(R.id.bat_layout); + final RelativeLayout bat_l = (RelativeLayout) findViewById(R.id.bat_layout); if (bat_l != null) { class BatlSimpleOnGestureListener extends SimpleOnGestureListener { @@ -2615,10 +2650,10 @@ public boolean onTouch(View v, MotionEvent event) { "text/html", "utf-8", null); // "What's new" builder.setTitle(getResources().getString( - R.string.jv_relaunch_whats_new)); + R.string.jv_relaunchx_whats_new)); builder.setView(wv); builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -2638,16 +2673,25 @@ public void onClick(DialogInterface dialog, setEinkController(); // First directory to get to - if (data.getExtras() != null - && data.getExtras().getString("start_dir") != null) { - drawDirectory(data.getExtras().getString("start_dir"), -1); + currentPosition = -1; + if (data.getExtras() != null && data.getExtras().getString("start_dir") != null) { + currentRoot = data.getExtras().getString("start_dir"); } else { - if (prefs.getBoolean("saveDir", true)) - drawDirectory(prefs.getString("lastdir", "/sdcard"), -1); + String lastDirPath = prefs.getString("lastdir", "/sdcard"); + File lastDir = new File(lastDirPath); + if (prefs.getBoolean("saveDir", true) && lastDir.exists()) + currentRoot = lastDirPath; else { - String[] startDirs = prefs.getString("startDir", - "/sdcard,/media/My Files").split("\\,"); - drawDirectory(startDirs[0], -1); + String[] startDirs = prefs.getString("startDir","/sdcard,/media/My Files").split("\\,"); + boolean dirFound = false; + for (String dir : startDirs) if (new File(dir).exists()) { + currentRoot = dir; + dirFound = true; + break; + } + if (dirFound == false) { + currentRoot ="/"; + } } } } @@ -2678,6 +2722,11 @@ public void onClick(DialogInterface dialog, } ScreenOrientation.set(this, prefs); + + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.title_txt)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutNavigate)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutBottom)); } @Override @@ -2749,23 +2798,23 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onContextMenuSelected(int itemId, int mPos) { if (itemId == CNTXT_MENU_CANCEL) return true; - HashMap i; + FileDetails i; int tpos = 0; // AdapterContextMenuInfo info = (AdapterContextMenuInfo) item // .getMenuInfo(); if (mPos == -1) { - i = new HashMap(); - i.put("dname", prefs.getString("lastdir", ".")); - i.put("name", ""); + i = new FileDetails(); + i.directoryName = prefs.getString("lastdir", "."); + i.name = ""; } else { tpos = mPos; i = itemsArray.get(tpos); } final int pos = tpos; - final String fname = i.get("name"); - final String dname = i.get("dname"); - final String fullName = dname + "/" + fname; - final String type = i.get("type"); + final String fname = i.name; + final String dname = i.directoryName; + final String fullName = dname + File.separator + fname; + final FsItemType type = i.type; switch (itemId) { case CNTXT_MENU_SET_STARTDIR: @@ -2776,7 +2825,7 @@ public boolean onContextMenuSelected(int itemId, int mPos) { app.addStartDir(fullName); break; case CNTXT_MENU_ADD: - if (type.equals("file")) + if (type == FsItemType.File) app.addToList("favorites", dname, fname, false); else app.addToList("favorites", fullName, app.DIR_TAG, false); @@ -2809,7 +2858,7 @@ public boolean onContextMenuSelected(int itemId, int mPos) { AlertDialog.Builder builder = new AlertDialog.Builder(ReLaunch.this); // "Select application" builder.setTitle(getResources().getString( - R.string.jv_relaunch_select_application)); + R.string.jv_relaunchx_select_application)); builder.setSingleChoiceItems(happlications, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { @@ -2819,7 +2868,7 @@ public void onClick(DialogInterface dialog, int i) { } }); builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), + getResources().getString(R.string.jv_relaunchx_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -2855,7 +2904,7 @@ public void onClick(DialogInterface dialog, AlertDialog.Builder builder = new AlertDialog.Builder(ReLaunch.this); // "Select intent type" builder.setTitle(getResources().getString( - R.string.jv_relaunch_select_intent_type)); + R.string.jv_relaunchx_select_intent_type)); builder.setSingleChoiceItems(intents, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { @@ -2874,27 +2923,27 @@ public void onClick(DialogInterface dialog, int i) { // "Activity not found" builder1.setTitle(getResources() .getString( - R.string.jv_relaunch_activity_not_found_title)); + R.string.jv_relaunchx_activity_not_found_title)); // "Activity for file \"" + fullName + // "\" with type \"" + intents[i] + // "\" not found" builder1.setMessage(getResources() .getString( - R.string.jv_relaunch_activity_not_found_text1) + R.string.jv_relaunchx_activity_not_found_text1) + " \"" + fullName + "\" " + getResources() .getString( - R.string.jv_relaunch_activity_not_found_text2) + R.string.jv_relaunchx_activity_not_found_text2) + " \"" + intents[i] + "\" " + getResources() .getString( - R.string.jv_relaunch_activity_not_found_text3)); + R.string.jv_relaunchx_activity_not_found_text3)); builder1.setPositiveButton(getResources() - .getString(R.string.jv_relaunch_ok), + .getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, @@ -2907,7 +2956,7 @@ public void onClick( }); // "Other" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_other), + getResources().getString(R.string.jv_relaunchx_other), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -2915,13 +2964,13 @@ public void onClick(DialogInterface dialog, ReLaunch.this); // "Intent type" builder1.setTitle(getResources().getString( - R.string.jv_relaunch_intent_type)); + R.string.jv_relaunchx_intent_type)); final EditText input = new EditText(ReLaunch.this); input.setText("application/"); builder1.setView(input); // "Ok" builder1.setPositiveButton(getResources() - .getString(R.string.jv_relaunch_ok), + .getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, @@ -2944,31 +2993,31 @@ public void onClick( // "Activity not found" builder2.setTitle(getResources() .getString( - R.string.jv_relaunch_activity_not_found_title)); + R.string.jv_relaunchx_activity_not_found_title)); // "Activity for file \"" + // fullName + "\" with type \"" // + input.getText() + // "\" not found" builder2.setMessage(getResources() .getString( - R.string.jv_relaunch_activity_not_found_text1) + R.string.jv_relaunchx_activity_not_found_text1) + " \"" + fullName + "\" " + getResources() .getString( - R.string.jv_relaunch_activity_not_found_text2) + R.string.jv_relaunchx_activity_not_found_text2) + " \"" + input.getText() + "\" " + getResources() .getString( - R.string.jv_relaunch_activity_not_found_text3)); + R.string.jv_relaunchx_activity_not_found_text3)); // "OK" builder2.setPositiveButton( getResources() .getString( - R.string.jv_relaunch_ok), + R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, @@ -2984,7 +3033,7 @@ public void onClick( }); // "Cancel" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), + getResources().getString(R.string.jv_relaunchx_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3000,18 +3049,18 @@ public void onClick(DialogInterface dialog, AlertDialog.Builder builder = new AlertDialog.Builder(this); // "Delete file warning" builder.setTitle(getResources().getString( - R.string.jv_relaunch_del_file_title)); - // "Are you sure to delete file \"" + fname + "\" ?" + R.string.jv_relaunchx_del_file_title)); + // "Are you sure to delete file \"" + fullPathName + "\" ?" builder.setMessage(getResources().getString( - R.string.jv_relaunch_del_file_text1) + R.string.jv_relaunchx_del_file_text1) + " \"" + fname + "\" " + getResources().getString( - R.string.jv_relaunch_del_file_text2)); + R.string.jv_relaunchx_del_file_text2)); // "Yes" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_yes), + getResources().getString(R.string.jv_relaunchx_yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3024,7 +3073,7 @@ public void onClick(DialogInterface dialog, }); // "No" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_no), + getResources().getString(R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3042,18 +3091,18 @@ public void onClick(DialogInterface dialog, AlertDialog.Builder builder = new AlertDialog.Builder(this); // "Delete empty directory warning" builder.setTitle(getResources().getString( - R.string.jv_relaunch_del_em_dir_title)); - // "Are you sure to delete empty directory \"" + fname + "\" ?" + R.string.jv_relaunchx_del_em_dir_title)); + // "Are you sure to delete empty directory \"" + fullPathName + "\" ?" builder.setMessage(getResources().getString( - R.string.jv_relaunch_del_em_dir_text1) + R.string.jv_relaunchx_del_em_dir_text1) + " \"" + fname + "\" " + getResources().getString( - R.string.jv_relaunch_del_em_dir_text2)); + R.string.jv_relaunchx_del_em_dir_text2)); // "Yes" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_yes), + getResources().getString(R.string.jv_relaunchx_yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3066,7 +3115,7 @@ public void onClick(DialogInterface dialog, }); // "No" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_no), + getResources().getString(R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3084,19 +3133,19 @@ public void onClick(DialogInterface dialog, AlertDialog.Builder builder = new AlertDialog.Builder(this); // "Delete non empty directory warning" builder.setTitle(getResources().getString( - R.string.jv_relaunch_del_ne_dir_title)); - // "Are you sure to delete non-empty directory \"" + fname + + R.string.jv_relaunchx_del_ne_dir_title)); + // "Are you sure to delete non-empty directory \"" + fullPathName + // "\" (dangerous) ?" builder.setMessage(getResources().getString( - R.string.jv_relaunch_del_ne_dir_text1) + R.string.jv_relaunchx_del_ne_dir_text1) + " \"" + fname + "\" " + getResources().getString( - R.string.jv_relaunch_del_ne_dir_text2)); + R.string.jv_relaunchx_del_ne_dir_text2)); // "Yes" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_yes), + getResources().getString(R.string.jv_relaunchx_yes), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3109,7 +3158,7 @@ public void onClick(DialogInterface dialog, }); // "No" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_no), + getResources().getString(R.string.jv_relaunchx_no), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3154,21 +3203,23 @@ public void onClick(DialogInterface dialog, else if ((fileOp == CNTXT_MENU_MOVE_FILE) || (fileOp == CNTXT_MENU_MOVE_DIR)) retCode = app.moveFile(src, dst); if (retCode) { - HashMap fitem = new HashMap(); - fitem.put("name", fileOpFile); - fitem.put("dname", dname); - fitem.put("fname", dname + "/" + fileOpFile); + FileDetails fitem = new FileDetails(); + fitem.name = fileOpFile; + fitem.directoryName = dname; + fitem.fullPathName = dname + File.separator + fileOpFile; if ((fileOp == CNTXT_MENU_MOVE_FILE) || (fileOp == CNTXT_MENU_COPY_FILE)) { - fitem.put("type", "file"); - fitem.put("reader", app.readerName(fileOpFile)); + String[] fparts = fileOpFile.split("[.]"); + fitem.extension = fparts.length > 1 ? fparts[fparts.length -1] : ""; + fitem.type = FsItemType.File; + fitem.reader = app.readerName(fileOpFile); if (prefs.getBoolean("showBookTitles", false)) - fitem.put("sname", app.dataBase.getEbookName(dname, fileOpFile, prefs.getString("bookTitleFormat", "%t[\n%a][. %s][-%n]"))); + fitem.displayName = getEbookName(dname, fileOpFile); else - fitem.put("sname", fileOpFile); + fitem.displayName = fileOpFile; } else if (fileOp == CNTXT_MENU_MOVE_DIR) { - fitem.put("sname", fileOpFile); - fitem.put("type", "dir"); - fitem.put("reader", "nope"); + fitem.displayName = fileOpFile; + fitem.type = FsItemType.Directory; + fitem.reader = "nope"; } itemsArray.add(fitem); fileOp = 0; @@ -3177,12 +3228,12 @@ else if ((fileOp == CNTXT_MENU_MOVE_FILE) || (fileOp == CNTXT_MENU_MOVE_DIR)) } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getResources().getString( - R.string.jv_relaunch_error_title)); + R.string.jv_relaunchx_error_title)); builder.setMessage(getResources().getString( - R.string.jv_relaunch_paste_fail_text) + R.string.jv_relaunchx_paste_fail_text) + " " + fileOpFile); builder.setNeutralButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3196,7 +3247,7 @@ public void onClick(DialogInterface dialog, case CNTXT_MENU_TAGS_RENAME: { final Context mThis = this; final String oldFullName = dname + "/" + fname; - String newName = app.dataBase.getEbookName(dname, fname, prefs.getString("bookTitleFormat", "%t[\n%a][. %s][-%n]")); + String newName = getEbookName(dname, fname); newName = newName.replaceAll("[\n\r]", ". "); if (fname.endsWith("fb2")) newName = newName.concat(".fb2"); @@ -3209,10 +3260,10 @@ else if (fname.endsWith("epub")) input.setText(newName); builder.setView(input); builder.setTitle(getResources().getString( - R.string.jv_relaunch_rename_title)); + R.string.jv_relaunchx_rename_title)); // "OK" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3220,19 +3271,19 @@ public void onClick(DialogInterface dialog, String newName = input.getText().toString().trim(); String newFullName = dname + "/" + newName; if (app.moveFile(oldFullName, newFullName)) { - itemsArray.get(pos).put("name", newName); - itemsArray.get(pos).put("sname", newName); - itemsArray.get(pos).put("fname", newFullName); + itemsArray.get(pos).name = newName; + itemsArray.get(pos).displayName = newName; + itemsArray.get(pos).fullPathName = newFullName; drawDirectory(dname, currentPosition); } else { AlertDialog.Builder builder = new AlertDialog.Builder(mThis); builder.setTitle(getResources().getString( - R.string.jv_relaunch_error_title)); + R.string.jv_relaunchx_error_title)); builder.setMessage(getResources().getString( - R.string.jv_relaunch_rename_fail_text) + R.string.jv_relaunchx_rename_fail_text) + " " + fname); builder.setNeutralButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3245,7 +3296,7 @@ public void onClick(DialogInterface dialog, }); // "Cancel" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), + getResources().getString(R.string.jv_relaunchx_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3266,10 +3317,10 @@ public void onClick(DialogInterface dialog, input.selectAll(); builder.setView(input); builder.setTitle(getResources().getString( - R.string.jv_relaunch_rename_title)); + R.string.jv_relaunchx_rename_title)); // "OK" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3277,19 +3328,19 @@ public void onClick(DialogInterface dialog, String newName = input.getText().toString().trim(); String newFullName = dname + "/" + newName; if (app.moveFile(oldFullName, newFullName)) { - itemsArray.get(pos).put("name", newName); - itemsArray.get(pos).put("sname", newName); - itemsArray.get(pos).put("fname", newFullName); + itemsArray.get(pos).name = newName; + itemsArray.get(pos).displayName = newName; + itemsArray.get(pos).fullPathName = newFullName; drawDirectory(dname, currentPosition); } else { AlertDialog.Builder builder = new AlertDialog.Builder(mThis); builder.setTitle(getResources().getString( - R.string.jv_relaunch_error_title)); + R.string.jv_relaunchx_error_title)); builder.setMessage(getResources().getString( - R.string.jv_relaunch_rename_fail_text) + R.string.jv_relaunchx_rename_fail_text) + " " + fname); builder.setNeutralButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3302,7 +3353,7 @@ public void onClick(DialogInterface dialog, }); // "Cancel" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), + getResources().getString(R.string.jv_relaunchx_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3320,10 +3371,10 @@ public void onClick(DialogInterface dialog, final EditText input = new EditText(this); builder.setView(input); builder.setTitle(getResources().getString( - R.string.jv_relaunch_create_folder_title)); + R.string.jv_relaunchx_create_folder_title)); // "OK" builder.setPositiveButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3335,25 +3386,25 @@ public void onClick(DialogInterface dialog, } String newFullName = dname + "/" + newName; if (app.createDir(newFullName)) { - HashMap fitem = new HashMap(); - fitem.put("name", newName); - fitem.put("sname", newName); - fitem.put("dname", dname); - fitem.put("fname", newFullName); - fitem.put("type", "dir"); - fitem.put("reader", "nope"); + FileDetails fitem = new FileDetails(); + fitem.name = newName; + fitem.displayName = newName; + fitem.directoryName = dname; + fitem.fullPathName = newFullName; + fitem.type = FsItemType.Directory; + fitem.reader = "nope"; itemsArray.add(fitem); // redrawList(); drawDirectory(dname, currentPosition); } else { AlertDialog.Builder builder = new AlertDialog.Builder(mThis); builder.setTitle(getResources().getString( - R.string.jv_relaunch_error_title)); + R.string.jv_relaunchx_error_title)); builder.setMessage(getResources().getString( - R.string.jv_relaunch_create_folder_fail_text) + R.string.jv_relaunchx_create_folder_fail_text) + " " + newFullName); builder.setNeutralButton( - getResources().getString(R.string.jv_relaunch_ok), + getResources().getString(R.string.jv_relaunchx_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3366,7 +3417,7 @@ public void onClick(DialogInterface dialog, }); // "Cancel" builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), + getResources().getString(R.string.jv_relaunchx_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -3406,6 +3457,12 @@ protected void onResume() { app.generalOnResume(TAG, this); refreshBottomInfo(); redrawList(); + + //It has to be here to anyhow start the service upon device boot. + //I have tried with BOOT_COMPLETED broadcast receiver but it does not work on Onyx :( + //The drawback is that I don't know how else I can lock the screen upon boot, I cannot do it + //here obviosly. + startService(new Intent(this, LockScreen.class)); } @Override @@ -3453,44 +3510,16 @@ public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) return true; if (keyCode == KeyEvent.KEYCODE_BACK) { - if (prefs.getBoolean("useBackButton", true)) { - String[] rootDirs = prefs.getString("startDir", "/sdcard").split(","); - for (int i = 0; i < rootDirs.length; i++) { - if (rootDirs[i].equalsIgnoreCase(currentRoot)) - isRoot = true; - } - if (currentRoot.equalsIgnoreCase("/")) + String[] rootDirs = prefs.getString("startDir", "/sdcard").split(","); + for (int i = 0; i < rootDirs.length; i++) { + if (rootDirs[i].equalsIgnoreCase(currentRoot)) isRoot = true; - if (!isRoot) { - String newRoot = currentRoot.substring(0, currentRoot.lastIndexOf("/")); - drawDirectory(newRoot, -1); - } } - if ((isRoot) || (!prefs.getBoolean("useBackButton", true))) { - // Ask the user if they want to quit - new AlertDialog.Builder(this) - .setIcon(android.R.drawable.ic_dialog_alert) - // "This is a launcher!" - .setTitle( - getResources().getString( - R.string.jv_relaunch_launcher)) - // "Are you sure you want to quit ?" - .setMessage( - getResources().getString( - R.string.jv_relaunch_launcher_text)) - // "YES" - .setPositiveButton( - getResources().getString(R.string.jv_relaunch_yes), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, - int which) { - finish(); - } - }) - // "NO" - .setNegativeButton( - getResources().getString(R.string.jv_relaunch_no), - null).show(); + if (currentRoot.equalsIgnoreCase("/")) + isRoot = true; + if (!isRoot) { + String newRoot = currentRoot.substring(0, currentRoot.lastIndexOf("/")); + drawDirectory(newRoot, -1); } return true; } else { @@ -3518,7 +3547,7 @@ private void menuLastopened() { intent.putExtra("list", "lastOpened"); // "Last opened" intent.putExtra("title", - getResources().getString(R.string.jv_relaunch_lru)); + getResources().getString(R.string.jv_relaunchx_lru)); intent.putExtra("rereadOnStart", true); startActivity(intent); } @@ -3528,7 +3557,7 @@ private void menuFavorites() { intent.putExtra("list", "favorites"); // "Favorites" intent.putExtra("title", - getResources().getString(R.string.jv_relaunch_fav)); + getResources().getString(R.string.jv_relaunchx_fav)); intent.putExtra("rereadOnStart", true); setEinkController(); // ??? not needed startActivity(intent); @@ -3559,7 +3588,7 @@ private void menuHome() { } AlertDialog.Builder builder = new AlertDialog.Builder(ReLaunch.this); // "Select home directory" - builder.setTitle(R.string.jv_relaunch_home); + builder.setTitle(R.string.jv_relaunchx_home); builder.setSingleChoiceItems(hhomes, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { @@ -3568,7 +3597,7 @@ public void onClick(DialogInterface dialog, int i) { } }); builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), + getResources().getString(R.string.jv_relaunchx_cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); @@ -3592,7 +3621,7 @@ private void screenHome() { Intent intent = new Intent(ReLaunch.this, ResultsActivity.class); intent.putExtra("list", "homeList"); intent.putExtra("title", - getResources().getString(R.string.jv_relaunch_home)); + getResources().getString(R.string.jv_relaunchx_home)); intent.putExtra("rereadOnStart", true); startActivity(intent); } @@ -3617,72 +3646,110 @@ private void hideLayout(int id) { v.setLayoutParams(p); } - @SuppressWarnings("unchecked") - private List> sortFiles( - List> array, String field, boolean order) { - class ArrayComparator implements Comparator { - String key; - - ArrayComparator(String key) { - this.key = key; + private List sortFiles(List list, SortKey sortKey, SortMode sortMode) { + class FileDetailsComparator implements Comparator { + SortKey primaryKey = null; + SortKey secondaryKey = null; + SortMode mode = null; + + FileDetailsComparator(SortKey primarykey, SortMode mode) { + this.mode = mode; + this.primaryKey = primarykey; + if (primarykey == SortKey.FileExtension + || primarykey == SortKey.FileDate + || primarykey == SortKey.FileSize) { + this.secondaryKey = SortKey.FileName; + } + } + + private int compareProperty(FileDetails lhs, FileDetails rhs, SortKey sortKey, SortMode sortMode) { + int ret = 0; + switch(sortKey) { + case BookTitle: + ret = lhs.displayName.compareToIgnoreCase(rhs.displayName); + break; + case FileName: + ret = lhs.name.compareToIgnoreCase(rhs.name); + break; + case FileExtension: + ret = lhs.extension.compareToIgnoreCase(rhs.extension); + break; + case FileDate: + ret = lhs.date.compareTo(rhs.date); + break; + case FileSize: + ret = ((Long)lhs.size).compareTo((Long)rhs.size); + break; + default: + Log.e("FileDitailsCompare", "Comparator not implemented for mode: " + sortMode); + } + return (sortMode == SortMode.Ascending)? ret : ret * -1; } public int compare(Object lhs, Object rhs) { - return ((HashMap) lhs).get(key) - .compareToIgnoreCase( - ((HashMap) rhs).get(key)); - } - } - Object[] arr = array.toArray(); - ArrayComparator comparator = new ArrayComparator(field); - Arrays.sort(arr, comparator); - List> ret = new ArrayList>(); - if (order) { - for (int i = 0; i < arr.length; i++) - ret.add((HashMap) arr[i]); - } else { - for (int i = arr.length - 1; i >=0; i--) - ret.add((HashMap) arr[i]); + int eq = compareProperty((FileDetails) lhs, (FileDetails) rhs, primaryKey, mode); + if (eq == 0 && secondaryKey != null) { + eq = compareProperty((FileDetails) lhs, (FileDetails) rhs, secondaryKey, SortMode.Ascending); + } + + return eq; + } } - return ret; + FileDetailsComparator comparator = new FileDetailsComparator(sortKey, sortMode); + Collections.sort(list, comparator); + return list; } private void menuSort() { final String[] orderList; + final int currentSortKey[] = new int[1]; + if (prefs.getBoolean("showBookTitles", false)) { - orderList = new String[4]; - orderList[0] = getString(R.string.jv_relaunch_sort_file_dir); - orderList[1] = getString(R.string.jv_relaunch_sort_file_rev); - orderList[2] = getString(R.string.jv_relaunch_sort_title_dir); - orderList[3] = getString(R.string.jv_relaunch_sort_title_rev); - } else { orderList = new String[2]; - orderList[0] = getString(R.string.jv_relaunch_sort_file_dir); - orderList[1] = getString(R.string.jv_relaunch_sort_file_rev); + orderList[0] = getString(R.string.jv_relaunchx_sort_title); + orderList[1] = getString(R.string.jv_relaunchx_sort_file); + } else { + orderList = new String[4]; + orderList[0] = getString(R.string.jv_relaunchx_sort_file); + orderList[1] = getString(R.string.jv_relaunchx_sort_extension); + orderList[2] = getString(R.string.jv_relaunchx_sort_size); + orderList[3] = getString(R.string.jv_relaunchx_sort_date); } - int sortMode = prefs.getInt("sortMode", 0); - if (sortMode > orderList.length - 1) - sortMode = 0; + int sortKey = prefs.getInt("sortKey", 0); + if (sortKey > orderList.length - 1) + sortKey = 0; + currentSortKey[0] = sortKey; + + DialogInterface.OnClickListener onApplySorting = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + SharedPreferences.Editor editor = prefs.edit(); + int sortOrder = 1; + if (which == -1) + sortOrder = 0; //Ascending + editor.putInt("sortOrder", sortOrder); + editor.putInt("sortKey", currentSortKey[0]); + editor.commit(); + setSortMode(currentSortKey[0], sortOrder); + dialog.dismiss(); + drawDirectory(currentRoot, -1); + } + }; + AlertDialog.Builder builder = new AlertDialog.Builder(ReLaunch.this); - builder.setTitle(R.string.jv_relaunch_sort_header); - builder.setSingleChoiceItems(orderList, sortMode, + builder.setTitle(R.string.jv_relaunchx_sort_header); + builder.setSingleChoiceItems(orderList, currentSortKey[0], new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { - SharedPreferences.Editor editor = prefs.edit(); - editor.putInt("sortMode", i); - editor.commit(); - setSortMode(i); - dialog.dismiss(); - drawDirectory(currentRoot, -1); - } - }); - builder.setNegativeButton( - getResources().getString(R.string.jv_relaunch_cancel), - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - dialog.dismiss(); + currentSortKey[0] = i; } }); + builder.setPositiveButton( + getResources().getString(R.string.jv_relaunchx_sort_asc), + onApplySorting); + builder.setNegativeButton( + getResources().getString(R.string.jv_relaunchx_sort_dsc), + onApplySorting); builder.show(); } @@ -3698,22 +3765,25 @@ public void onDestroy() { super.onDestroy(); } - private void setSortMode(int i) { - if ((!prefs.getBoolean("showBookTitles", false)) && (i > 1)) - i = 0; - if (i == SORT_FILES_ASC) { - sortType[0] = "name"; - sortOrder[0] = true; - } else if (i == SORT_FILES_DESC) { - sortType[0] = "name"; - sortOrder[0] = false; - } else if (i == SORT_TITLES_ASC) { - sortType[0] = "sname"; - sortOrder[0] = true; - } else if (i == SORT_TITLES_DESC) { - sortType[0] = "sname"; - sortOrder[0] = false; - } + private void setSortMode(int key, int mode) { + if ((!prefs.getBoolean("showBookTitles", false))) { + key += 1; //Skip stort by Book Title enum value. + if (key > 3) { + Log.e("SortKey", "Index outside of enum: ShowBookTitles=false, index " + key); + key = 0; + } + } else { + if (key > 1) { + Log.e("SortKey", "Index outside of enum: ShowBookTitle=true, index " + key); + key = 0; + } + } + if (mode > 1) { + Log.e("SortOrder", "Index outside of enum: index " + mode); + mode = 0; + } + sortKey = SortKey.values()[key]; + sortMode = SortMode.values()[mode]; } @Override @@ -3785,9 +3855,9 @@ private void showBookInfo(String file) { final int COVER_MAX_W = 280; Bitmap cover = null; final Dialog dialog = new Dialog(this, android.R.style.Theme_Light_NoTitleBar_Fullscreen); - dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.bookinfo); - + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, dialog.findViewById(R.id.linearLayoutTop)); + Parser parser = new InstantParser(); EBook eBook = parser.parse(file, true); if (eBook.cover != null) { @@ -3850,6 +3920,7 @@ public void onClick(View v) { } }); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); dialog.show(); } @@ -3857,45 +3928,56 @@ private void showFileInfo(String filename) { File file = new File(filename); final Dialog dialog = new Dialog(this); - dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); -// dialog.setTitle(getString(R.string.jv_relaunch_fileinfo_title)); + if (file.isDirectory()) { + dialog.setTitle(getString(R.string.jv_relaunchx_fileinfo_title2)); + } else { + dialog.setTitle(getString(R.string.jv_relaunchx_fileinfo_title)); + } dialog.setContentView(R.layout.fileinfo); + LinearLayout llSize = (LinearLayout) dialog.findViewById(R.id.llSize); if (file.isDirectory()) llSize.setVisibility(View.GONE); TextView tv = (TextView) dialog.findViewById(R.id.tvName); tv.setText(file.getName()); tv = (TextView) dialog.findViewById(R.id.tvSize); - tv.setText(file.length() + " bytes"); + tv.setText(FileSystem.bytesToString(file.length()) + " (" + file.length() + " bytes)"); tv = (TextView) dialog.findViewById(R.id.tvTime); tv.setText((new Date(file.lastModified())).toLocaleString()); - String fileAttr = null; - try { - Runtime rt = Runtime.getRuntime(); - String[] args = {"ls", "-l", filename}; - Process proc = rt.exec(args); - String str = filename.replace(" ", "\\ "); - BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); - int read; - char[] buffer = new char[4096]; - StringBuffer output = new StringBuffer(); - while ((read = br.read(buffer)) > 0) { - output.append(buffer, 0, read); - } - br.close(); - proc.waitFor(); - fileAttr = output.toString(); - } catch (Throwable t) { - } - fileAttr = fileAttr.replaceAll(" +", " "); - int iPerm = fileAttr.indexOf(" "); - int iOwner = fileAttr.indexOf(" ", iPerm+1); - int iGroup = fileAttr.indexOf(" ", iOwner+1); - tv = (TextView) dialog.findViewById(R.id.tvPerm); - tv.setText(fileAttr.substring(1, iPerm)); - tv = (TextView) dialog.findViewById(R.id.tvOwner); - tv.setText(fileAttr.substring(iPerm + 1, iOwner)+ "/" + fileAttr.substring(iOwner + 1, iGroup)); - + if (DeviceInfo.isRooted()) { + String fileAttr = null; + try { + Runtime rt = Runtime.getRuntime(); + String[] args = {"ls", "-l", filename}; + Process proc = rt.exec(args); + BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); + int read; + char[] buffer = new char[4096]; + StringBuffer output = new StringBuffer(); + while ((read = br.read(buffer)) > 0) { + output.append(buffer, 0, read); + } + br.close(); + proc.waitFor(); + fileAttr = output.toString(); + } catch (Throwable t) { + } + if (!"".equals(fileAttr)) { + fileAttr = fileAttr.replaceAll(" +", " "); + int iPerm = fileAttr.indexOf(" "); + int iOwner = fileAttr.indexOf(" ", iPerm + 1); + int iGroup = fileAttr.indexOf(" ", iOwner + 1); + tv = (TextView) dialog.findViewById(R.id.tvPerm); + tv.setText(fileAttr.substring(1, iPerm)); + tv = (TextView) dialog.findViewById(R.id.tvOwner); + tv.setText(fileAttr.substring(iPerm + 1, iOwner) + "/" + fileAttr.substring(iOwner + 1, iGroup)); + } + } else { + dialog.findViewById(R.id.tvPerm).setVisibility(View.GONE); + dialog.findViewById(R.id.tvPermLabel).setVisibility(View.GONE); + dialog.findViewById(R.id.tvOwner).setVisibility(View.GONE); + dialog.findViewById(R.id.tvOwnerLabel).setVisibility(View.GONE); + } Button btn = (Button) dialog.findViewById(R.id.btnOk); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -3906,5 +3988,59 @@ public void onClick(View v) { dialog.show(); } - + public String getEbookName(String dir, String file) { + String format = prefs.getString("bookTitleFormat", "%t[\n%a][. %s][-%n]"); + String fileName = dir + File.separator + file; + EBook eBook; + if ((!file.endsWith("fb2")) && (!file.endsWith("fb2.zip")) + && (!file.endsWith("epub"))) + return file; + eBook = app.dataBase.getBookByFileName(fileName); + if (!eBook.isOk) { + Parser parser = new InstantParser(); + eBook = parser.parse(fileName); + if (eBook.isOk) { + if ((eBook.sequenceNumber != null) + && (eBook.sequenceNumber.length() == 1)) + eBook.sequenceNumber = "0" + eBook.sequenceNumber; + app.dataBase.addBook(eBook); + } + } + if (eBook.isOk) { + String output = format; + if (eBook.authors.size() > 0) { + String author = ""; + if (eBook.authors.get(0).firstName != null) + author += eBook.authors.get(0).firstName; + if (eBook.authors.get(0).lastName != null) + author += " " + eBook.authors.get(0).lastName; + if (author.trim().compareTo("") != 0) + output = output.replace("%a", author); + else + output = output.replace("%a", getResources().getString(R.string.jv_bookbase_noauthor)); + } else { + output = output.replace("%a", getResources().getString(R.string.jv_bookbase_noauthor)); + } + + if (eBook.title != null) + output = output.replace("%t", eBook.title); + else + output = output.replace("%t", getResources().getString(R.string.jv_bookbase_notitle)); + if (eBook.sequenceName != null) + output = output.replace("%s", eBook.sequenceName); + else + output = output.replace("%s", ""); + if (eBook.sequenceNumber != null) + output = output.replace("%n", eBook.sequenceNumber); + else + output = output.replace("%n", ""); + output = output.replace("%f", fileName); + Pattern purgeBracketsPattern = Pattern.compile("\\[[\\s\\.\\-_]*\\]"); + output = purgeBracketsPattern.matcher(output).replaceAll(""); + output = output.replace("[", ""); + output = output.replace("]", ""); + return output; + } else + return file; + } } diff --git a/src/com/harasoft/relaunch/ReLaunchApp.java b/app/src/main/java/com/gacode/relaunchx/ReLaunchApp.java similarity index 91% rename from src/com/harasoft/relaunch/ReLaunchApp.java rename to app/src/main/java/com/gacode/relaunchx/ReLaunchApp.java index 6bb56fd..0f8d542 100644 --- a/src/com/harasoft/relaunch/ReLaunchApp.java +++ b/app/src/main/java/com/gacode/relaunchx/ReLaunchApp.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.BufferedReader; import java.io.File; @@ -26,8 +26,12 @@ import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.Build; +import android.os.StrictMode; import android.preference.PreferenceManager; import android.util.Log; +import android.view.View; +import android.view.ViewConfiguration; import android.view.Window; import android.view.WindowManager; import android.webkit.WebView; @@ -74,8 +78,8 @@ public class ReLaunchApp extends Application { public int FLT_NEW_AND_READING; public boolean filters_and; - public final String BACKUP_DIR = "/sdcard/.relaunch"; - public final String DATA_DIR = "/data/data/com.harasoft.relaunch"; + public final String BACKUP_DIR = "/sdcard/.relaunchx"; + public final String DATA_DIR = "/data/data/com.gacode.relaunchx"; public HashMap history = new HashMap(); public HashMap columns = new HashMap(); @@ -302,7 +306,7 @@ public void addToList(String listName, String fullName, Boolean addToEnd, // existence anyway. // directory name is a full file name in such case. filename is // a READ/NEW mark - // File f = new File(dname); + // File f = new File(directoryName); // if (!f.exists()) // return; addToList_internal(listName, dname, fname, addToEnd); @@ -699,7 +703,7 @@ public void About(final Activity a) { AlertDialog.Builder builder = new AlertDialog.Builder(a); WebView wv = new WebView(a); - builder.setTitle("ReLaunch"); + builder.setTitle("About"); // String str = "

ReLaunch

" // + "
Reader launcher for Nook Simple Touch

" // + "
Version: " + vers + "

" @@ -707,6 +711,21 @@ public void About(final Activity a) { // "
Source code: git://github.com/yiselieren/ReLaunch.git
"; String str = getResources().getString(R.string.jv_rla_about_prev) + vers + getResources().getString(R.string.jv_rla_about_post); + if (!DeviceInfo.isCompatibleDevice(a.getApplication())) { + str += "
ReLaunchX has not been tested on this device yet. Let us know how it works for you.
"; + } else { + str += "
ReLaunchX has been reported to work well on this device but there may be insufficient testing.
"; + } + + str += "" + + "" + + "" + + "" + + "" + + "" + + "" + + "
DEVICE:" + Build.DEVICE + "
MANUFACTURER: " + Build.MANUFACTURER + "
MODEL:" + Build.MODEL + "
PRODUCT:" + Build.PRODUCT + "
Android:" + Build.VERSION.RELEASE + "
API level:" + Build.VERSION.SDK + "
" + ; wv.loadDataWithBaseURL(null, str, "text/html", "utf-8", null); builder.setView(wv); // "Ok" @@ -753,14 +772,23 @@ public void onClick(DialogInterface dialog, public void setFullScreenIfNecessary(Activity a) { if (fullScreen) { - a.requestWindowFeature(Window.FEATURE_NO_TITLE); - a.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); + if (Build.VERSION.SDK_INT >= 14) { + a.sendBroadcast(new Intent("hide_status_bar")); + } else { + a.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + } else { + if (Build.VERSION.SDK_INT >= 14) { + a.sendBroadcast(new Intent("show_status_bar")); + } else { + a.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } } } public void generalOnResume(String name, Activity a) { Log.d(TAG, "--- onResume(" + name + ")"); + setFullScreenIfNecessary(a); } public boolean copyPrefs(String from, String to) { @@ -785,8 +813,8 @@ public boolean copyPrefs(String from, String to) { String dst = toDir.getAbsolutePath() + "/files/" + f; copyFile(src, dst, true); } - String src = fromDir.getAbsolutePath() + "/shared_prefs/com.harasoft.relaunch_preferences.xml"; - String dst = toDir.getAbsolutePath() + "/shared_prefs/com.harasoft.relaunch_preferences.xml"; + String src = fromDir.getAbsolutePath() + "/shared_prefs/com.gacode.relaunchx_preferences.xml"; + String dst = toDir.getAbsolutePath() + "/shared_prefs/com.gacode.relaunchx_preferences.xml"; // boolean ret = copyFile(src, dst, true); if (!copyFile(src, dst, true)) return false; @@ -820,4 +848,13 @@ public void addStartDir(String dir) { editor.commit(); } + @Override + public void onCreate() + { + super.onCreate(); + +// StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() +// .detectAll() +// .build()); + } } diff --git a/src/com/harasoft/relaunch/ResultsActivity.java b/app/src/main/java/com/gacode/relaunchx/ResultsActivity.java similarity index 91% rename from src/com/harasoft/relaunch/ResultsActivity.java rename to app/src/main/java/com/gacode/relaunchx/ResultsActivity.java index 51d314a..e19e8c2 100644 --- a/src/com/harasoft/relaunch/ResultsActivity.java +++ b/app/src/main/java/com/gacode/relaunchx/ResultsActivity.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.File; import java.util.ArrayList; @@ -10,8 +10,6 @@ import java.util.regex.Pattern; import ebook.EBook; -import ebook.parser.InstantParser; -import ebook.parser.Parser; import android.app.Activity; import android.app.AlertDialog; @@ -30,7 +28,6 @@ import android.preference.PreferenceManager; import android.text.SpannableString; import android.text.style.StyleSpan; -import android.util.TypedValue; import android.view.ContextMenu; import android.view.GestureDetector; import android.view.LayoutInflater; @@ -69,6 +66,7 @@ public class ResultsActivity extends Activity { final int CNTXT_MENU_MARK_READING = 7; final int CNTXT_MENU_MARK_FORGET = 8; final int CNTXT_MENU_RMDIR = 9; + final int CNTXT_MENU_REMOVE_HISTORY = 10; ReLaunchApp app; HashMap icons; String listName; @@ -206,10 +204,8 @@ public int compare(String a, String b) { TextView tv1 = holder.tv1; TextView tv2 = holder.tv2; - tv2.setTextSize(TypedValue.COMPLEX_UNIT_PX, Integer.parseInt(prefs - .getString("firstLineFontSizePx", "20"))); - tv1.setTextSize(TypedValue.COMPLEX_UNIT_PX, Integer.parseInt(prefs - .getString("secondLineFontSizePx", "16"))); + SizeManipulation.AdjustWithPreferencesFileListLine1(app, prefs, tv2); + SizeManipulation.AdjustWithPreferencesFileListLine2(app, prefs, tv1); LinearLayout tvHolder = holder.tvHolder; ImageView iv = holder.iv; @@ -223,10 +219,10 @@ public int compare(String a, String b) { } HashMap item = itemsArray.get(position); if (item != null) { - String fname = item.get("fname"); - String sname = item.get("sname"); - String dname = item.get("dname"); - String sdname = item.get("dname"); + String fname = item.get("fullPathName"); + String sname = item.get("displayName"); + String dname = item.get("directoryName"); + String sdname = item.get("directoryName"); String fullName = dname + "/" + fname; boolean setBold = false; boolean useFaces = prefs.getBoolean("showNew", true); @@ -287,55 +283,33 @@ public int compare(String a, String b) { } // setup icon - if (prefs.getString("firstLineIconSizePx", "48").equals("0")) { - iv.setVisibility(View.GONE); - } else { - Drawable d = app.specialIcon(fullName, item.get("type") - .equals("dir")); + if (SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv)) + { + Drawable d = app.specialIcon(fullName, item.get("type").equals("dir")); if (d != null) - iv.setImageBitmap(scaleDrawable(d, Integer - .parseInt(prefs.getString( - "firstLineIconSizePx", "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, d); else { String rdrName = app.readerName(fname); if (rdrName.equals("Nope")) { File f = new File(fullName); if (f.length() > app.viewerMax) - iv.setImageBitmap(scaleDrawableById( - R.drawable.file_notok, Integer - .parseInt(prefs.getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.file_notok); else - iv.setImageBitmap(scaleDrawableById( - R.drawable.file_ok, Integer - .parseInt(prefs.getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.file_ok); } else if (rdrName.startsWith("Intent:")) - iv.setImageBitmap(scaleDrawableById( - R.drawable.icon, Integer.parseInt(prefs - .getString("firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.icon); else { if (icons.containsKey(rdrName)) - iv.setImageBitmap(scaleDrawable(icons - .get(rdrName), - Integer.parseInt(prefs.getString( - "firstLineIconSizePx", "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, icons.get(rdrName)); else - iv.setImageBitmap(scaleDrawableById( - R.drawable.file_ok, Integer - .parseInt(prefs.getString( - "firstLineIconSizePx", - "48")))); + SizeManipulation.AassignWithPreferencesIcon(app, prefs, iv, R.drawable.file_ok); } } } - // special cases in dname & fname - // dname empty - in root dir - // fname empty with dname empty - root dir as is + // special cases in directoryName & fullPathName + // directoryName empty - in root dir + // fullPathName empty with directoryName empty - root dir as is if (dname.equals("")) { dname = "/"; sdname = "/"; @@ -388,43 +362,15 @@ public int compare(String a, String b) { } } - private Integer Percentile(ArrayList values, Integer Quantile) - // not fully "mathematical proof", but not too difficult and working - { - Collections.sort(values); - Integer index = (values.size() * Quantile) / 100; - return values.get(index); - } - private Integer getAutoColsNum() { - // implementation - via percentiles len - Integer auto_cols_num = 1; - ArrayList tmp = new ArrayList(); + ArrayList textLength = new ArrayList(); if (itemsArray.size() > 0) { - Integer factor = 0; for (Integer i = 0; i < itemsArray.size(); i++) { - tmp.add(itemsArray.get(i).get("fname").length()); - } - String pattern = prefs.getString("columnsAlgIntensity", - "70 3:5 7:4 15:3 48:2"); // default - medium - String[] spat = pattern.split("[\\s\\:]+"); - Integer quantile = Integer.parseInt(spat[0]); - factor = Percentile(tmp, quantile); - for (Integer i = 1; i < spat.length; i = i + 2) { - try { - double fval = Double.parseDouble(spat[i]); - int cval = Integer.parseInt(spat[i + 1]); - if (factor <= fval) { - auto_cols_num = cval; - break; - } - } catch (Exception e) { - } + textLength.add(itemsArray.get(i).get("fullPathName").length()); } } - if (auto_cols_num > itemsArray.size()) - auto_cols_num = itemsArray.size(); - return auto_cols_num; + + return SizeManipulation.AutoColumnsNumber(app, prefs, textLength); } private void redrawList() { @@ -433,8 +379,8 @@ private void redrawList() { List> newItemsArray = new ArrayList>(); for (HashMap item : itemsArray) { - if (app.filterFile(item.get("dname"), item.get("fname")) - || item.get("type").equals("dir")) + if (item.get("type").equals("dir") + || app.filterFile(item.get("directoryName"), item.get("fullPathName"))) newItemsArray.add(item); } itemsArray = newItemsArray; @@ -481,29 +427,28 @@ private void start(Intent i) { private void createItemsArray() { itemsArray = new ArrayList>(); for (String[] n : app.getList(listName)) { - if (!prefs.getBoolean("filterResults", false) - || (prefs.getBoolean("filterResults", false) && app - .filterFile(n[0], n[1])) - || (n[1].equals(app.DIR_TAG))) { + if (n[1].equals(app.DIR_TAG) + || !prefs.getBoolean("filterResults", false) + || app.filterFile(n[0], n[1])) { HashMap item = new HashMap(); - item.put("dname", n[0]); - item.put("fname", n[1]); - item.put("sname", n[1]); + item.put("directoryName", n[0]); + item.put("fullPathName", n[1]); + item.put("displayName", n[1]); if (n[1].equals(app.DIR_TAG)) { int ind = n[0].lastIndexOf('/'); if (ind == -1) { - item.put("fname", ""); - item.put("sname", ""); + item.put("fullPathName", ""); + item.put("displayName", ""); } else { - item.put("fname", n[0].substring(ind + 1)); - item.put("sname", n[0].substring(ind + 1)); - item.put("dname", n[0].substring(0, ind)); + item.put("fullPathName", n[0].substring(ind + 1)); + item.put("displayName", n[0].substring(ind + 1)); + item.put("directoryName", n[0].substring(0, ind)); } item.put("type", "dir"); } else { item.put("type", "file"); if (prefs.getBoolean("showBookTitles", false)) - item.put("sname", getEbookName(n[0], n[1])); + item.put("displayName", getEbookName(n[0], n[1])); } itemsArray.add(item); } @@ -658,7 +603,7 @@ public void onClick(View v) { ResultsActivity.this); // "Select application" builder.setTitle(getResources().getString( - R.string.jv_relaunch_select_columns)); + R.string.jv_relaunchx_select_columns)); builder.setSingleChoiceItems(columnsmode, checked, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int i) { @@ -784,7 +729,7 @@ public void onItemClick(AdapterView parent, View view, HashMap item = itemsArray.get(position); - String fullName = item.get("dname") + "/" + item.get("fname"); + String fullName = item.get("directoryName") + "/" + item.get("fullPathName"); currentPosition = parent.getFirstVisiblePosition(); if (item.get("type").equals("dir")) { Intent intent = new Intent(ResultsActivity.this, @@ -798,7 +743,7 @@ public void onItemClick(AdapterView parent, View view, oldHome = ReLaunch.useHome; startActivityForResult(intent, ReLaunch.DIR_ACT); } else { - String fileName = item.get("fname"); + String fileName = item.get("fullPathName"); if (!app.specialAction(ResultsActivity.this, fullName)) { if (app.readerName(fileName).equals("Nope")) app.defaultAction(ResultsActivity.this, fullName); @@ -806,7 +751,7 @@ public void onItemClick(AdapterView parent, View view, // Launch reader if (app.askIfAmbiguous) { List rdrs = app.readerNames(item - .get("fname")); + .get("fullPathName")); if (rdrs.size() < 1) return; else if (rdrs.size() == 1) @@ -866,7 +811,7 @@ public void onClick( upScroll.setText(app.scrollStep + "%"); } else { upScroll.setText(getResources() - .getString(R.string.jv_relaunch_prev)); + .getString(R.string.jv_relaunchx_prev)); } class upScrlSimpleOnGestureListener extends SimpleOnGestureListener { @Override @@ -983,7 +928,7 @@ public void run() { downScroll.setText(app.scrollStep + "%"); } else { downScroll.setText(getResources().getString( - R.string.jv_relaunch_next)); + R.string.jv_relaunchx_next)); } class dnScrlSimpleOnGestureListener extends SimpleOnGestureListener { @Override @@ -1069,6 +1014,8 @@ public boolean onTouch(View v, MotionEvent event) { } }); ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutNavigate)); } @Override @@ -1137,8 +1084,8 @@ public void onCreateContextMenu(ContextMenu menu, View v, AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; int pos = info.position; HashMap i = itemsArray.get(pos); - final String dr = i.get("dname"); - final String fn = i.get("fname"); + final String dr = i.get("directoryName"); + final String fn = i.get("fullPathName"); String fullName = dr + "/" + fn; if (listName.equals("homeList")) { @@ -1213,6 +1160,9 @@ else if (app.history.get(fullName) == app.FINISHED) getResources().getString( R.string.jv_results_delete_file)); // "Cancel" + menu.add(Menu.NONE, CNTXT_MENU_REMOVE_HISTORY, Menu.NONE, + getResources() + .getString(R.string.jv_relaunchx_rem_from_history)); menu.add(Menu.NONE, CNTXT_MENU_CANCEL, Menu.NONE, getResources() .getString(R.string.jv_results_cancel)); } else if (listName.equals("searchResults")) { @@ -1265,8 +1215,8 @@ public boolean onContextItemSelected(MenuItem item) { .getMenuInfo(); final int pos = info.position; HashMap i = itemsArray.get(pos); - final String dname = i.get("dname"); - final String fname = i.get("fname"); + final String dname = i.get("directoryName"); + final String fname = i.get("fullPathName"); String fullName = dname + "/" + fname; switch (item.getItemId()) { @@ -1285,6 +1235,11 @@ public boolean onContextItemSelected(MenuItem item) { app.saveList("history"); redrawList(); break; + case CNTXT_MENU_REMOVE_HISTORY: + app.removeFromList("lastOpened", fullName); + itemsArray.remove(pos); + redrawList(); + break; case CNTXT_MENU_RMFAV: if (i.get("type").equals("dir")) { app.removeFromList("favorites", fullName, app.DIR_TAG); @@ -1336,7 +1291,7 @@ public boolean onContextItemSelected(MenuItem item) { // "Delete file warning" builder.setTitle(getResources().getString( R.string.jv_results_delete_file_title)); - // "Are you sure to delete file \"" + fname + "\" ?"); + // "Are you sure to delete file \"" + fullPathName + "\" ?"); builder.setMessage(getResources().getString( R.string.jv_results_delete_file_text1) + " \"" @@ -1381,7 +1336,7 @@ public void onClick(DialogInterface dialog, // "Delete empty directory warning" builder.setTitle(getResources().getString( R.string.jv_results_delete_em_dir_title)); - // "Are you sure to delete empty directory \"" + fname + + // "Are you sure to delete empty directory \"" + fullPathName + // "\" ?"); builder.setMessage(getResources().getString( R.string.jv_results_delete_em_dir_text1) @@ -1423,7 +1378,7 @@ public void onClick(DialogInterface dialog, // "Delete non empty directory warning" builder.setTitle(getResources().getString( R.string.jv_results_delete_ne_dir_title)); - // "Are you sure to delete non-empty directory \"" + fname + + // "Are you sure to delete non-empty directory \"" + fullPathName + // "\" (dangerous) ?"); builder.setMessage(getResources().getString( R.string.jv_results_delete_ne_dir_text1) diff --git a/src/com/harasoft/relaunch/SView.java b/app/src/main/java/com/gacode/relaunchx/SView.java similarity index 98% rename from src/com/harasoft/relaunch/SView.java rename to app/src/main/java/com/gacode/relaunchx/SView.java index 58c19e2..2e0c7b1 100644 --- a/src/com/harasoft/relaunch/SView.java +++ b/app/src/main/java/com/gacode/relaunchx/SView.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.content.Context; import android.content.SharedPreferences; diff --git a/src/com/harasoft/relaunch/ScreenOrientation.java b/app/src/main/java/com/gacode/relaunchx/ScreenOrientation.java similarity index 94% rename from src/com/harasoft/relaunch/ScreenOrientation.java rename to app/src/main/java/com/gacode/relaunchx/ScreenOrientation.java index 56b4504..294abd5 100644 --- a/src/com/harasoft/relaunch/ScreenOrientation.java +++ b/app/src/main/java/com/gacode/relaunchx/ScreenOrientation.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.app.Activity; import android.content.SharedPreferences; diff --git a/src/com/harasoft/relaunch/SearchActivity.java b/app/src/main/java/com/gacode/relaunchx/SearchActivity.java similarity index 89% rename from src/com/harasoft/relaunch/SearchActivity.java rename to app/src/main/java/com/gacode/relaunchx/SearchActivity.java index d687c4b..2ee59fd 100644 --- a/src/com/harasoft/relaunch/SearchActivity.java +++ b/app/src/main/java/com/gacode/relaunchx/SearchActivity.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.File; import java.util.ArrayList; @@ -36,11 +36,12 @@ public class SearchActivity extends Activity { int SEARCH_PATH; SharedPreferences prefs; - Spinner searchAs; + CheckBox searchRegexp; Spinner searchIn; CheckBox searchCase; CheckBox searchKnown; CheckBox searchSort; + CheckBox searchIncHidden; EditText searchRoot; EditText searchTxt; Button searchButton; @@ -85,6 +86,7 @@ public AsyncTask createAsyncTask() { Boolean case_sens; Boolean known_only; Boolean regexp; + Boolean incHidden; String pattern; Boolean search_sort; int search_mode; @@ -114,9 +116,15 @@ private void addToResults(String dname, String fname, } } - private void compareAdd(String dname, String fname, - String fullPath, boolean is_dir) { + private void compareAdd(String dname, String fname, String fullPath, boolean is_dir) { String item; // Item for comparison + if (incHidden == false) { + String[] parts = fullPath.split("/"); + for(String part : parts) { + if (part.startsWith(".") == true) + return; + } + } if (search_mode == SEARCH_FILE) { if (known_only && app.readerName(fname).equals("Nope")) return; @@ -219,20 +227,22 @@ protected String doInBackground(Boolean... params) { case_sens = false; known_only = true; regexp = true; + incHidden = true; pattern = ".*"; addEntries(root); } else { case_sens = searchCase.isChecked(); known_only = searchKnown.isChecked(); - regexp = searchAs.getSelectedItemPosition() == 1; + regexp = searchRegexp.isChecked(); + incHidden = searchIncHidden.isChecked(); pattern = searchTxt.getText().toString(); search_mode = searchIn.getSelectedItemPosition(); // Save all specific search settings editor.putBoolean("searchCase", case_sens); editor.putBoolean("searchKnown", known_only); - editor.putInt("searchAs", - searchAs.getSelectedItemPosition()); + editor.putBoolean("searchRegexp", regexp); + editor.putBoolean("searchIncHidden", incHidden); editor.putInt("searchIn", searchIn.getSelectedItemPosition()); editor.putString("searchRoot", root); @@ -309,8 +319,9 @@ protected void onCreate(Bundle savedInstanceState) { imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); searchCase = (CheckBox) findViewById(R.id.search_case); searchKnown = (CheckBox) findViewById(R.id.search_books_only); + searchIncHidden = (CheckBox) findViewById(R.id.search_include_hidden); searchSort = (CheckBox) findViewById(R.id.search_sort); - searchAs = (Spinner) findViewById(R.id.search_as); + searchRegexp = (CheckBox) findViewById(R.id.search_as); searchIn = (Spinner) findViewById(R.id.search_in); searchRoot = (EditText) findViewById(R.id.search_root); searchTxt = (EditText) findViewById(R.id.search_txt); @@ -355,6 +366,9 @@ public void onClick(View v) { }); ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutBottom)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.search_all)); } @Override @@ -370,13 +384,11 @@ protected void onStart() { // Set search sort checkbox searchSort.setChecked(prefs.getBoolean("searchSort", true)); - // Set search as spinner - ArrayAdapter adapter1 = ArrayAdapter.createFromResource( - this, R.array.search_as_values, - android.R.layout.simple_spinner_item); - adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - searchAs.setAdapter(adapter1); - searchAs.setSelection(prefs.getInt("searchAs", 0), false); + // Set include hidden files in search result + searchIncHidden.setChecked(prefs.getBoolean("searchIncHidden", false)); + + // Set search regexp checkbox + searchRegexp.setChecked(prefs.getBoolean("searchRegexp", false)); // Set search in spinner ArrayAdapter adapter2 = ArrayAdapter.createFromResource( @@ -397,7 +409,7 @@ protected void onStart() { @Override protected void onResume() { super.onResume(); - searchAs.setSelection(prefs.getInt("searchAs", 0), false); + //searchRegexp.setChecked(prefs.getBoolean("searchRegexp", false)); searchIn.setSelection(prefs.getInt("searchIn", 0), false); app.generalOnResume(TAG, this); } diff --git a/src/com/harasoft/relaunch/Shop.java b/app/src/main/java/com/gacode/relaunchx/Shop.java similarity index 96% rename from src/com/harasoft/relaunch/Shop.java rename to app/src/main/java/com/gacode/relaunchx/Shop.java index 246226c..d4977be 100644 --- a/src/com/harasoft/relaunch/Shop.java +++ b/app/src/main/java/com/gacode/relaunchx/Shop.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import android.app.Activity; import android.app.PendingIntent; diff --git a/app/src/main/java/com/gacode/relaunchx/SizeManipulation.java b/app/src/main/java/com/gacode/relaunchx/SizeManipulation.java new file mode 100644 index 0000000..297293c --- /dev/null +++ b/app/src/main/java/com/gacode/relaunchx/SizeManipulation.java @@ -0,0 +1,115 @@ +package com.gacode.relaunchx; + +import android.app.Application; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Paint; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.Collections; + +public final class SizeManipulation { + static final int TOOLBAR_MIN_HEIGHT_DEF = 60; + static final int FILE_LIST_LINE_TEXT_SIZE_DEF = 20; + static final int ICON_SIZE_DEF = 48; + static final int TEXT_ICON_SIZE_DEF = 50; + + + private static int DpToPx(Application app, int dp) { + DisplayMetrics displayMetrics = app.getApplicationContext().getResources().getDisplayMetrics(); + return (int)(dp * ((float)displayMetrics.densityDpi / 160)); + } + + private static Bitmap scaleBitmap(Bitmap bmp, int size) { + return Bitmap.createScaledBitmap(bmp, size, size, true); + } + + public static void AdjustWithPreferencesToolbarMinHeight(Application app, SharedPreferences preferences, View view) { + String dpString = preferences.getString("buttonMinHeight", String.valueOf(TOOLBAR_MIN_HEIGHT_DEF)); + int dp = Integer.valueOf(dpString); + if (dp == TOOLBAR_MIN_HEIGHT_DEF) return; + + view.setMinimumHeight(DpToPx(app, dp)); + } + + public static void AdjustWithPreferencesFileListLine1(Application app, SharedPreferences preferences, TextView view) { + String dpString = preferences.getString("fileFontSize", String.valueOf(FILE_LIST_LINE_TEXT_SIZE_DEF)); + int dp = Integer.valueOf(dpString); + if (dp == FILE_LIST_LINE_TEXT_SIZE_DEF) return; + + view.setTextSize(TypedValue.COMPLEX_UNIT_PX, DpToPx(app, dp)); + } + + public static void AdjustWithPreferencesFileListLine2(Application app, SharedPreferences preferences, TextView view) { + String dpString = preferences.getString("fileFontSize", String.valueOf(FILE_LIST_LINE_TEXT_SIZE_DEF)); + int dp = Integer.valueOf(dpString); + if (dp == FILE_LIST_LINE_TEXT_SIZE_DEF) return; + + dp = (int)(dp * (float)4/5); + view.setTextSize(TypedValue.COMPLEX_UNIT_PX, DpToPx(app, dp)); + } + + public static boolean AassignWithPreferencesIcon(Application app, SharedPreferences preferences, ImageView view) { + boolean show = preferences.getBoolean("showIcon", false); + if (show == false) { + view.setVisibility(View.GONE); + } + return show; + } + + public static boolean AassignWithPreferencesIcon(Application app, SharedPreferences preferences, ImageView view, Bitmap bmp) { + boolean show = AassignWithPreferencesIcon(app, preferences, view); + if (show) { + view.setImageBitmap(scaleBitmap(bmp, DpToPx(app, ICON_SIZE_DEF))); + } + return show; + } + + public static boolean AassignWithPreferencesIcon(Application app, SharedPreferences preferences, ImageView view, int resourceId) { + Bitmap bmp = BitmapFactory.decodeResource(app.getResources(), resourceId); + return AassignWithPreferencesIcon(app, preferences, view, bmp); + } + + public static boolean AassignWithPreferencesIcon(Application app, SharedPreferences preferences, ImageView view, Drawable bmp) { + return AassignWithPreferencesIcon(app, preferences, view, ((BitmapDrawable) bmp).getBitmap()); + } + + public static int AutoColumnsNumber(Application app, SharedPreferences preferences, ArrayList lengths) { + if (lengths.size() == 0) return 1; + + String pattern = preferences.getString("columnsAlgIntensity", "70 3:5 7:4 15:3 48:2"); // default - medium + String[] spat = pattern.split("[\\s\\:]+"); + int quantile = Integer.parseInt(spat[0]); + + // implementation - via percentiles len + Collections.sort(lengths); + Integer index = (lengths.size() * quantile) / 100; + int avgTextLength = lengths.get(index); + + char[] text = new char[avgTextLength]; + for (int i = 0; i < text.length; i++) text[i] = 'A'; + + DisplayMetrics displayMetrics = app.getApplicationContext().getResources().getDisplayMetrics(); + Paint paint = new Paint(); + String dpString = preferences.getString("fileFontSize", String.valueOf(FILE_LIST_LINE_TEXT_SIZE_DEF)); + + paint.setTextSize(DpToPx(app, Integer.valueOf(dpString))); + float textWidthPixels = paint.measureText(text, 0, text.length); + textWidthPixels += DpToPx(app, TEXT_ICON_SIZE_DEF); + int columnsNumber = (int)(displayMetrics.widthPixels / textWidthPixels); + + if (columnsNumber > lengths.size()) columnsNumber = lengths.size(); + if (columnsNumber > 4) columnsNumber = 4; + else if (columnsNumber == 0) columnsNumber = 1; + + return columnsNumber; + } +} diff --git a/src/com/harasoft/relaunch/TaskManager.java b/app/src/main/java/com/gacode/relaunchx/TaskManager.java similarity index 98% rename from src/com/harasoft/relaunch/TaskManager.java rename to app/src/main/java/com/gacode/relaunchx/TaskManager.java index 9c77156..c97368c 100644 --- a/src/com/harasoft/relaunch/TaskManager.java +++ b/app/src/main/java/com/gacode/relaunchx/TaskManager.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.BufferedReader; import java.io.FileInputStream; @@ -711,6 +711,7 @@ private void showServiceDetails(Integer pid) { final String localName = p.name; dialog.setContentView(R.layout.service_details); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, dialog.findViewById(R.id.linearLayoutTop)); // "Service details" dialog.setTitle(getResources().getString( R.string.jv_taskman_service_details)); @@ -1154,6 +1155,8 @@ public void onClick(View v) { setSorting(sortMethod); startCPUUpdate(); ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutNavigate)); } @Override diff --git a/src/com/harasoft/relaunch/TypesActivity.java b/app/src/main/java/com/gacode/relaunchx/TypesActivity.java similarity index 98% rename from src/com/harasoft/relaunch/TypesActivity.java rename to app/src/main/java/com/gacode/relaunchx/TypesActivity.java index f24b806..86cabf7 100644 --- a/src/com/harasoft/relaunch/TypesActivity.java +++ b/app/src/main/java/com/gacode/relaunchx/TypesActivity.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.util.ArrayList; import java.util.HashMap; @@ -424,6 +424,8 @@ public void onClick(View v) { } }); ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutBottom)); } @Override diff --git a/src/com/harasoft/relaunch/Viewer.java b/app/src/main/java/com/gacode/relaunchx/Viewer.java similarity index 95% rename from src/com/harasoft/relaunch/Viewer.java rename to app/src/main/java/com/gacode/relaunchx/Viewer.java index d28e990..2d2bcca 100644 --- a/src/com/harasoft/relaunch/Viewer.java +++ b/app/src/main/java/com/gacode/relaunchx/Viewer.java @@ -1,4 +1,4 @@ -package com.harasoft.relaunch; +package com.gacode.relaunchx; import java.io.BufferedReader; import java.io.File; @@ -90,7 +90,7 @@ protected void onCreate(Bundle savedInstanceState) { // "File too big" builder.setTitle(getResources().getString( R.string.jv_viewer_file_too_big)); - // "File \"" + fname + "\" is too big for viewer (" + f.length() + + // "File \"" + fullPathName + "\" is too big for viewer (" + f.length() + // " bytes)\n" // + "Maximal allowed size is " + app.viewerMax + " bytes" builder.setMessage(getResources() @@ -130,7 +130,7 @@ public void onClick(View v) { // "File too big" builder.setTitle(getResources().getString( R.string.jv_editor_file_too_big)); - // "File \"" + fname + "\" is too big for editor (" + + // "File \"" + fullPathName + "\" is too big for editor (" + // fileSize + " bytes)" // "Maximal allowed size is " + app.editorMax + " bytes" builder.setMessage(getResources().getString( @@ -187,6 +187,7 @@ public void onClick(View v) { rereadFile(fname, editTxt); } ScreenOrientation.set(this, prefs); + SizeManipulation.AdjustWithPreferencesToolbarMinHeight(app, prefs, findViewById(R.id.linearLayoutTop)); } @Override diff --git a/app/src/main/res/drawable-hdpi/arrow_down.png b/app/src/main/res/drawable-hdpi/arrow_down.png new file mode 100755 index 0000000..3757ae3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_down.png differ diff --git a/app/src/main/res/drawable-hdpi/arrow_up.png b/app/src/main/res/drawable-hdpi/arrow_up.png new file mode 100755 index 0000000..c23c888 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/arrow_up.png differ diff --git a/app/src/main/res/drawable-hdpi/bat1.png b/app/src/main/res/drawable-hdpi/bat1.png new file mode 100755 index 0000000..9783e36 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/bat1.png differ diff --git a/app/src/main/res/drawable-hdpi/bat2.png b/app/src/main/res/drawable-hdpi/bat2.png new file mode 100755 index 0000000..4906687 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/bat2.png differ diff --git a/app/src/main/res/drawable-hdpi/bat3.png b/app/src/main/res/drawable-hdpi/bat3.png new file mode 100755 index 0000000..4ad7796 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/bat3.png differ diff --git a/app/src/main/res/drawable-hdpi/bat4.png b/app/src/main/res/drawable-hdpi/bat4.png new file mode 100755 index 0000000..0c69650 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/bat4.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_add.png b/app/src/main/res/drawable-hdpi/ci_add.png new file mode 100755 index 0000000..62281b1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_add.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_arrowdown.png b/app/src/main/res/drawable-hdpi/ci_arrowdown.png new file mode 100755 index 0000000..3528581 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_arrowdown.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_arrowup.png b/app/src/main/res/drawable-hdpi/ci_arrowup.png new file mode 100755 index 0000000..cf716e3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_arrowup.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_associations.png b/app/src/main/res/drawable-hdpi/ci_associations.png new file mode 100755 index 0000000..4e06391 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_associations.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_az.png b/app/src/main/res/drawable-hdpi/ci_az.png new file mode 100755 index 0000000..28a1214 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_az.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_books.png b/app/src/main/res/drawable-hdpi/ci_books.png new file mode 100755 index 0000000..29edb02 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_books.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_cpu.png b/app/src/main/res/drawable-hdpi/ci_cpu.png new file mode 100755 index 0000000..926f2b1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_cpu.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_default.png b/app/src/main/res/drawable-hdpi/ci_default.png new file mode 100755 index 0000000..e899bde Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_default.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_del.png b/app/src/main/res/drawable-hdpi/ci_del.png new file mode 100755 index 0000000..d101318 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_del.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_delsmall.png b/app/src/main/res/drawable-hdpi/ci_delsmall.png new file mode 100755 index 0000000..a8f6384 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_delsmall.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_edit.png b/app/src/main/res/drawable-hdpi/ci_edit.png new file mode 100755 index 0000000..f9f31bd Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_edit.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_eightdir.png b/app/src/main/res/drawable-hdpi/ci_eightdir.png new file mode 100755 index 0000000..c2f48bc Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_eightdir.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_exit.png b/app/src/main/res/drawable-hdpi/ci_exit.png new file mode 100755 index 0000000..ddbbe47 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_exit.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_fav.png b/app/src/main/res/drawable-hdpi/ci_fav.png new file mode 100755 index 0000000..35f3a1f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_fav.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_fava.png b/app/src/main/res/drawable-hdpi/ci_fava.png new file mode 100755 index 0000000..456f706 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_fava.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_filter.png b/app/src/main/res/drawable-hdpi/ci_filter.png new file mode 100755 index 0000000..8536235 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_filter.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_gear.png b/app/src/main/res/drawable-hdpi/ci_gear.png new file mode 100755 index 0000000..959c805 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_gear.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_gear2.png b/app/src/main/res/drawable-hdpi/ci_gear2.png new file mode 100755 index 0000000..5257cd1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_gear2.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_grid.png b/app/src/main/res/drawable-hdpi/ci_grid.png new file mode 100755 index 0000000..38475d8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_grid.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_home.png b/app/src/main/res/drawable-hdpi/ci_home.png new file mode 100755 index 0000000..fde47fb Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_home.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_kill.png b/app/src/main/res/drawable-hdpi/ci_kill.png new file mode 100755 index 0000000..44ce6c1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_kill.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_levelup.png b/app/src/main/res/drawable-hdpi/ci_levelup.png new file mode 100755 index 0000000..89427fe Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_levelup.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_lock.png b/app/src/main/res/drawable-hdpi/ci_lock.png new file mode 100755 index 0000000..c4d6f6f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_lock.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_lre.png b/app/src/main/res/drawable-hdpi/ci_lre.png new file mode 100755 index 0000000..a9869d6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_lre.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_lrea.png b/app/src/main/res/drawable-hdpi/ci_lrea.png new file mode 100755 index 0000000..e2c7e1a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_lrea.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_ok.png b/app/src/main/res/drawable-hdpi/ci_ok.png new file mode 100755 index 0000000..ba71dee Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_ok.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_power.png b/app/src/main/res/drawable-hdpi/ci_power.png new file mode 100755 index 0000000..aa2fbb4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_power.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_question.png b/app/src/main/res/drawable-hdpi/ci_question.png new file mode 100755 index 0000000..f962a8b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_question.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_ram.png b/app/src/main/res/drawable-hdpi/ci_ram.png new file mode 100755 index 0000000..c431322 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_ram.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_reboot.png b/app/src/main/res/drawable-hdpi/ci_reboot.png new file mode 100755 index 0000000..bbbf035 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_reboot.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_run.png b/app/src/main/res/drawable-hdpi/ci_run.png new file mode 100755 index 0000000..d00dc16 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_run.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_save.png b/app/src/main/res/drawable-hdpi/ci_save.png new file mode 100755 index 0000000..9e21f54 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_save.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_search.png b/app/src/main/res/drawable-hdpi/ci_search.png new file mode 100755 index 0000000..9b9eb48 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_search.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_tools.png b/app/src/main/res/drawable-hdpi/ci_tools.png new file mode 100755 index 0000000..3136c36 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_tools.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_wifi.png b/app/src/main/res/drawable-hdpi/ci_wifi.png new file mode 100755 index 0000000..9acaba2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_wifi.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_wifiscan.png b/app/src/main/res/drawable-hdpi/ci_wifiscan.png new file mode 100755 index 0000000..d373935 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_wifiscan.png differ diff --git a/app/src/main/res/drawable-hdpi/ci_wifisetup.png b/app/src/main/res/drawable-hdpi/ci_wifisetup.png new file mode 100755 index 0000000..6ad3383 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ci_wifisetup.png differ diff --git a/app/src/main/res/drawable-hdpi/dir_ok.png b/app/src/main/res/drawable-hdpi/dir_ok.png new file mode 100755 index 0000000..0b2e953 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/dir_ok.png differ diff --git a/app/src/main/res/drawable-hdpi/file_notok.png b/app/src/main/res/drawable-hdpi/file_notok.png new file mode 100755 index 0000000..4c7c6c0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/file_notok.png differ diff --git a/app/src/main/res/drawable-hdpi/file_ok.png b/app/src/main/res/drawable-hdpi/file_ok.png new file mode 100755 index 0000000..8336809 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/file_ok.png differ diff --git a/app/src/main/res/drawable-hdpi/filter_off.png b/app/src/main/res/drawable-hdpi/filter_off.png new file mode 100644 index 0000000..9e94a17 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/filter_off.png differ diff --git a/app/src/main/res/drawable-hdpi/filter_on.png b/app/src/main/res/drawable-hdpi/filter_on.png new file mode 100644 index 0000000..d4a68c8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/filter_on.png differ diff --git a/app/src/main/res/drawable-hdpi/icon.png b/app/src/main/res/drawable-hdpi/icon.png new file mode 100755 index 0000000..7ce17e0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon.png differ diff --git a/app/src/main/res/drawable-hdpi/install.png b/app/src/main/res/drawable-hdpi/install.png new file mode 100755 index 0000000..da2d853 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/install.png differ diff --git a/res/drawable-hdpi/main_button.xml b/app/src/main/res/drawable-hdpi/main_button.xml similarity index 100% rename from res/drawable-hdpi/main_button.xml rename to app/src/main/res/drawable-hdpi/main_button.xml diff --git a/res/drawable-hdpi/poweroff_screen_240x240.png b/app/src/main/res/drawable-hdpi/poweroff_screen_240x240.png similarity index 100% rename from res/drawable-hdpi/poweroff_screen_240x240.png rename to app/src/main/res/drawable-hdpi/poweroff_screen_240x240.png diff --git a/app/src/main/res/drawable-hdpi/ram.png b/app/src/main/res/drawable-hdpi/ram.png new file mode 100755 index 0000000..586fa49 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ram.png differ diff --git a/res/drawable-hdpi/reboot_screen_240x240.png b/app/src/main/res/drawable-hdpi/reboot_screen_240x240.png similarity index 100% rename from res/drawable-hdpi/reboot_screen_240x240.png rename to app/src/main/res/drawable-hdpi/reboot_screen_240x240.png diff --git a/app/src/main/res/drawable-hdpi/rectangle.xml b/app/src/main/res/drawable-hdpi/rectangle.xml new file mode 100644 index 0000000..bdf67eb --- /dev/null +++ b/app/src/main/res/drawable-hdpi/rectangle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/show_hidden_off.png b/app/src/main/res/drawable-hdpi/show_hidden_off.png new file mode 100644 index 0000000..69f7e96 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/show_hidden_off.png differ diff --git a/app/src/main/res/drawable-hdpi/show_hidden_on.png b/app/src/main/res/drawable-hdpi/show_hidden_on.png new file mode 100644 index 0000000..cdba89b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/show_hidden_on.png differ diff --git a/app/src/main/res/drawable-hdpi/wifi_off.png b/app/src/main/res/drawable-hdpi/wifi_off.png new file mode 100755 index 0000000..0f3cbc9 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/wifi_off.png differ diff --git a/app/src/main/res/drawable-hdpi/wifi_on.png b/app/src/main/res/drawable-hdpi/wifi_on.png new file mode 100755 index 0000000..c23f086 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/wifi_on.png differ diff --git a/res/drawable-hdpi/arrow_down.png b/app/src/main/res/drawable-mdpi/arrow_down.png similarity index 100% rename from res/drawable-hdpi/arrow_down.png rename to app/src/main/res/drawable-mdpi/arrow_down.png diff --git a/res/drawable-hdpi/arrow_up.png b/app/src/main/res/drawable-mdpi/arrow_up.png similarity index 100% rename from res/drawable-hdpi/arrow_up.png rename to app/src/main/res/drawable-mdpi/arrow_up.png diff --git a/res/drawable-hdpi/bat1.png b/app/src/main/res/drawable-mdpi/bat1.png similarity index 100% rename from res/drawable-hdpi/bat1.png rename to app/src/main/res/drawable-mdpi/bat1.png diff --git a/res/drawable-hdpi/bat2.png b/app/src/main/res/drawable-mdpi/bat2.png similarity index 100% rename from res/drawable-hdpi/bat2.png rename to app/src/main/res/drawable-mdpi/bat2.png diff --git a/res/drawable-hdpi/bat3.png b/app/src/main/res/drawable-mdpi/bat3.png similarity index 100% rename from res/drawable-hdpi/bat3.png rename to app/src/main/res/drawable-mdpi/bat3.png diff --git a/res/drawable-hdpi/bat4.png b/app/src/main/res/drawable-mdpi/bat4.png similarity index 100% rename from res/drawable-hdpi/bat4.png rename to app/src/main/res/drawable-mdpi/bat4.png diff --git a/res/drawable-hdpi/ci_add.png b/app/src/main/res/drawable-mdpi/ci_add.png similarity index 100% rename from res/drawable-hdpi/ci_add.png rename to app/src/main/res/drawable-mdpi/ci_add.png diff --git a/res/drawable-hdpi/ci_arrowdown.png b/app/src/main/res/drawable-mdpi/ci_arrowdown.png similarity index 100% rename from res/drawable-hdpi/ci_arrowdown.png rename to app/src/main/res/drawable-mdpi/ci_arrowdown.png diff --git a/res/drawable-hdpi/ci_arrowup.png b/app/src/main/res/drawable-mdpi/ci_arrowup.png similarity index 100% rename from res/drawable-hdpi/ci_arrowup.png rename to app/src/main/res/drawable-mdpi/ci_arrowup.png diff --git a/res/drawable-hdpi/ci_associations.png b/app/src/main/res/drawable-mdpi/ci_associations.png similarity index 100% rename from res/drawable-hdpi/ci_associations.png rename to app/src/main/res/drawable-mdpi/ci_associations.png diff --git a/res/drawable-hdpi/ci_az.png b/app/src/main/res/drawable-mdpi/ci_az.png similarity index 100% rename from res/drawable-hdpi/ci_az.png rename to app/src/main/res/drawable-mdpi/ci_az.png diff --git a/res/drawable-hdpi/ci_books.png b/app/src/main/res/drawable-mdpi/ci_books.png similarity index 100% rename from res/drawable-hdpi/ci_books.png rename to app/src/main/res/drawable-mdpi/ci_books.png diff --git a/res/drawable-hdpi/ci_cpu.png b/app/src/main/res/drawable-mdpi/ci_cpu.png similarity index 100% rename from res/drawable-hdpi/ci_cpu.png rename to app/src/main/res/drawable-mdpi/ci_cpu.png diff --git a/res/drawable-hdpi/ci_default.png b/app/src/main/res/drawable-mdpi/ci_default.png similarity index 100% rename from res/drawable-hdpi/ci_default.png rename to app/src/main/res/drawable-mdpi/ci_default.png diff --git a/res/drawable-hdpi/ci_del.png b/app/src/main/res/drawable-mdpi/ci_del.png similarity index 100% rename from res/drawable-hdpi/ci_del.png rename to app/src/main/res/drawable-mdpi/ci_del.png diff --git a/res/drawable-hdpi/ci_delsmall.png b/app/src/main/res/drawable-mdpi/ci_delsmall.png similarity index 100% rename from res/drawable-hdpi/ci_delsmall.png rename to app/src/main/res/drawable-mdpi/ci_delsmall.png diff --git a/res/drawable-hdpi/ci_edit.png b/app/src/main/res/drawable-mdpi/ci_edit.png similarity index 100% rename from res/drawable-hdpi/ci_edit.png rename to app/src/main/res/drawable-mdpi/ci_edit.png diff --git a/res/drawable-hdpi/ci_eightdir.png b/app/src/main/res/drawable-mdpi/ci_eightdir.png similarity index 100% rename from res/drawable-hdpi/ci_eightdir.png rename to app/src/main/res/drawable-mdpi/ci_eightdir.png diff --git a/res/drawable-hdpi/ci_exit.png b/app/src/main/res/drawable-mdpi/ci_exit.png similarity index 100% rename from res/drawable-hdpi/ci_exit.png rename to app/src/main/res/drawable-mdpi/ci_exit.png diff --git a/res/drawable-hdpi/ci_fav.png b/app/src/main/res/drawable-mdpi/ci_fav.png similarity index 100% rename from res/drawable-hdpi/ci_fav.png rename to app/src/main/res/drawable-mdpi/ci_fav.png diff --git a/res/drawable-hdpi/ci_fava.png b/app/src/main/res/drawable-mdpi/ci_fava.png similarity index 100% rename from res/drawable-hdpi/ci_fava.png rename to app/src/main/res/drawable-mdpi/ci_fava.png diff --git a/res/drawable-hdpi/ci_filter.png b/app/src/main/res/drawable-mdpi/ci_filter.png similarity index 100% rename from res/drawable-hdpi/ci_filter.png rename to app/src/main/res/drawable-mdpi/ci_filter.png diff --git a/res/drawable-hdpi/ci_gear.png b/app/src/main/res/drawable-mdpi/ci_gear.png similarity index 100% rename from res/drawable-hdpi/ci_gear.png rename to app/src/main/res/drawable-mdpi/ci_gear.png diff --git a/res/drawable-hdpi/ci_gear2.png b/app/src/main/res/drawable-mdpi/ci_gear2.png similarity index 100% rename from res/drawable-hdpi/ci_gear2.png rename to app/src/main/res/drawable-mdpi/ci_gear2.png diff --git a/res/drawable-hdpi/ci_grid.png b/app/src/main/res/drawable-mdpi/ci_grid.png similarity index 100% rename from res/drawable-hdpi/ci_grid.png rename to app/src/main/res/drawable-mdpi/ci_grid.png diff --git a/res/drawable-hdpi/ci_home.png b/app/src/main/res/drawable-mdpi/ci_home.png similarity index 100% rename from res/drawable-hdpi/ci_home.png rename to app/src/main/res/drawable-mdpi/ci_home.png diff --git a/res/drawable-hdpi/ci_kill.png b/app/src/main/res/drawable-mdpi/ci_kill.png similarity index 100% rename from res/drawable-hdpi/ci_kill.png rename to app/src/main/res/drawable-mdpi/ci_kill.png diff --git a/res/drawable-hdpi/ci_levelup.png b/app/src/main/res/drawable-mdpi/ci_levelup.png similarity index 100% rename from res/drawable-hdpi/ci_levelup.png rename to app/src/main/res/drawable-mdpi/ci_levelup.png diff --git a/res/drawable-hdpi/ci_lock.png b/app/src/main/res/drawable-mdpi/ci_lock.png similarity index 100% rename from res/drawable-hdpi/ci_lock.png rename to app/src/main/res/drawable-mdpi/ci_lock.png diff --git a/res/drawable-hdpi/ci_lre.png b/app/src/main/res/drawable-mdpi/ci_lre.png similarity index 100% rename from res/drawable-hdpi/ci_lre.png rename to app/src/main/res/drawable-mdpi/ci_lre.png diff --git a/res/drawable-hdpi/ci_lrea.png b/app/src/main/res/drawable-mdpi/ci_lrea.png similarity index 100% rename from res/drawable-hdpi/ci_lrea.png rename to app/src/main/res/drawable-mdpi/ci_lrea.png diff --git a/res/drawable-hdpi/ci_ok.png b/app/src/main/res/drawable-mdpi/ci_ok.png similarity index 100% rename from res/drawable-hdpi/ci_ok.png rename to app/src/main/res/drawable-mdpi/ci_ok.png diff --git a/res/drawable-hdpi/ci_power.png b/app/src/main/res/drawable-mdpi/ci_power.png similarity index 100% rename from res/drawable-hdpi/ci_power.png rename to app/src/main/res/drawable-mdpi/ci_power.png diff --git a/res/drawable-hdpi/ci_question.png b/app/src/main/res/drawable-mdpi/ci_question.png similarity index 100% rename from res/drawable-hdpi/ci_question.png rename to app/src/main/res/drawable-mdpi/ci_question.png diff --git a/res/drawable-hdpi/ci_ram.png b/app/src/main/res/drawable-mdpi/ci_ram.png similarity index 100% rename from res/drawable-hdpi/ci_ram.png rename to app/src/main/res/drawable-mdpi/ci_ram.png diff --git a/res/drawable-hdpi/ci_reboot.png b/app/src/main/res/drawable-mdpi/ci_reboot.png similarity index 100% rename from res/drawable-hdpi/ci_reboot.png rename to app/src/main/res/drawable-mdpi/ci_reboot.png diff --git a/res/drawable-hdpi/ci_run.png b/app/src/main/res/drawable-mdpi/ci_run.png similarity index 100% rename from res/drawable-hdpi/ci_run.png rename to app/src/main/res/drawable-mdpi/ci_run.png diff --git a/res/drawable-hdpi/ci_save.png b/app/src/main/res/drawable-mdpi/ci_save.png similarity index 100% rename from res/drawable-hdpi/ci_save.png rename to app/src/main/res/drawable-mdpi/ci_save.png diff --git a/res/drawable-hdpi/ci_search.png b/app/src/main/res/drawable-mdpi/ci_search.png similarity index 100% rename from res/drawable-hdpi/ci_search.png rename to app/src/main/res/drawable-mdpi/ci_search.png diff --git a/res/drawable-hdpi/ci_tools.png b/app/src/main/res/drawable-mdpi/ci_tools.png similarity index 100% rename from res/drawable-hdpi/ci_tools.png rename to app/src/main/res/drawable-mdpi/ci_tools.png diff --git a/res/drawable-hdpi/ci_wifi.png b/app/src/main/res/drawable-mdpi/ci_wifi.png similarity index 100% rename from res/drawable-hdpi/ci_wifi.png rename to app/src/main/res/drawable-mdpi/ci_wifi.png diff --git a/res/drawable-hdpi/ci_wifiscan.png b/app/src/main/res/drawable-mdpi/ci_wifiscan.png similarity index 100% rename from res/drawable-hdpi/ci_wifiscan.png rename to app/src/main/res/drawable-mdpi/ci_wifiscan.png diff --git a/res/drawable-hdpi/ci_wifisetup.png b/app/src/main/res/drawable-mdpi/ci_wifisetup.png similarity index 100% rename from res/drawable-hdpi/ci_wifisetup.png rename to app/src/main/res/drawable-mdpi/ci_wifisetup.png diff --git a/res/drawable-hdpi/dir_ok.png b/app/src/main/res/drawable-mdpi/dir_ok.png similarity index 100% rename from res/drawable-hdpi/dir_ok.png rename to app/src/main/res/drawable-mdpi/dir_ok.png diff --git a/res/drawable-hdpi/file_notok.png b/app/src/main/res/drawable-mdpi/file_notok.png similarity index 100% rename from res/drawable-hdpi/file_notok.png rename to app/src/main/res/drawable-mdpi/file_notok.png diff --git a/res/drawable-hdpi/file_ok.png b/app/src/main/res/drawable-mdpi/file_ok.png similarity index 100% rename from res/drawable-hdpi/file_ok.png rename to app/src/main/res/drawable-mdpi/file_ok.png diff --git a/app/src/main/res/drawable-mdpi/filter_off.png b/app/src/main/res/drawable-mdpi/filter_off.png new file mode 100644 index 0000000..66c7734 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/filter_off.png differ diff --git a/app/src/main/res/drawable-mdpi/filter_on.png b/app/src/main/res/drawable-mdpi/filter_on.png new file mode 100644 index 0000000..180e8a3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/filter_on.png differ diff --git a/app/src/main/res/drawable-mdpi/icon.png b/app/src/main/res/drawable-mdpi/icon.png new file mode 100644 index 0000000..59e99cc Binary files /dev/null and b/app/src/main/res/drawable-mdpi/icon.png differ diff --git a/res/drawable-hdpi/install.png b/app/src/main/res/drawable-mdpi/install.png similarity index 100% rename from res/drawable-hdpi/install.png rename to app/src/main/res/drawable-mdpi/install.png diff --git a/res/drawable-mdpi/main_button.xml b/app/src/main/res/drawable-mdpi/main_button.xml similarity index 100% rename from res/drawable-mdpi/main_button.xml rename to app/src/main/res/drawable-mdpi/main_button.xml diff --git a/res/drawable-mdpi/poweroff_screen_240x240.png b/app/src/main/res/drawable-mdpi/poweroff_screen_240x240.png similarity index 100% rename from res/drawable-mdpi/poweroff_screen_240x240.png rename to app/src/main/res/drawable-mdpi/poweroff_screen_240x240.png diff --git a/res/drawable-hdpi/ram.png b/app/src/main/res/drawable-mdpi/ram.png similarity index 100% rename from res/drawable-hdpi/ram.png rename to app/src/main/res/drawable-mdpi/ram.png diff --git a/res/drawable-mdpi/reboot_screen_240x240.png b/app/src/main/res/drawable-mdpi/reboot_screen_240x240.png similarity index 100% rename from res/drawable-mdpi/reboot_screen_240x240.png rename to app/src/main/res/drawable-mdpi/reboot_screen_240x240.png diff --git a/app/src/main/res/drawable-mdpi/rectangle.xml b/app/src/main/res/drawable-mdpi/rectangle.xml new file mode 100644 index 0000000..bdf67eb --- /dev/null +++ b/app/src/main/res/drawable-mdpi/rectangle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-mdpi/show_hidden_off.png b/app/src/main/res/drawable-mdpi/show_hidden_off.png new file mode 100644 index 0000000..79d26d3 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/show_hidden_off.png differ diff --git a/app/src/main/res/drawable-mdpi/show_hidden_on.png b/app/src/main/res/drawable-mdpi/show_hidden_on.png new file mode 100644 index 0000000..5d60371 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/show_hidden_on.png differ diff --git a/res/drawable-hdpi/wifi_off.png b/app/src/main/res/drawable-mdpi/wifi_off.png similarity index 100% rename from res/drawable-hdpi/wifi_off.png rename to app/src/main/res/drawable-mdpi/wifi_off.png diff --git a/res/drawable-hdpi/wifi_on.png b/app/src/main/res/drawable-mdpi/wifi_on.png similarity index 100% rename from res/drawable-hdpi/wifi_on.png rename to app/src/main/res/drawable-mdpi/wifi_on.png diff --git a/app/src/main/res/drawable/bold_border.xml b/app/src/main/res/drawable/bold_border.xml new file mode 100644 index 0000000..5fffea5 --- /dev/null +++ b/app/src/main/res/drawable/bold_border.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/button.xml b/app/src/main/res/drawable/button.xml new file mode 100644 index 0000000..48acf24 --- /dev/null +++ b/app/src/main/res/drawable/button.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/flist_separator.xml b/app/src/main/res/drawable/flist_separator.xml similarity index 100% rename from res/drawable/flist_separator.xml rename to app/src/main/res/drawable/flist_separator.xml diff --git a/app/src/main/res/drawable/simple_border.xml b/app/src/main/res/drawable/simple_border.xml new file mode 100644 index 0000000..5889a30 --- /dev/null +++ b/app/src/main/res/drawable/simple_border.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/drawable/title_button.xml b/app/src/main/res/drawable/title_button.xml similarity index 100% rename from res/drawable/title_button.xml rename to app/src/main/res/drawable/title_button.xml diff --git a/res/layout-hdpi/adv_wifi_item.xml b/app/src/main/res/layout-hdpi/adv_wifi_item.xml similarity index 77% rename from res/layout-hdpi/adv_wifi_item.xml rename to app/src/main/res/layout-hdpi/adv_wifi_item.xml index fffd799..f8833e6 100644 --- a/res/layout-hdpi/adv_wifi_item.xml +++ b/app/src/main/res/layout-hdpi/adv_wifi_item.xml @@ -4,23 +4,23 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="horizontal" - android:paddingBottom="1.3dp" - android:paddingTop="1.3dp" > + android:paddingBottom="2dp" + android:paddingTop="2dp" > @@ -28,11 +28,11 @@ android:id="@+id/wf_ssid" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:background="@color/normal_bg" android:gravity="center_vertical" android:text="SSID" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_fg" > @@ -40,11 +40,11 @@ android:id="@+id/wf_capabilities" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:background="@color/normal_bg" android:gravity="center_vertical" android:text="capabilities" - android:textAppearance="@style/sonyTextAppearanceSmall" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" > @@ -52,11 +52,11 @@ android:id="@+id/wf_other" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:background="@color/normal_bg" android:gravity="center_vertical" android:text="other" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_fg" > diff --git a/res/layout-hdpi/advanced_layout.xml b/app/src/main/res/layout-hdpi/advanced_layout.xml similarity index 67% rename from res/layout-hdpi/advanced_layout.xml rename to app/src/main/res/layout-hdpi/advanced_layout.xml index c55478f..387114a 100644 --- a/res/layout-hdpi/advanced_layout.xml +++ b/app/src/main/res/layout-hdpi/advanced_layout.xml @@ -4,12 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar"> @@ -40,8 +39,8 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" - android:layout_marginRight="0.7dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" android:minWidth="96dp" @@ -53,10 +52,10 @@ android:id="@+id/wifi_lv_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:layout_weight="0.4" android:background="@drawable/main_button" - android:padding="5.3dp" > + android:padding="8dp" > @@ -92,16 +93,18 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/wifi_off" android:drawableRight="@drawable/wifi_off" android:drawableTop="@drawable/ci_wifi" - android:paddingBottom="11dp" - android:paddingLeft="5.3dp" - android:paddingRight="5.3dp" - android:paddingTop="5.3dp" + android:paddingBottom="16dp" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="8dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/advanced_layout_switch_wifi_off" > @@ -110,14 +113,16 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableTop="@drawable/ci_wifisetup" - android:paddingBottom="11dp" - android:paddingLeft="11dp" - android:paddingRight="11dp" - android:paddingTop="5.3dp" + android:paddingBottom="16dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="8dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/advanced_layout_setting_wifi" > @@ -126,14 +131,14 @@ android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:layout_weight="0.4" android:background="@drawable/main_button" android:orientation="vertical" - android:padding="2.7dp" > + android:padding="4dp" > @@ -167,14 +174,16 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableTop="@drawable/ci_reboot" - android:paddingBottom="11dp" - android:paddingLeft="11dp" - android:paddingRight="11dp" - android:paddingTop="5.3dp" + android:paddingBottom="16dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="8dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/advanced_layout_reboot" > @@ -183,14 +192,16 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableTop="@drawable/ci_power" - android:paddingBottom="11dp" - android:paddingLeft="11dp" - android:paddingRight="11dp" - android:paddingTop="5.3dp" + android:paddingBottom="16dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="8dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/advanced_layout_poweroff" > diff --git a/res/layout-hdpi/all_applications.xml b/app/src/main/res/layout-hdpi/all_applications.xml similarity index 84% rename from res/layout-hdpi/all_applications.xml rename to app/src/main/res/layout-hdpi/all_applications.xml index 729a8ac..564b3c7 100644 --- a/res/layout-hdpi/all_applications.xml +++ b/app/src/main/res/layout-hdpi/all_applications.xml @@ -4,12 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -39,11 +38,11 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" - android:minWidth="64dp" + android:minWidth="96dp" android:src="@drawable/ci_exit" > @@ -52,7 +51,7 @@ android:id="@+id/app_grid_layout" android:layout_width="fill_parent" android:layout_height="0dp" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:layout_weight="1" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -39,11 +38,11 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" - android:layout_marginRight="0.7dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" - android:minWidth="64dp" + android:minWidth="96dp" android:src="@drawable/ci_exit" > @@ -52,14 +51,14 @@ android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="1.3dp" + android:layout_marginTop="2dp" android:orientation="vertical" > + android:layout_marginTop="10dp" > + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" /> + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" /> @@ -120,18 +124,19 @@ android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" > + android:layout_marginTop="8dp" > + android:layout_height="wrap_content" > + android:text="" + android:textColor="@color/normal_fg" + android:textAppearance="@android:style/TextAppearance.Medium" /> diff --git a/res/layout-mdpi/cmenu_list_item.xml b/app/src/main/res/layout-hdpi/cmenu_list_item.xml similarity index 100% rename from res/layout-mdpi/cmenu_list_item.xml rename to app/src/main/res/layout-hdpi/cmenu_list_item.xml diff --git a/res/layout-mdpi/editor_layout.xml b/app/src/main/res/layout-hdpi/editor_layout.xml similarity index 93% rename from res/layout-mdpi/editor_layout.xml rename to app/src/main/res/layout-hdpi/editor_layout.xml index 4b88194..4eb4e99 100644 --- a/res/layout-mdpi/editor_layout.xml +++ b/app/src/main/res/layout-hdpi/editor_layout.xml @@ -7,9 +7,8 @@ android:padding="8dp" > @@ -86,6 +86,7 @@ android:drawableLeft="@drawable/ci_del" android:minWidth="96dp" android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/editor_layout_cancel" > diff --git a/res/layout-hdpi/fileinfo.xml b/app/src/main/res/layout-hdpi/fileinfo.xml similarity index 64% rename from res/layout-hdpi/fileinfo.xml rename to app/src/main/res/layout-hdpi/fileinfo.xml index 467f48b..347700f 100644 --- a/res/layout-hdpi/fileinfo.xml +++ b/app/src/main/res/layout-hdpi/fileinfo.xml @@ -1,17 +1,17 @@ + android:padding="8dp" > @@ -45,17 +45,17 @@ @@ -67,17 +67,17 @@ @@ -87,19 +87,20 @@ android:orientation="horizontal" > @@ -109,33 +110,36 @@ android:orientation="horizontal" > @@ -115,6 +116,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:text="Value:" + android:textColor="@color/normal_fg" android:textAppearance="?android:attr/textAppearanceMedium" android:visibility="invisible" > diff --git a/res/layout-mdpi/filters_view.xml b/app/src/main/res/layout-hdpi/filters_view.xml similarity index 90% rename from res/layout-mdpi/filters_view.xml rename to app/src/main/res/layout-hdpi/filters_view.xml index 3343645..ae252a3 100644 --- a/res/layout-mdpi/filters_view.xml +++ b/app/src/main/res/layout-hdpi/filters_view.xml @@ -7,10 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -79,6 +76,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/filters_view_layout_ok" > @@ -92,6 +90,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_add" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/filters_view_layout_add_new" > @@ -116,6 +115,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_del" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/filters_view_layout_cancel" > diff --git a/res/layout-hdpi/flist_layout.xml b/app/src/main/res/layout-hdpi/flist_layout.xml similarity index 57% rename from res/layout-hdpi/flist_layout.xml rename to app/src/main/res/layout-hdpi/flist_layout.xml index 8e9538c..32283cb 100644 --- a/res/layout-hdpi/flist_layout.xml +++ b/app/src/main/res/layout-hdpi/flist_layout.xml @@ -12,7 +12,8 @@ android:id="@+id/fl_separator" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:src="@drawable/flist_separator" /> + android:background="#BBBBBB" + android:minHeight="2px" /> + android:paddingBottom="2dp" + android:paddingTop="2dp" > + + + + @@ -48,12 +68,12 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="top|left" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@color/normal_transparent" android:gravity="center_vertical" android:text="TextView" - android:textAppearance="?android:attr/textAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_fg" /> + diff --git a/app/src/main/res/layout-hdpi/lock_screen.xml b/app/src/main/res/layout-hdpi/lock_screen.xml new file mode 100644 index 0000000..3b146cb --- /dev/null +++ b/app/src/main/res/layout-hdpi/lock_screen.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout-hdpi/main.xml b/app/src/main/res/layout-hdpi/main.xml similarity index 57% rename from res/layout-hdpi/main.xml rename to app/src/main/res/layout-hdpi/main.xml index 5643c72..dfb7e4e 100644 --- a/res/layout-hdpi/main.xml +++ b/app/src/main/res/layout-hdpi/main.xml @@ -2,15 +2,13 @@ + android:padding="8dp"> + style="@style/LinearLayoutToolbar" > @@ -38,7 +36,7 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:src="@drawable/ci_fav" > @@ -49,7 +47,7 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:src="@drawable/ci_search" > @@ -60,7 +58,7 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:src="@drawable/ci_gear2" > @@ -69,67 +67,114 @@ - + + + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + style="@style/LinearLayoutToolbar" > - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="0.757"> + + + + + + + + + + @@ -138,13 +183,14 @@ + + + - + + + android:layout_marginTop="8dp" + style="@style/LinearLayoutToolbar" > - - + @@ -218,11 +265,10 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="0.65" android:background="@drawable/main_button" - android:src="@drawable/ci_grid" - android:text="All applications" > + android:src="@drawable/ci_grid" > - - + \ No newline at end of file diff --git a/res/layout-mdpi/poweroff.xml b/app/src/main/res/layout-hdpi/poweroff.xml similarity index 100% rename from res/layout-mdpi/poweroff.xml rename to app/src/main/res/layout-hdpi/poweroff.xml diff --git a/res/layout-mdpi/pref_child.xml b/app/src/main/res/layout-hdpi/pref_child.xml similarity index 100% rename from res/layout-mdpi/pref_child.xml rename to app/src/main/res/layout-hdpi/pref_child.xml diff --git a/res/layout-hdpi/prefs_main.xml b/app/src/main/res/layout-hdpi/prefs_main.xml similarity index 79% rename from res/layout-hdpi/prefs_main.xml rename to app/src/main/res/layout-hdpi/prefs_main.xml index 8c97e60..dfe6f41 100644 --- a/res/layout-hdpi/prefs_main.xml +++ b/app/src/main/res/layout-hdpi/prefs_main.xml @@ -5,13 +5,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -44,11 +42,11 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" - android:minWidth="64dp" + android:minWidth="96dp" android:src="@drawable/ci_exit" /> @@ -62,7 +60,7 @@ android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:layout_weight="1" android:duplicateParentState="true" android:fadeScrollbars="false" @@ -70,10 +68,9 @@ + android:id="@+id/linearLayoutBottom" + style="@style/LinearLayoutToolbar" + android:layout_marginTop="8dp" > diff --git a/res/layout-mdpi/reboot.xml b/app/src/main/res/layout-hdpi/reboot.xml similarity index 100% rename from res/layout-mdpi/reboot.xml rename to app/src/main/res/layout-hdpi/reboot.xml diff --git a/res/layout-mdpi/results_item.xml b/app/src/main/res/layout-hdpi/results_item.xml similarity index 100% rename from res/layout-mdpi/results_item.xml rename to app/src/main/res/layout-hdpi/results_item.xml diff --git a/res/layout-hdpi/results_layout.xml b/app/src/main/res/layout-hdpi/results_layout.xml similarity index 71% rename from res/layout-hdpi/results_layout.xml rename to app/src/main/res/layout-hdpi/results_layout.xml index 775e127..f5d4579 100644 --- a/res/layout-hdpi/results_layout.xml +++ b/app/src/main/res/layout-hdpi/results_layout.xml @@ -4,12 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -38,11 +37,11 @@ android:id="@+id/results_btn" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" - android:minWidth="64dp" + android:minWidth="96dp" android:src="@drawable/ci_exit" > @@ -53,15 +52,14 @@ android:layout_height="0dp" android:background="@color/normal_transparent" android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceSmall" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_transparent" > + android:id="@+id/linearLayoutNavigate" + style="@style/LinearLayoutToolbar" + android:layout_marginTop="8dp" > @@ -79,11 +79,13 @@ android:id="@+id/upscroll_btn" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_arrowup" - android:paddingLeft="5.3dp" + android:paddingLeft="8dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" android:text="0%" > @@ -91,11 +93,13 @@ android:id="@+id/downscroll_btn" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_arrowdown" - android:paddingLeft="5.3dp" + android:paddingLeft="8dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" android:text="0%" > @@ -103,7 +107,7 @@ android:id="@+id/advanced_btn" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:src="@drawable/ci_tools" > @@ -114,18 +118,17 @@ android:id="@+id/results_fl" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" > + android:layout_marginTop="8dp" > - + android:stretchMode="columnWidth"> \ No newline at end of file diff --git a/res/layout-mdpi/search.xml b/app/src/main/res/layout-hdpi/search.xml similarity index 63% rename from res/layout-mdpi/search.xml rename to app/src/main/res/layout-hdpi/search.xml index f7c3833..c78b736 100644 --- a/res/layout-mdpi/search.xml +++ b/app/src/main/res/layout-hdpi/search.xml @@ -1,5 +1,4 @@ - + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -50,124 +47,106 @@ + + - + + + + + - + - - - - - - - + - - - - - - - + + android:text="@string/search_layout_search_inc_hidden" + android:textAppearance="?android:attr/textAppearanceLarge" + android:textColor="@color/normal_fg" + android:textStyle="bold"> - - - - - - - - - + + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:layout_marginBottom="5dp"> @@ -177,29 +156,36 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_weight="1" > + android:paddingLeft="5dp" + android:textColor="@color/normal_fg" + android:textAppearance="?android:attr/textAppearanceLarge" + android:background="@drawable/simple_border" + android:layout_weight="4" > + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:layout_marginBottom="5dp"> + @@ -220,53 +206,17 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_weight="1" > + android:paddingLeft="5dp" + android:textColor="@color/normal_fg" + android:background="@drawable/simple_border" + android:textAppearance="?android:attr/textAppearanceLarge" + android:layout_weight="4" > - - - - - - - - - - - diff --git a/res/layout-mdpi/service_details.xml b/app/src/main/res/layout-hdpi/service_details.xml similarity index 94% rename from res/layout-mdpi/service_details.xml rename to app/src/main/res/layout-hdpi/service_details.xml index 3cab595..b2e1505 100644 --- a/res/layout-mdpi/service_details.xml +++ b/app/src/main/res/layout-hdpi/service_details.xml @@ -7,10 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -34,6 +33,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/service_details_layout_ok" > @@ -104,7 +104,7 @@ @@ -184,7 +184,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -197,7 +197,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -210,7 +210,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -223,7 +223,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -236,7 +236,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -249,7 +249,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -262,7 +262,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" > diff --git a/res/layout-mdpi/simple_list_item_1.xml b/app/src/main/res/layout-hdpi/simple_list_item_1.xml similarity index 100% rename from res/layout-mdpi/simple_list_item_1.xml rename to app/src/main/res/layout-hdpi/simple_list_item_1.xml diff --git a/res/layout-mdpi/task_details.xml b/app/src/main/res/layout-hdpi/task_details.xml similarity index 95% rename from res/layout-mdpi/task_details.xml rename to app/src/main/res/layout-hdpi/task_details.xml index b9c6196..d0aa4e9 100644 --- a/res/layout-mdpi/task_details.xml +++ b/app/src/main/res/layout-hdpi/task_details.xml @@ -7,10 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -34,6 +33,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/service_details_layout_ok" > @@ -133,7 +133,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -146,7 +146,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -159,7 +159,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -172,7 +172,7 @@ android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" + android:text="" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -180,7 +180,7 @@ diff --git a/res/layout-mdpi/taskmanager_layout.xml b/app/src/main/res/layout-hdpi/taskmanager_layout.xml similarity index 94% rename from res/layout-mdpi/taskmanager_layout.xml rename to app/src/main/res/layout-hdpi/taskmanager_layout.xml index d2f5210..f1bdb50 100644 --- a/res/layout-mdpi/taskmanager_layout.xml +++ b/app/src/main/res/layout-hdpi/taskmanager_layout.xml @@ -7,9 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -115,6 +114,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_cpu" android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/taskmanager_layout_sort_by_cpu" > @@ -127,6 +127,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_az" android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/taskmanager_layout_sort_by_alpha" > diff --git a/res/layout-mdpi/types_layout.xml b/app/src/main/res/layout-hdpi/types_layout.xml similarity index 96% rename from res/layout-mdpi/types_layout.xml rename to app/src/main/res/layout-hdpi/types_layout.xml index 1df608f..5bddb45 100644 --- a/res/layout-mdpi/types_layout.xml +++ b/app/src/main/res/layout-hdpi/types_layout.xml @@ -1,6 +1,6 @@ @@ -104,7 +105,7 @@ @@ -115,6 +116,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="4dp" + android:textColor="@color/normal_fg" android:layout_weight="1" > diff --git a/res/layout-mdpi/types_view.xml b/app/src/main/res/layout-hdpi/types_view.xml similarity index 89% rename from res/layout-mdpi/types_view.xml rename to app/src/main/res/layout-hdpi/types_view.xml index 3e69185..a9c49f3 100644 --- a/res/layout-mdpi/types_view.xml +++ b/app/src/main/res/layout-hdpi/types_view.xml @@ -7,9 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -76,6 +74,7 @@ android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" + android:textColor="@color/normal_fg" android:text="@string/types_view_layout_ok" > @@ -88,6 +87,7 @@ android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_add" + android:textColor="@color/normal_fg" android:text="@string/types_view_layout_add_new" > @@ -100,6 +100,7 @@ android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_del" + android:textColor="@color/normal_fg" android:text="@string/types_view_layout_cancel" > diff --git a/res/layout-mdpi/viewer_layout.xml b/app/src/main/res/layout-hdpi/viewer_layout.xml similarity index 96% rename from res/layout-mdpi/viewer_layout.xml rename to app/src/main/res/layout-hdpi/viewer_layout.xml index 8c2360c..66cc294 100644 --- a/res/layout-mdpi/viewer_layout.xml +++ b/app/src/main/res/layout-hdpi/viewer_layout.xml @@ -7,9 +7,8 @@ android:padding="8dp" > diff --git a/res/layout-mdpi/adv_wifi_item.xml b/app/src/main/res/layout-mdpi/adv_wifi_item.xml similarity index 98% rename from res/layout-mdpi/adv_wifi_item.xml rename to app/src/main/res/layout-mdpi/adv_wifi_item.xml index f2855d4..d4105eb 100644 --- a/res/layout-mdpi/adv_wifi_item.xml +++ b/app/src/main/res/layout-mdpi/adv_wifi_item.xml @@ -17,7 +17,7 @@ + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar"> @@ -102,6 +102,7 @@ android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="8dp" + android:textColor="@color/normal_fg" android:text="@string/advanced_layout_switch_wifi_off" > @@ -118,6 +119,7 @@ android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="8dp" + android:textColor="@color/normal_fg" android:text="@string/advanced_layout_setting_wifi" > @@ -133,7 +135,7 @@ android:padding="4dp" > @@ -175,6 +178,7 @@ android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="8dp" + android:textColor="@color/normal_fg" android:text="@string/advanced_layout_reboot" > @@ -191,6 +195,7 @@ android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="8dp" + android:textColor="@color/normal_fg" android:text="@string/advanced_layout_poweroff" > diff --git a/res/layout-mdpi/all_applications.xml b/app/src/main/res/layout-mdpi/all_applications.xml similarity index 94% rename from res/layout-mdpi/all_applications.xml rename to app/src/main/res/layout-mdpi/all_applications.xml index 0087442..6060860 100644 --- a/res/layout-mdpi/all_applications.xml +++ b/app/src/main/res/layout-mdpi/all_applications.xml @@ -7,9 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -32,22 +32,22 @@ android:id="@+id/app_name" android:layout_width="0dp" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@color/normal_bg" android:gravity="center_vertical" android:text="App.name" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_fg" > @@ -55,11 +55,11 @@ diff --git a/res/layout-mdpi/bookinfo.xml b/app/src/main/res/layout-mdpi/bookinfo.xml similarity index 90% rename from res/layout-mdpi/bookinfo.xml rename to app/src/main/res/layout-mdpi/bookinfo.xml index d5269d2..33740f9 100644 --- a/res/layout-mdpi/bookinfo.xml +++ b/app/src/main/res/layout-mdpi/bookinfo.xml @@ -7,9 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -78,6 +77,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:textColor="@color/normal_fg" android:text="@string/bookinfo_title" /> @@ -124,13 +128,14 @@ + android:layout_height="wrap_content" > diff --git a/res/layout-hdpi/cmenu_list_item.xml b/app/src/main/res/layout-mdpi/cmenu_list_item.xml similarity index 73% rename from res/layout-hdpi/cmenu_list_item.xml rename to app/src/main/res/layout-mdpi/cmenu_list_item.xml index 11bbd13..fff8e52 100644 --- a/res/layout-hdpi/cmenu_list_item.xml +++ b/app/src/main/res/layout-mdpi/cmenu_list_item.xml @@ -3,9 +3,9 @@ android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:textAppearance="@style/sonyTextAppearanceMenu" + android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" - android:textColor="@android:color/black" android:paddingLeft="6dip" - android:minHeight="37dp" + android:textColor="@android:color/black" + android:minHeight="?android:attr/listPreferredItemHeight" /> diff --git a/res/layout-hdpi/editor_layout.xml b/app/src/main/res/layout-mdpi/editor_layout.xml similarity index 70% rename from res/layout-hdpi/editor_layout.xml rename to app/src/main/res/layout-mdpi/editor_layout.xml index efd5011..4eb4e99 100644 --- a/res/layout-hdpi/editor_layout.xml +++ b/app/src/main/res/layout-mdpi/editor_layout.xml @@ -4,12 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > @@ -29,12 +28,12 @@ android:layout_gravity="center" android:gravity="left|center" android:maxLines="1" - android:paddingBottom="1.3dp" - android:paddingLeft="5.3dp" - android:paddingRight="1.3dp" - android:paddingTop="1.3dp" + android:paddingBottom="2dp" + android:paddingLeft="8dp" + android:paddingRight="2dp" + android:paddingTop="2dp" android:text="@string/editor_layout_viewtitle" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -48,12 +47,12 @@ android:focusable="false" android:gravity="left" android:inputType="textMultiLine" - android:paddingBottom="1.3dp" - android:paddingLeft="5.3dp" - android:paddingRight="1.3dp" - android:paddingTop="1.3dp" + android:paddingBottom="2dp" + android:paddingLeft="8dp" + android:paddingRight="2dp" + android:paddingTop="2dp" android:text="Filename" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -67,12 +66,13 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="0" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_save" - android:minWidth="64dp" - android:paddingRight="5.3dp" + android:minWidth="96dp" + android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/editor_layout_save" > @@ -81,11 +81,12 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_del" - android:minWidth="64dp" - android:paddingRight="5.3dp" + android:minWidth="96dp" + android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/editor_layout_cancel" > @@ -93,12 +94,12 @@ @@ -106,11 +107,11 @@ android:id="@+id/edit_txt" android:layout_width="fill_parent" android:layout_height="0dp" - android:layout_marginTop="2.7dp" + android:layout_marginTop="4dp" android:layout_weight="1" android:background="#ffffff" android:inputType="textMultiLine" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" android:typeface="monospace" > diff --git a/res/layout-mdpi/fileinfo.xml b/app/src/main/res/layout-mdpi/fileinfo.xml similarity index 90% rename from res/layout-mdpi/fileinfo.xml rename to app/src/main/res/layout-mdpi/fileinfo.xml index 98ea753..f88f5fc 100644 --- a/res/layout-mdpi/fileinfo.xml +++ b/app/src/main/res/layout-mdpi/fileinfo.xml @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@ @@ -45,7 +45,7 @@ @@ -67,7 +67,7 @@ @@ -87,9 +87,10 @@ android:orientation="horizontal" > @@ -109,9 +110,10 @@ android:orientation="horizontal" > @@ -136,6 +138,7 @@ android:layout_width="100dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:textColor="@color/normal_fg" android:text="Ok" /> diff --git a/res/layout-hdpi/filters_item.xml b/app/src/main/res/layout-mdpi/filters_item.xml similarity index 81% rename from res/layout-hdpi/filters_item.xml rename to app/src/main/res/layout-mdpi/filters_item.xml index 83b8d6b..5a4d230 100644 --- a/res/layout-hdpi/filters_item.xml +++ b/app/src/main/res/layout-mdpi/filters_item.xml @@ -1,11 +1,11 @@ + android:paddingBottom="8dp" > @@ -49,17 +49,17 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" - android:paddingLeft="5.3dp" > + android:paddingLeft="8dp" > @@ -70,7 +70,7 @@ android:id="@+id/tableRow2" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" > + android:layout_marginTop="8dp" > + android:textColor="@color/normal_fg" + android:paddingLeft="8dp" > @@ -107,7 +108,7 @@ android:id="@+id/tableRow3" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginTop="5.3dp" > + android:layout_marginTop="8dp" > @@ -126,7 +128,7 @@ android:layout_gravity="center" android:gravity="center" android:text="@string/filters_item_layout_and" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:textStyle="bold" > diff --git a/res/layout-hdpi/filters_view.xml b/app/src/main/res/layout-mdpi/filters_view.xml similarity index 80% rename from res/layout-hdpi/filters_view.xml rename to app/src/main/res/layout-mdpi/filters_view.xml index f036bc1..ae252a3 100644 --- a/res/layout-hdpi/filters_view.xml +++ b/app/src/main/res/layout-mdpi/filters_view.xml @@ -4,13 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -43,11 +41,11 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" - android:layout_marginRight="0.7dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" - android:minWidth="64dp" + android:minWidth="96dp" android:src="@drawable/ci_exit" /> @@ -55,7 +53,7 @@ android:id="@+id/filters_lv" android:layout_width="wrap_content" android:layout_height="0dp" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:layout_weight="1" android:background="@color/normal_bg" android:divider="@color/normal_transparent" @@ -63,10 +61,9 @@ @@ -79,6 +76,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/filters_view_layout_ok" > @@ -87,11 +85,12 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_add" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/filters_view_layout_add_new" > @@ -99,7 +98,7 @@ android:id="@+id/filters_andor" android:layout_width="0dp" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:gravity="center" @@ -111,11 +110,12 @@ android:layout_width="0dp" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_del" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/filters_view_layout_cancel" > diff --git a/res/layout-mdpi/flist_layout.xml b/app/src/main/res/layout-mdpi/flist_layout.xml similarity index 67% rename from res/layout-mdpi/flist_layout.xml rename to app/src/main/res/layout-mdpi/flist_layout.xml index dbc8600..118bbc5 100644 --- a/res/layout-mdpi/flist_layout.xml +++ b/app/src/main/res/layout-mdpi/flist_layout.xml @@ -33,6 +33,25 @@ android:src="@drawable/dir_ok" > + + + + + diff --git a/app/src/main/res/layout-mdpi/lock_screen.xml b/app/src/main/res/layout-mdpi/lock_screen.xml new file mode 100644 index 0000000..3b146cb --- /dev/null +++ b/app/src/main/res/layout-mdpi/lock_screen.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout-mdpi/main.xml b/app/src/main/res/layout-mdpi/main.xml similarity index 72% rename from res/layout-mdpi/main.xml rename to app/src/main/res/layout-mdpi/main.xml index 8fba365..80e931d 100644 --- a/res/layout-mdpi/main.xml +++ b/app/src/main/res/layout-mdpi/main.xml @@ -2,15 +2,13 @@ + android:padding="8dp"> + style="@style/LinearLayoutToolbar" > + android:textStyle="bold"> - + + + android:id="@+id/linearLayoutNavigate" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + style="@style/LinearLayoutToolbar" > + + + + + + + + + + @@ -121,6 +162,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_arrowdown" android:paddingLeft="8dp" + android:textColor="@color/normal_fg" android:text="0%" > @@ -138,13 +180,14 @@ + + + - + + + android:layout_marginTop="8dp" + style="@style/LinearLayoutToolbar" > - - + + android:src="@drawable/ci_grid" > - - + \ No newline at end of file diff --git a/res/layout-hdpi/poweroff.xml b/app/src/main/res/layout-mdpi/poweroff.xml similarity index 85% rename from res/layout-hdpi/poweroff.xml rename to app/src/main/res/layout-mdpi/poweroff.xml index 6fda9b4..401246d 100644 --- a/res/layout-hdpi/poweroff.xml +++ b/app/src/main/res/layout-mdpi/poweroff.xml @@ -5,7 +5,7 @@ android:background="@color/normal_bg" android:gravity="center" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > diff --git a/res/layout-hdpi/pref_child.xml b/app/src/main/res/layout-mdpi/pref_child.xml similarity index 78% rename from res/layout-hdpi/pref_child.xml rename to app/src/main/res/layout-mdpi/pref_child.xml index 3861cda..8e2855c 100644 --- a/res/layout-hdpi/pref_child.xml +++ b/app/src/main/res/layout-mdpi/pref_child.xml @@ -3,16 +3,16 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" - android:minHeight="40dp " + android:minHeight="?android:attr/listPreferredItemHeight" android:paddingRight="?android:attr/scrollbarSize" > + android:textAppearance="?android:attr/textAppearanceLarge" /> diff --git a/res/layout-mdpi/prefs_main.xml b/app/src/main/res/layout-mdpi/prefs_main.xml similarity index 89% rename from res/layout-mdpi/prefs_main.xml rename to app/src/main/res/layout-mdpi/prefs_main.xml index 038a442..4b5ab3d 100644 --- a/res/layout-mdpi/prefs_main.xml +++ b/app/src/main/res/layout-mdpi/prefs_main.xml @@ -8,10 +8,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > + android:padding="8dp" > diff --git a/res/layout-hdpi/results_item.xml b/app/src/main/res/layout-mdpi/results_item.xml similarity index 80% rename from res/layout-hdpi/results_item.xml rename to app/src/main/res/layout-mdpi/results_item.xml index 205b7b0..0360550 100644 --- a/res/layout-hdpi/results_item.xml +++ b/app/src/main/res/layout-mdpi/results_item.xml @@ -5,15 +5,15 @@ android:layout_gravity="top|left" android:background="@color/normal_bg" android:orientation="horizontal" - android:paddingBottom="1.3dp" - android:paddingTop="1.3dp" > + android:paddingBottom="2dp" + android:paddingTop="2dp" > @@ -23,8 +23,8 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="top|left" - android:layout_marginLeft="2.7dp" - android:layout_marginRight="2.7dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="4dp" android:background="@color/normal_bg" android:orientation="vertical" > @@ -33,12 +33,12 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="top|left" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@color/normal_transparent" android:gravity="center_vertical" android:text="Filename" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" > @@ -47,12 +47,12 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="top|left" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@color/normal_transparent" android:gravity="center_vertical" android:text="Full path" - android:textAppearance="@style/sonyTextAppearanceSmall" + android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="#000000" > diff --git a/res/layout-mdpi/results_layout.xml b/app/src/main/res/layout-mdpi/results_layout.xml similarity index 88% rename from res/layout-mdpi/results_layout.xml rename to app/src/main/res/layout-mdpi/results_layout.xml index 8914529..2c70706 100644 --- a/res/layout-mdpi/results_layout.xml +++ b/app/src/main/res/layout-mdpi/results_layout.xml @@ -7,9 +7,8 @@ android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -84,6 +83,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_arrowup" android:paddingLeft="8dp" + android:textColor="@color/normal_fg" android:text="0%" > @@ -96,6 +96,7 @@ android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_arrowdown" android:paddingLeft="8dp" + android:textColor="@color/normal_fg" android:text="0%" > @@ -119,13 +120,12 @@ - + android:stretchMode="columnWidth"> \ No newline at end of file diff --git a/app/src/main/res/layout-mdpi/search.xml b/app/src/main/res/layout-mdpi/search.xml new file mode 100644 index 0000000..799fe3b --- /dev/null +++ b/app/src/main/res/layout-mdpi/search.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout-hdpi/service_details.xml b/app/src/main/res/layout-mdpi/service_details.xml similarity index 74% rename from res/layout-hdpi/service_details.xml rename to app/src/main/res/layout-mdpi/service_details.xml index c328f1d..b2e1505 100644 --- a/res/layout-hdpi/service_details.xml +++ b/app/src/main/res/layout-mdpi/service_details.xml @@ -4,13 +4,11 @@ android:layout_height="wrap_content" android:background="@color/normal_transparent" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -29,11 +28,12 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="0.5" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/service_details_layout_ok" > @@ -47,7 +47,7 @@ android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginRight="0.7dp" + android:layout_marginRight="1dp" android:layout_weight="1" android:orientation="vertical" > @@ -56,11 +56,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_piduid" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -69,11 +69,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_label" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -82,11 +82,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_name" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -95,63 +95,63 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_flags" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -168,11 +168,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -181,11 +181,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -194,11 +194,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -207,11 +207,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -220,11 +220,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -233,11 +233,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -246,11 +246,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -259,11 +259,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:text="" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" > diff --git a/res/layout-hdpi/simple_list_item_1.xml b/app/src/main/res/layout-mdpi/simple_list_item_1.xml similarity index 91% rename from res/layout-hdpi/simple_list_item_1.xml rename to app/src/main/res/layout-mdpi/simple_list_item_1.xml index e05002e..19e45ef 100644 --- a/res/layout-hdpi/simple_list_item_1.xml +++ b/app/src/main/res/layout-mdpi/simple_list_item_1.xml @@ -18,8 +18,8 @@ android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@android:color/background_dark" android:gravity="center_vertical" - android:paddingLeft="4dip" + android:paddingLeft="6dip" /> diff --git a/res/layout-hdpi/task_details.xml b/app/src/main/res/layout-mdpi/task_details.xml similarity index 77% rename from res/layout-hdpi/task_details.xml rename to app/src/main/res/layout-mdpi/task_details.xml index cfa30d4..d0aa4e9 100644 --- a/res/layout-hdpi/task_details.xml +++ b/app/src/main/res/layout-mdpi/task_details.xml @@ -4,13 +4,11 @@ android:layout_height="wrap_content" android:background="@color/normal_transparent" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -29,11 +28,12 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="0.5" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" android:gravity="center" + android:textColor="@color/normal_fg" android:text="@string/service_details_layout_ok" > @@ -43,10 +43,10 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginTop="10.7dp" + android:layout_marginTop="16dp" android:gravity="center" android:text="@string/task_details_layout_task_details" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -55,13 +55,13 @@ android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="5.3dp" > + android:layout_marginTop="8dp" > @@ -70,11 +70,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_piduid" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -83,11 +83,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_label" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -96,11 +96,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_name" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -109,11 +109,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="right" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="right" android:text="@string/service_details_layout_flags" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -130,11 +130,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -143,11 +143,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -156,11 +156,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -169,25 +169,25 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginBottom="0.7dp" + android:layout_marginBottom="1dp" android:background="#ffffff" android:gravity="center" - android:text="TextView" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -196,7 +196,7 @@ android:id="@+id/tm1_lv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:background="@color/normal_bg" android:fadeScrollbars="false" > diff --git a/res/layout-hdpi/taskmanager_item.xml b/app/src/main/res/layout-mdpi/taskmanager_item.xml similarity index 78% rename from res/layout-hdpi/taskmanager_item.xml rename to app/src/main/res/layout-mdpi/taskmanager_item.xml index 35ac03c..29af14f 100644 --- a/res/layout-hdpi/taskmanager_item.xml +++ b/app/src/main/res/layout-mdpi/taskmanager_item.xml @@ -4,18 +4,18 @@ android:layout_height="wrap_content" android:background="@color/normal_bg" android:orientation="horizontal" - android:paddingBottom="1.3dp" - android:paddingTop="1.3dp" > + android:paddingBottom="2dp" + android:paddingTop="2dp" > @@ -43,7 +42,7 @@ android:gravity="center_vertical" android:inputType="textMultiLine" android:text="Filename" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -60,7 +59,7 @@ android:gravity="center_vertical" android:inputType="textMultiLine" android:text="Full path" - android:textAppearance="@style/sonyTextAppearanceSmall" + android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="#000000" > @@ -77,7 +76,7 @@ android:gravity="center_vertical" android:inputType="textMultiLine" android:text="Full path" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#000000" > diff --git a/res/layout-hdpi/taskmanager_layout.xml b/app/src/main/res/layout-mdpi/taskmanager_layout.xml similarity index 80% rename from res/layout-hdpi/taskmanager_layout.xml rename to app/src/main/res/layout-mdpi/taskmanager_layout.xml index 4785ced..f1bdb50 100644 --- a/res/layout-hdpi/taskmanager_layout.xml +++ b/app/src/main/res/layout-mdpi/taskmanager_layout.xml @@ -4,16 +4,15 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -70,7 +69,7 @@ android:layout_height="fill_parent" android:layout_weight="1" android:gravity="center" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#000000" > @@ -80,8 +79,8 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" - android:layout_marginRight="0.7dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="1dp" android:layout_weight="2.12" android:background="@drawable/main_button" android:minWidth="96dp" @@ -90,10 +89,9 @@ + android:id="@+id/linearLayoutNavigate" + style="@style/LinearLayoutToolbar" + android:layout_marginTop="8dp" > @@ -111,12 +109,12 @@ android:id="@+id/sort_cpu" android:layout_width="0dp" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_cpu" - android:paddingRight="5.3dp" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/taskmanager_layout_sort_by_cpu" > @@ -124,12 +122,12 @@ android:id="@+id/sort_abc" android:layout_width="0dp" android:layout_height="fill_parent" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_az" - android:paddingRight="5.3dp" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/taskmanager_layout_sort_by_alpha" > @@ -138,7 +136,7 @@ android:id="@+id/linearLayout3" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="2.7dp" > + android:layout_marginTop="4dp" > @@ -159,7 +157,7 @@ android:layout_weight="1" android:gravity="center" android:text="@string/taskmanager_layout_services" - android:textAppearance="@style/sonyTextAppearanceLarge" + android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -169,7 +167,7 @@ android:id="@+id/linearLayout4" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="2.7dp" > + android:layout_marginTop="4dp" > @@ -198,7 +196,7 @@ android:id="@+id/services_lv" android:layout_width="fill_parent" android:layout_height="fill_parent" - android:layout_marginLeft="5.3dp" + android:layout_marginLeft="8dp" android:layout_weight="1" android:divider="@color/normal_transparent" android:fadeScrollbars="false" > diff --git a/res/layout-hdpi/types_layout.xml b/app/src/main/res/layout-mdpi/types_layout.xml similarity index 76% rename from res/layout-hdpi/types_layout.xml rename to app/src/main/res/layout-mdpi/types_layout.xml index 17a6624..5bddb45 100644 --- a/res/layout-hdpi/types_layout.xml +++ b/app/src/main/res/layout-mdpi/types_layout.xml @@ -1,11 +1,11 @@ + android:paddingBottom="8dp" > @@ -42,44 +42,45 @@ android:layout_gravity="center_vertical" android:layout_weight="1" android:orientation="horizontal" - android:paddingBottom="6.6dp" > + android:paddingBottom="10dp" > @@ -98,13 +99,13 @@ android:layout_gravity="right|center_vertical" android:gravity="right|center_vertical" android:text="@string/types_layout_application" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -112,9 +113,10 @@ @@ -132,10 +134,10 @@ diff --git a/res/layout-hdpi/types_view.xml b/app/src/main/res/layout-mdpi/types_view.xml similarity index 79% rename from res/layout-hdpi/types_view.xml rename to app/src/main/res/layout-mdpi/types_view.xml index 534abc9..a9c49f3 100644 --- a/res/layout-hdpi/types_view.xml +++ b/app/src/main/res/layout-mdpi/types_view.xml @@ -4,12 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > + android:id="@+id/linearLayoutTop" + style="@style/LinearLayoutToolbar" > @@ -42,8 +41,8 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" - android:layout_marginRight="0.7dp" + android:layout_marginLeft="4dp" + android:layout_marginRight="1dp" android:layout_weight="2.8" android:background="@drawable/main_button" android:minWidth="96dp" @@ -54,17 +53,16 @@ android:id="@+id/types_lv" android:layout_width="wrap_content" android:layout_height="0dp" - android:layout_marginTop="5.3dp" + android:layout_marginTop="8dp" android:layout_weight="1" android:divider="@color/normal_transparent" android:fadeScrollbars="false" > @@ -76,6 +74,7 @@ android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_ok" + android:textColor="@color/normal_fg" android:text="@string/types_view_layout_ok" > @@ -84,10 +83,11 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_add" + android:textColor="@color/normal_fg" android:text="@string/types_view_layout_add_new" > @@ -96,10 +96,11 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:layout_weight="1" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_del" + android:textColor="@color/normal_fg" android:text="@string/types_view_layout_cancel" > diff --git a/res/layout-hdpi/viewer_layout.xml b/app/src/main/res/layout-mdpi/viewer_layout.xml similarity index 74% rename from res/layout-hdpi/viewer_layout.xml rename to app/src/main/res/layout-mdpi/viewer_layout.xml index 419fe06..66cc294 100644 --- a/res/layout-hdpi/viewer_layout.xml +++ b/app/src/main/res/layout-mdpi/viewer_layout.xml @@ -4,12 +4,11 @@ android:layout_height="fill_parent" android:background="@color/normal_bg" android:orientation="vertical" - android:padding="5.3dp" > + android:padding="8dp" > @@ -29,12 +28,12 @@ android:layout_gravity="center" android:gravity="left" android:maxLines="1" - android:paddingBottom="1.3dp" - android:paddingLeft="5.3dp" - android:paddingRight="1.3dp" - android:paddingTop="1.3dp" + android:paddingBottom="2dp" + android:paddingLeft="8dp" + android:paddingRight="2dp" + android:paddingTop="2dp" android:text="@string/viewer_layout_title" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -48,12 +47,12 @@ android:focusable="false" android:gravity="left" android:inputType="textMultiLine" - android:paddingBottom="1.3dp" - android:paddingLeft="5.3dp" - android:paddingRight="1.3dp" - android:paddingTop="1.3dp" + android:paddingBottom="2dp" + android:paddingLeft="8dp" + android:paddingRight="2dp" + android:paddingTop="2dp" android:text="Filename" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:textStyle="bold" > @@ -67,11 +66,12 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:background="@drawable/main_button" android:drawableLeft="@drawable/ci_edit" android:minWidth="96dp" - android:paddingRight="5.3dp" + android:paddingRight="8dp" + android:textColor="@color/normal_fg" android:text="@string/viewer_layout_edit" > @@ -80,9 +80,9 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" - android:layout_marginLeft="2.7dp" + android:layout_marginLeft="4dp" android:background="@drawable/main_button" - android:minWidth="64dp" + android:minWidth="96dp" android:src="@drawable/ci_exit" > @@ -90,12 +90,12 @@ @@ -103,13 +103,13 @@ android:id="@+id/view_txt" android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="2.7dp" + android:layout_marginTop="4dp" android:layout_weight="1" android:background="@color/normal_bg" android:editable="false" android:focusable="false" android:inputType="textMultiLine" - android:textAppearance="@style/sonyTextAppearanceMedium" + android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/normal_fg" android:typeface="monospace" > diff --git a/res/menu-es/mainmenu.xml b/app/src/main/res/menu-es/mainmenu.xml similarity index 100% rename from res/menu-es/mainmenu.xml rename to app/src/main/res/menu-es/mainmenu.xml diff --git a/res/menu-es/resultsmenu.xml b/app/src/main/res/menu-es/resultsmenu.xml similarity index 100% rename from res/menu-es/resultsmenu.xml rename to app/src/main/res/menu-es/resultsmenu.xml diff --git a/res/menu-es/searchmenu.xml b/app/src/main/res/menu-es/searchmenu.xml similarity index 100% rename from res/menu-es/searchmenu.xml rename to app/src/main/res/menu-es/searchmenu.xml diff --git a/res/menu-ru/mainmenu.xml b/app/src/main/res/menu-ru/mainmenu.xml similarity index 100% rename from res/menu-ru/mainmenu.xml rename to app/src/main/res/menu-ru/mainmenu.xml diff --git a/res/menu-ru/resultsmenu.xml b/app/src/main/res/menu-ru/resultsmenu.xml similarity index 100% rename from res/menu-ru/resultsmenu.xml rename to app/src/main/res/menu-ru/resultsmenu.xml diff --git a/res/menu-ru/searchmenu.xml b/app/src/main/res/menu-ru/searchmenu.xml similarity index 100% rename from res/menu-ru/searchmenu.xml rename to app/src/main/res/menu-ru/searchmenu.xml diff --git a/res/menu/mainmenu.xml b/app/src/main/res/menu/mainmenu.xml similarity index 100% rename from res/menu/mainmenu.xml rename to app/src/main/res/menu/mainmenu.xml diff --git a/res/menu/resultsmenu.xml b/app/src/main/res/menu/resultsmenu.xml similarity index 100% rename from res/menu/resultsmenu.xml rename to app/src/main/res/menu/resultsmenu.xml diff --git a/res/menu/searchmenu.xml b/app/src/main/res/menu/searchmenu.xml similarity index 100% rename from res/menu/searchmenu.xml rename to app/src/main/res/menu/searchmenu.xml diff --git a/res/values-es/arrays.xml b/app/src/main/res/values-es/arrays.xml similarity index 98% rename from res/values-es/arrays.xml rename to app/src/main/res/values-es/arrays.xml index a4eb75a..8d4507d 100644 --- a/res/values-es/arrays.xml +++ b/app/src/main/res/values-es/arrays.xml @@ -1,11 +1,6 @@ - - Subcadena - Expresión regular - - 0 1 2 @@ -53,6 +48,7 @@ proc sysfs cgroup + debugfs 3 diff --git a/res/values-es/changelog.xml b/app/src/main/res/values-es/changelog.xml similarity index 100% rename from res/values-es/changelog.xml rename to app/src/main/res/values-es/changelog.xml diff --git a/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml similarity index 83% rename from res/values-es/strings.xml rename to app/src/main/res/values-es/strings.xml index f8e3c87..97e32e8 100644 --- a/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,9 +1,10 @@ - + - ReLaunch - <h2>Esta aplicación está diseñada sólo para - el Nook Simple Touch y el Sony - PRS-T1</h2><br><center><b>¿Desea + ReLaunchX + <h2>Esta aplicación está diseñada sólo para:<br> + el Nook Simple Touch<br> + el Sony PRS-T1<br> + el ONYX Boox Max</h2><br><center><b>¿Desea continuar?</b></center> Activar WiFi Configuración WiFi @@ -154,69 +155,63 @@ Cancelar Database operations Do you really want to cleanup cache? - ¡Modelo erroneo! - - NO - M libre - WiFi OFF - WiFi ON - Seleccionar aplicación - Aplicaciones usadas recientemente - Todas las aplicaciones - Aplicaciones favoritas - Lista de cambios - OK - Añadir a favoritos - Marcar como leído - Quitar marca de leído - Olvidar todas las marcas - Obrir con ... - Crear cadena de eventos ... - Copy - Move - Paste - Eliminar - ¡No eliminar carpetas vacías! - Eliminar carpetas vacías - Cancelar - Seleccionar tipo de evento - Acción no encontrada - Acción no encontrada - Acción para archivo - de tipo - no encontrado - Otro - Tipo de evento - Eliminar advertencia de archivo - Estás seguro de eliminar el archivo - \? - Borrar advertencia de carpeta vacía - Está seguro de elimina carpeta vacía - \? - Peligro, borrar carpeta no vacía - Está seguro de borrar carpeta no vacía - (acto potencialmente peligroso) \? - ¡Esto es un lanzador! - Estás seguro de que quieres salir ? - Abierto recientemente - Favoritos - Home - Elegir columnas - Por defecto - WiFi está activada - WiFi está desactivado - anterior - próximo + ¡Modelo erroneo! + + NO + M libre + WiFi OFF + WiFi ON + Seleccionar aplicación + Aplicaciones usadas recientemente + Todas las aplicaciones + Aplicaciones favoritas + Lista de cambios + OK + Añadir a favoritos + Marcar como leído + Quitar marca de leído + Olvidar todas las marcas + Obrir con ... + Crear cadena de eventos ... + Copy + Move + Paste + Eliminar + ¡No eliminar carpetas vacías! + Eliminar carpetas vacías + Cancelar + Seleccionar tipo de evento + Acción no encontrada + Acción no encontrada + Acción para archivo + de tipo + no encontrado + Otro + Tipo de evento + Eliminar advertencia de archivo + Estás seguro de eliminar el archivo + \? + Borrar advertencia de carpeta vacía + Está seguro de elimina carpeta vacía + \? + Peligro, borrar carpeta no vacía + Está seguro de borrar carpeta no vacía + (acto potencialmente peligroso) \? + ¡Esto es un lanzador! + Estás seguro de que quieres salir ? + Abierto recientemente + Favoritos + Home + Elegir columnas + Por defecto + WiFi está activada + WiFi está desactivado + anterior + próximo Acción no encontrado! - <h1><center>ReLaunch</center></h1><center><b>lanzador - para el lector electrónico Nook Simple - Touch</b></center><br><center>Versión: - <b> - </b></center><br><center>Código - fuente: <a - href=\"https://github.com/yiselieren/ReLaunch\">git://github.com/yiselieren/ReLaunch.git</a></center> - + <h1><center>ReLaunchX</center></h1><center><b>lanzador\n\t\tpara el lector electrónico</b></center><br><center>Versión:\n\t\t<b> + </b></center><br><center>Código\n\t\tfuente: <a\n\t\thref=\"https://github.com/Leszek111/ReLaunchX\">https://github.com/Leszek111/ReLaunchX.git</a></center>\n\t OK Ver histórico de cambios (changelog) Histórico de cambios @@ -339,18 +334,6 @@ pantalla eInk Con qué frecuencia la pantalla se actualiza por completo - Tamaño de fuente en nombres de archivos/carpetas - - Tamaño de fuente en nobres de archivos y - directorios de cualquer lista... px - Tamaño de fuente para nombres de directorios - adicionales - Tamaño de fuente para de otros directorios como - Favoritos y otras listas... px - Archivos y el tamaño de los iconos de directorios - - Icono de tamaño para los archivos y directorios ... - px (0 - desactivar el icono) Lista de archivos y carpetas (por defecto) Lista de carpetas inicial Lista de reciente apertura diff --git a/res/values-ru/changelog.xml b/app/src/main/res/values-ru/changelog.xml similarity index 95% rename from res/values-ru/changelog.xml rename to app/src/main/res/values-ru/changelog.xml index 926c87a..1b68c15 100644 --- a/res/values-ru/changelog.xml +++ b/app/src/main/res/values-ru/changelog.xml @@ -3,7 +3,7 @@ <b>СПРАВКА</b><br> - ReLaunch представляет собой универсальный launcher программ чтения и общесистемную + ReLaunchX представляет собой универсальный launcher программ чтения и общесистемную оболочку (рабочий стол) для Nook Simple Touch (поддерживается также Sony PRS-T1).<br> Предполагается, что библиотека пользователя организована в виде упорядоченной структуры папок, а файлы книг имеют имена, соответствующие их названиям.<br> diff --git a/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml similarity index 84% rename from res/values-ru/strings.xml rename to app/src/main/res/values-ru/strings.xml index 69507d7..df6dd3c 100644 --- a/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,8 +1,10 @@ - ReLaunch - <h2>Эта программа разработана для Nook Simple - Touch или Sony PRS-T1!</h2><br><center><b>Хотите + ReLaunchX + <h2>Эта программа разработана для:<br> + Nook Simple Touch<br> + Sony PRS-T1<br> + ONYX Boox Max</h2><br><center><b>Хотите продолжить?</b></center> Выкл. WiFi Настройка WiFi @@ -162,96 +164,88 @@ открытые\"? Вы действительно хотите очистить список \"Избранное\"? - Не верная модель устройства! - Да - Нет - M своб. - WiFi выкл. - WiFi ВКЛ. - Выберите приложение - Недавно запущеные приложения - Все приложения - Избранные приложения - Список изменений - OK - Добавить в \"Избранное\" - Отметить как прочтенное - Снять пометку о прочтении - Снять все пометки - Открыть с помощью... - Создать событие... - Копировать - Переместить - Переместить - Вставить - Создать новую папку... - Введите имя новой папки - Не удалось создать папку - Переименовать... - Введите новое имя файла - Удалить - Удалить НЕ ПУСТУЮ папку! - Удалить пустую папку - Отмена - Выберите вид события - Действие не найдено - Действие не найдено - Действие для файла - типа - не найдено - Другое - Вид события - Предупреждение - Вы действительно хотите удалить файл - \? - Предупреждение - Вы действительно хотите удалить пустую папку + Не верная модель устройства! + Да + Нет + M своб. + WiFi выкл. + WiFi ВКЛ. + Выберите приложение + Недавно запущеные приложения + Все приложения + Избранные приложения + Список изменений + OK + Добавить в \"Избранное\" + Отметить как прочтенное + Снять пометку о прочтении + Снять все пометки + Открыть с помощью... + Создать событие... + Копировать + Переместить + Переместить + Вставить + Создать новую папку... + Введите имя новой папки + Не удалось создать папку + Переименовать... + Введите новое имя файла + Удалить + Удалить НЕ ПУСТУЮ папку! + Удалить пустую папку + Отмена + Выберите вид события + Действие не найдено + Действие не найдено + Действие для файла + типа + не найдено + Другое + Вид события + Предупреждение + Вы действительно хотите удалить файл + \? + Предупреждение + Вы действительно хотите удалить пустую папку - \? - Предупреждение - Вы действительно хотите удалить НЕ ПУСТУЮ папку + \? + Предупреждение + Вы действительно хотите удалить НЕ ПУСТУЮ папку - (потенциально опасное действие)? - Ошибка - Не удалось скопировать/переместить - Не удалось переименовать - Режим рабочего стола! - Вы действительно хотите выйти? - Недавно открытые - Избранное - Домашние папки - Вывод данной папки - По умолчанию - WiFi ВКЛЮЧЕН - WiFi выключен - пред. - след. - Показать названия книг - Показать файлы - Переименовать по тегам fb2/epub… - Сортировать файлы по - имени файла А-Я - имени файла Я-А - алфавиту А-Я - алфавиту Я-А - Аннотация - Свойства - Свойства файла - Имя: - Размер: - Дата: - Владелец: - Разрешения: + (потенциально опасное действие)? + Ошибка + Не удалось скопировать/переместить + Не удалось переименовать + Режим рабочего стола! + Вы действительно хотите выйти? + Недавно открытые + Избранное + Домашние папки + Вывод данной папки + По умолчанию + WiFi ВКЛЮЧЕН + WiFi выключен + пред. + след. + Показать названия книг + Показать файлы + Переименовать по тегам fb2/epub… + Сортировать файлы по + имени файла + алфавиту + Аннотация + Свойства + Свойства файла + Имя: + Размер: + Дата: + Владелец: + Разрешения: Действие не найдено! - <h1><center>ReLaunch</center></h1><center><b>Запуск - программ чтения книг и рабочий стол для Nook Simple - Touch</b></center><br><center>Version: - <b> - </b></center><br><center>Source - code: <a - href=\"https://github.com/yiselieren/ReLaunch\">git://github.com/yiselieren/ReLaunch.git</a></center> - + <h1><center>ReLaunchX</center></h1><center><b>Запуск\n\t\tпрограмм чтения книг и рабочий стол</b></center><br><center>Version:\n\t\t<b> + </b></center><br><center>Source\n\t\tcode: <a\n\t\thref=\"https://github.com/Leszek111/ReLaunchX\">https://github.com/Leszek111/ReLaunchX.git</a></center>\n\t OK Справка Справка @@ -381,14 +375,6 @@ Частота полного обновления экрана EInk Как часто экран будет обновляться полностью... (обновлений) - Размер шрифта имен файлов/папок - Размер шрифта основной строки имен файлов и папок во всех - списках... px - Дополнительный размер шрифта имен файлов - Размер шрифта дополнительной строки имен файлов - Размер иконок имен файлов/папок - Размер иконок для имен файлов и папок во всех - списках... px (0 - без иконок) Вывод названия файла в несколько строк Вывод названия файла в одну строку Однострочный режим вывода @@ -540,8 +526,6 @@ > Размеры списков > Файловый менеджер > Служебные операции - Подстрока - Регулярное выражение Имени файла Ближайшем имени папки Полном маршруте и имени файла @@ -605,17 +589,14 @@ Не изменяется Принудительная книжная Принудительная альбомная - Запускать как рабочий стол - Запускать как обычную программу - Определяется расширенными настройками Режим файлового менеджера Режим библиотеки Определяется расширенными настройками Показывать полный путь в строке заголовка Показывать имя папки в строке заголовка Полный путь к папке - Добавить к Начальным папкам - Установить Начальной папкой + Добавить к Начальным папкам + Установить Начальной папкой Ничего не делать Открыть \"Избранные приложения\" Выполнить приложение diff --git a/res/values/arrays.xml b/app/src/main/res/values/arrays.xml similarity index 94% rename from res/values/arrays.xml rename to app/src/main/res/values/arrays.xml index d577576..5a4786d 100644 --- a/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,11 +1,6 @@ - - @string/arr_search_as_values_substring - @string/arr_search_as_values_regexp - - 0 1 2 @@ -53,6 +48,7 @@ proc sysfs cgroup + debugfs 3 @@ -137,6 +133,7 @@ POWEROFF SWITCHWIFI RUN + OPTIONSMENU @string/arr_settings_button_actions_names_1 @@ -145,6 +142,7 @@ @string/arr_settings_button_actions_names_4 @string/arr_settings_button_actions_names_5 @string/arr_settings_button_actions_names_6 + @string/arr_settings_button_actions_names_7 NOTHING @@ -214,17 +212,6 @@ @string/arr_screen_orientation_names_2 @string/arr_screen_orientation_names_3 - - - LAUNCHER - PROGRAM - UNKNOWN - - - @string/arr_start_mode_names_1 - @string/arr_start_mode_names_2 - @string/arr_start_mode_names_3 - FILES BOOKS diff --git a/app/src/main/res/values/changelog.xml b/app/src/main/res/values/changelog.xml new file mode 100644 index 0000000..43a27ed --- /dev/null +++ b/app/src/main/res/values/changelog.xml @@ -0,0 +1,30 @@ + + + + + ReLaunchX is a fully open source monochrome file manager/book manager designed for e-ink. It can be used as an Android launcher too.<br><br> + Non-obvious:<br> + - Bottom task toolbar is available only when run as a launcher.<br> + - Some functions are disabled on non-rooted devices.<br> + - Buttons and other things react on tap, long-tap, double-tap. Check the settings. + <br><br> + + + <b>APPRECIATIONS</b><br> + - ReLaunch project<br> + &nbsp;&nbsp;<a href="https://github.com/yiselieren/ReLaunch">https://github.com/yiselieren/ReLaunch</a><br> + - Android Asset Studio (icons)<br> + &nbsp;&nbsp;<a href="https://romannurik.github.io/AndroidAssetStudio/index.html">https://romannurik.github.io/AndroidAssetStudio/index.html</a><br> + - CoolReader Engine project (Eink support code)<br> + &nbsp;&nbsp;<a href="http://sourceforge.net/projects/crengine/">http://sourceforge.net/projects/crengine/</a><br> + - Interactivemania (icons pack)<br> + &nbsp;&nbsp;<a href="http://www.interactivemania.com/">http://www.interactivemania.com/</a><br> + &nbsp;&nbsp;<a href="http://www.defaulticon.com/">http://www.defaulticon.com/</a><br> + <br> + + + <b>CHANGELOG</b><br> + <a href="https://github.com/Leszek111/ReLaunchX/">https://github.com/Leszek111/ReLaunchX/</a><br> + + + \ No newline at end of file diff --git a/res/values/colors.xml b/app/src/main/res/values/colors.xml similarity index 100% rename from res/values/colors.xml rename to app/src/main/res/values/colors.xml diff --git a/res/values/limitations.xml b/app/src/main/res/values/limitations.xml similarity index 60% rename from res/values/limitations.xml rename to app/src/main/res/values/limitations.xml index 1886c46..5458271 100644 --- a/res/values/limitations.xml +++ b/app/src/main/res/values/limitations.xml @@ -4,17 +4,29 @@ zoom2 EBX-5047 + Max + Max2 + C67ML_Carta2 BarnesAndNobble sony + ONYX + Onyx NOOK PRS-T1 + Max + Max2 + C67ML_Carta2 + BNRV520 NOOK + Max + Max2 + C67ML_Carta2 \ No newline at end of file diff --git a/app/src/main/res/values/shell.xml b/app/src/main/res/values/shell.xml new file mode 100644 index 0000000..ee95f44 --- /dev/null +++ b/app/src/main/res/values/shell.xml @@ -0,0 +1,6 @@ + + + + /system/bin/sh - + + \ No newline at end of file diff --git a/res/values/strings.xml b/app/src/main/res/values/strings.xml similarity index 78% rename from res/values/strings.xml rename to app/src/main/res/values/strings.xml index f927e87..73b3553 100644 --- a/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,8 +1,10 @@ - ReLaunch - <h2>The tool is for Nook Simple Touch or Sony - PRS-T1 only!</h2><br><center><b>Continue + ReLaunchX + <h2>The tool is made for:<br> + Nook Simple Touch<br> + Sony PRS-T1<br> + ONYX Boox Max</h2><br><center><b>Continue anyway ?</b></center> WiFi off Setup WiFi @@ -21,7 +23,7 @@ Add new AND Cancel - One level up + Upper level Memory Mem: Battery @@ -37,15 +39,14 @@ Case sensitive Search known extensions only Sort search results - Search as - Search in - Search root - May be directory or comma separated directories - list + Search as regular expression + Match inside: + Search path(s): + comma separated Search string - Search + Search: Cancel - Show all books (known extensions) from search root + Show all books (known extensions) from search path Search Kill @@ -95,12 +96,12 @@ Power Off confirmation Are you sure to power off your device ? Disks/partitions - Mount point - FS - total - used - free - RO/RW + Mount point: + FS: + Total: + Used: + Free: + RO/RW: RO RW Implemented only on NOOK Simple Touch. @@ -163,94 +164,87 @@ Do you really want to clear Favorites list? - Wrong model! - YES - NO - M free - WiFi is off - WiFi is ON - Select application - Last recently used applications - All applications - Favorite applications - What\'s new - OK - Add to favorites - Mark as read - Remove \"read\" mark - Forget all marks - Open with ... - Create Intent ... - Copy - Move - Move - Paste - Rename... - Create new folder... - Enter the name of new folder - Unable to create the folder - Enter new name of file - Delete - Delete NON-EMPTY directory! - Delete empty directory - Cancel - Select intent type - Activity not found - Activity not found - Activity for file - with type - not found - Other - Intent type - Delete file warning - Are you sure to delete file - \? - Delete empty directory warning - Are you sure to delete empty directory - \? - Delete non empty directory warning - Are you sure to delete non-empty directory - (dangerous) \? - Error - Unable to copy/move - Unable to rename - This is a launcher! - Are you sure you want to quit ? - Last opened - Favorites - Home - Select columns - Default - WiFi is ON - WiFi is off - prev - next - Show book titles - Show file names - Rename file with fb2/epub tags... - Sort the files in the order by - filename A-Z - filename Z-A - by alphabetical order A-Z - by alphabetical order Z-A - Show annotation - Properties - File Properties - Name: - Size: - Date: - Owner: - Permissions: + Wrong model! + YES + NO + M free + WiFi is off + WiFi is ON + Select application + Last recently used applications + All applications + Favorite applications + What\'s new + OK + Add to favorites + Mark as read + Remove \"read\" mark + Forget all marks + Remove from history + Open with ... + Create Intent ... + Copy + Move + Move + Paste + Rename... + Create new folder... + Enter the name of new folder + Unable to create the folder + Enter new name of file + Delete + Delete NON-EMPTY directory! + Delete empty directory + Cancel + Select intent type + Activity not found + Activity not found + Activity for file + with type + not found + Other + Intent type + Delete file warning + Are you sure to delete file + \? + Delete empty directory warning + Are you sure to delete empty directory + \? + Delete non empty directory warning + Are you sure to delete non-empty directory + (dangerous) \? + Error + Unable to copy/move + Unable to rename + This is a launcher! + Are you sure you want to quit ? + Last opened + Favorites + Home + Select columns + Default + WiFi is ON + WiFi is off + PgUp + PgDn + Show book titles + Show file names + Rename file with fb2/epub tags... + Order list by: + File Name + Book Title + Show book details + Properties + File + Name: + Size: + Date: + Owner: + Permissions: Activity not found! - <h1><center>ReLaunch</center></h1><center><b>Reader - launcher for Nook Simple - Touch</b></center><br><center>Version: - <b> - </b></center><br><center>Source - code: <a - href=\"https://github.com/yiselieren/ReLaunch\">git://github.com/yiselieren/ReLaunch.git</a></center> - + <h1><center>ReLaunchX</center></h1><center><b> E-ink tablet books manager and launcher</b></center><br><center>Version:\n\t\t<b> + </b></center><br><center>Source\n\t\tcode: <a\n\t\thref=\"https://github.com/Leszek111/ReLaunchX\">https://github.com/Leszek111/ReLaunchX.git</a></center>\n\t<br><center>F-droid\n\t\tbuild: <a\n\t\thref=\"https://f-droid.org/packages/com.gacode.relaunchx\">https://f-droid.org/packages/com.gacode.relaunchx</a></center>\n\t OK Information Information @@ -318,7 +312,7 @@ Show all files Full screen Work in full screen mode - Show upper title bar + Show Android status bar Turn on selection of start directory Show item in folder context menu Don\'t show item in folder context menu @@ -369,15 +363,9 @@ EInk Screen Update Mode EInk Screen Full Update Interval How often EInk will be fully updated - Files and directories names font size - Font size for files and directories names in all - lists... px - Additional font size for files... px - - Font size for additional line in file names - Files and directories icons size - Icon size for files and directories... px (0 - - disable icon) + Show icons in file list + Show associated app icons + Show file extensions (faster) Files and directories list (default) Output filename in multi lines Output filename in single line @@ -389,7 +377,7 @@ Determining the number of columns All applications Favorites applications - Show separator between rows in files list + Show separator between rows in file list Home Button Single Tap Home Button Double Tap Home Button Long Tap @@ -516,8 +504,6 @@ > Size of lists > File manager settings > Service settings - Substring - Regexp File name Innermost directory name Full path including file name @@ -557,6 +543,7 @@ Power Off device Switch WiFi state Run application + Open Options menu Nothing Open \"Application manager\" window Lock device @@ -581,24 +568,46 @@ Don\'t change Force to portrait Force to landscape - Start as launcher - Start as usual program - Defined by advanced settings File manager mode Library mode Defined by advanced settings - Font size of the files list - Font size + Files and books view font size + List font size Show full directory path in title Show current directory name in title Show full directory path in title - Add to Start folders - Set as Start folder + Add to Start folders + Set as Start folder Nothing Open \"Favorite applications\" window Run application Authors: Series: Title: - + File Extension + File Modification Date + File Size + Show file details in second line + Show file size and modification date. + Don\'t show file size and modification date. + (no author) + (no title) + Storage info + tap to see details + Show additional filesystem details + Show standard storage usage summary + Storage info view + Default 60. Warning: non-default slows down the app! + Toolbar buttons height + Directory + Lock password + ReLaunchX Lock Screen + Incorrect + No password + ↑ Ascending + ↓ Descending + Include hidden files + Adjust filters + OK + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..593bf2c --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/values.xml b/app/src/main/res/values/values.xml similarity index 100% rename from res/values/values.xml rename to app/src/main/res/values/values.xml diff --git a/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml similarity index 81% rename from res/xml/prefs.xml rename to app/src/main/res/xml/prefs.xml index f7bdd19..ad97a5e 100644 --- a/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -2,23 +2,13 @@ - @@ -28,7 +18,7 @@ android:entries="@array/screen_orientation_names" android:entryValues="@array/screen_orientation_values" android:key="screenOrientation" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_screenOrientation_title" /> @@ -36,7 +26,7 @@ + + @@ -172,16 +182,16 @@ android:defaultValue="10" android:enabled="true" android:key="einkUpdateInterval" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:summary="@string/pref_i_einkUpdateInterval_sum" android:title="@string/pref_i_einkUpdateInterval_title" /> - - - + android:summaryOff="@string/pref_i_showIcon_off" + android:summaryOn="@string/pref_i_showIcon_on" + android:title="@string/pref_i_showIcon_title" /> + + + + + @@ -262,7 +270,7 @@ android:entries="@array/output_columns_names" android:entryValues="@array/output_columns_values" android:key="columnsHomeList" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsHomeList_title" /> @@ -272,7 +280,7 @@ android:entries="@array/output_columns_names" android:entryValues="@array/output_columns_values" android:key="columnsLRU" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsLRU_title" /> @@ -282,7 +290,7 @@ android:entries="@array/output_columns_names" android:entryValues="@array/output_columns_values" android:key="columnsFAV" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsFAV_title" /> @@ -292,7 +300,7 @@ android:entries="@array/output_columns_names" android:entryValues="@array/output_columns_values" android:key="columnsSearch" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsSearch_title" /> @@ -302,7 +310,7 @@ android:entries="@array/output_columns_names" android:entryValues="@array/output_columns_values" android:key="columnsAppAll" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsAppAll_title" /> @@ -312,7 +320,7 @@ android:entries="@array/output_columns_names" android:entryValues="@array/output_columns_values" android:key="columnsAppFav" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsAppFav_title" /> @@ -322,7 +330,7 @@ android:entries="@array/output_columns_intensity_names" android:entryValues="@array/output_columns_intensity_values" android:key="columnsAlgIntensity" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_columnsAlgIntensity_title" /> @@ -330,19 +338,19 @@ - + @@ -423,7 +429,7 @@ android:entries="@array/home_button_actions_names" android:entryValues="@array/home_button_actions_values" android:key="homeButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_homeButtonDT_title" /> @@ -433,7 +439,7 @@ android:entries="@array/home_button_actions_names" android:entryValues="@array/home_button_actions_values" android:key="homeButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_homeButtonLT_title" /> @@ -443,7 +449,7 @@ android:entries="@array/lru_button_actions_names" android:entryValues="@array/lru_button_actions_values" android:key="lruButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_lruButtonST_title" /> @@ -453,7 +459,7 @@ android:entries="@array/lru_button_actions_names" android:entryValues="@array/lru_button_actions_values" android:key="lruButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_lruButtonDT_title" /> @@ -463,7 +469,7 @@ android:entries="@array/lru_button_actions_names" android:entryValues="@array/lru_button_actions_values" android:key="lruButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_lruButtonLT_title" /> @@ -473,7 +479,7 @@ android:entries="@array/fav_button_actions_names" android:entryValues="@array/fav_button_actions_values" android:key="favButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_favButtonST_title" /> @@ -483,7 +489,7 @@ android:entries="@array/fav_button_actions_names" android:entryValues="@array/fav_button_actions_values" android:key="favButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_favButtonDT_title" /> @@ -493,7 +499,7 @@ android:entries="@array/fav_button_actions_names" android:entryValues="@array/fav_button_actions_values" android:key="favButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_favButtonLT_title" /> @@ -503,7 +509,7 @@ android:entries="@array/settings_button_actions_names" android:entryValues="@array/settings_button_actions_values" android:key="settingsButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_settingsButtonST_title" /> @@ -513,17 +519,17 @@ android:entries="@array/settings_button_actions_names" android:entryValues="@array/settings_button_actions_values" android:key="settingsButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_settingsButtonDT_title" /> @@ -533,7 +539,7 @@ android:entries="@array/advanced_button_actions_names" android:entryValues="@array/advanced_button_actions_values" android:key="advancedButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_advancedButtonST_title" /> @@ -543,7 +549,7 @@ android:entries="@array/advanced_button_actions_names" android:entryValues="@array/advanced_button_actions_values" android:key="advancedButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_advancedButtonDT_title" /> @@ -553,7 +559,7 @@ android:entries="@array/advanced_button_actions_names" android:entryValues="@array/advanced_button_actions_values" android:key="advancedButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_advancedButtonLT_title" /> @@ -563,7 +569,7 @@ android:entries="@array/mem_button_actions_names" android:entryValues="@array/mem_button_actions_values" android:key="memButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_memButtonST_title" /> @@ -573,7 +579,7 @@ android:entries="@array/mem_button_actions_names" android:entryValues="@array/mem_button_actions_values" android:key="memButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_memButtonDT_title" /> @@ -583,7 +589,7 @@ android:entries="@array/mem_button_actions_names" android:entryValues="@array/mem_button_actions_values" android:key="memButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_memButtonLT_title" /> @@ -593,7 +599,7 @@ android:entries="@array/bat_button_actions_names" android:entryValues="@array/bat_button_actions_values" android:key="batButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_batButtonST_title" /> @@ -603,7 +609,7 @@ android:entries="@array/bat_button_actions_names" android:entryValues="@array/bat_button_actions_values" android:key="batButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_batButtonDT_title" /> @@ -613,7 +619,7 @@ android:entries="@array/bat_button_actions_names" android:entryValues="@array/bat_button_actions_values" android:key="batButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_batButtonLT_title" /> @@ -623,7 +629,7 @@ android:entries="@array/appfav_button_actions_names" android:entryValues="@array/appfav_button_actions_values" android:key="appFavButtonST" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_appFavButtonST_title" /> @@ -633,7 +639,7 @@ android:entries="@array/appfav_button_actions_names" android:entryValues="@array/appfav_button_actions_values" android:key="appFavButtonDT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_appFavButtonDT_title" /> @@ -643,7 +649,7 @@ android:entries="@array/appfav_button_actions_names" android:entryValues="@array/appfav_button_actions_values" android:key="appFavButtonLT" - android:layout="@+layout/pref_child" + android:layout="@layout/pref_child" android:persistent="true" android:selectable="true" android:title="@string/pref_i_appFavButtonLT_title" /> @@ -652,7 +658,7 @@ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..484dfe6 --- /dev/null +++ b/build.gradle @@ -0,0 +1,18 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.3.1' + } +} +allprojects { + repositories { + jcenter() + } +} + +dependencies { +} diff --git a/debug.keystore b/debug.keystore deleted file mode 100644 index 47a67c4..0000000 Binary files a/debug.keystore and /dev/null differ diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..d2e6a90 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,4 @@ +ANDROID_BUILD_MIN_SDK_VERSION=7 +ANDROID_BUILD_TARGET_SDK_VERSION=15 +ANDROID_BUILD_TOOLS_VERSION=26.0.2 +ANDROID_BUILD_SDK_VERSION=26 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..13372ae Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b311839 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Nov 14 23:44:52 CET 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..9d82f78 --- /dev/null +++ b/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..aec9973 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libs/ebookParser-1.3.jar b/libs/ebookParser-1.3.jar deleted file mode 100644 index 78dc0a4..0000000 Binary files a/libs/ebookParser-1.3.jar and /dev/null differ diff --git a/libs/ebookparser b/libs/ebookparser new file mode 160000 index 0000000..8e5d7c5 --- /dev/null +++ b/libs/ebookparser @@ -0,0 +1 @@ +Subproject commit 8e5d7c5aea7c59a72054b3c891cc2bb9ff1c9e82 diff --git a/libs/libs.iml b/libs/libs.iml new file mode 100644 index 0000000..d5798e6 --- /dev/null +++ b/libs/libs.iml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/proguard.cfg b/proguard.cfg deleted file mode 100644 index b1cdf17..0000000 --- a/proguard.cfg +++ /dev/null @@ -1,40 +0,0 @@ --optimizationpasses 5 --dontusemixedcaseclassnames --dontskipnonpubliclibraryclasses --dontpreverify --verbose --optimizations !code/simplification/arithmetic,!field/*,!class/merging/* - --keep public class * extends android.app.Activity --keep public class * extends android.app.Application --keep public class * extends android.app.Service --keep public class * extends android.content.BroadcastReceiver --keep public class * extends android.content.ContentProvider --keep public class * extends android.app.backup.BackupAgentHelper --keep public class * extends android.preference.Preference --keep public class com.android.vending.licensing.ILicensingService - --keepclasseswithmembernames class * { - native ; -} - --keepclasseswithmembers class * { - public (android.content.Context, android.util.AttributeSet); -} - --keepclasseswithmembers class * { - public (android.content.Context, android.util.AttributeSet, int); -} - --keepclassmembers class * extends android.app.Activity { - public void *(android.view.View); -} - --keepclassmembers enum * { - public static **[] values(); - public static ** valueOf(java.lang.String); -} - --keep class * implements android.os.Parcelable { - public static final android.os.Parcelable$Creator *; -} diff --git a/project.properties b/project.properties deleted file mode 100644 index 5a70945..0000000 --- a/project.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-7 diff --git a/res/drawable-hdpi/icon.png b/res/drawable-hdpi/icon.png deleted file mode 100644 index 1136e42..0000000 Binary files a/res/drawable-hdpi/icon.png and /dev/null differ diff --git a/res/drawable-mdpi/arrow_down.png b/res/drawable-mdpi/arrow_down.png deleted file mode 100644 index 8acdefa..0000000 Binary files a/res/drawable-mdpi/arrow_down.png and /dev/null differ diff --git a/res/drawable-mdpi/arrow_up.png b/res/drawable-mdpi/arrow_up.png deleted file mode 100644 index 3d2745e..0000000 Binary files a/res/drawable-mdpi/arrow_up.png and /dev/null differ diff --git a/res/drawable-mdpi/bat1.png b/res/drawable-mdpi/bat1.png deleted file mode 100644 index 7b293e7..0000000 Binary files a/res/drawable-mdpi/bat1.png and /dev/null differ diff --git a/res/drawable-mdpi/bat2.png b/res/drawable-mdpi/bat2.png deleted file mode 100644 index 741986c..0000000 Binary files a/res/drawable-mdpi/bat2.png and /dev/null differ diff --git a/res/drawable-mdpi/bat3.png b/res/drawable-mdpi/bat3.png deleted file mode 100644 index dfe2476..0000000 Binary files a/res/drawable-mdpi/bat3.png and /dev/null differ diff --git a/res/drawable-mdpi/bat4.png b/res/drawable-mdpi/bat4.png deleted file mode 100644 index 9f5e846..0000000 Binary files a/res/drawable-mdpi/bat4.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_add.png b/res/drawable-mdpi/ci_add.png deleted file mode 100644 index 0997297..0000000 Binary files a/res/drawable-mdpi/ci_add.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_arrowdown.png b/res/drawable-mdpi/ci_arrowdown.png deleted file mode 100644 index c5d3add..0000000 Binary files a/res/drawable-mdpi/ci_arrowdown.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_arrowup.png b/res/drawable-mdpi/ci_arrowup.png deleted file mode 100644 index 1cf5c7f..0000000 Binary files a/res/drawable-mdpi/ci_arrowup.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_associations.png b/res/drawable-mdpi/ci_associations.png deleted file mode 100644 index c76064b..0000000 Binary files a/res/drawable-mdpi/ci_associations.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_az.png b/res/drawable-mdpi/ci_az.png deleted file mode 100644 index e31cdc3..0000000 Binary files a/res/drawable-mdpi/ci_az.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_books.png b/res/drawable-mdpi/ci_books.png deleted file mode 100644 index b0fa8b3..0000000 Binary files a/res/drawable-mdpi/ci_books.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_cpu.png b/res/drawable-mdpi/ci_cpu.png deleted file mode 100644 index 5602a3e..0000000 Binary files a/res/drawable-mdpi/ci_cpu.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_default.png b/res/drawable-mdpi/ci_default.png deleted file mode 100644 index 739af73..0000000 Binary files a/res/drawable-mdpi/ci_default.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_del.png b/res/drawable-mdpi/ci_del.png deleted file mode 100644 index 443d1b6..0000000 Binary files a/res/drawable-mdpi/ci_del.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_delsmall.png b/res/drawable-mdpi/ci_delsmall.png deleted file mode 100644 index 369b5d0..0000000 Binary files a/res/drawable-mdpi/ci_delsmall.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_edit.png b/res/drawable-mdpi/ci_edit.png deleted file mode 100644 index 05647b9..0000000 Binary files a/res/drawable-mdpi/ci_edit.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_eightdir.png b/res/drawable-mdpi/ci_eightdir.png deleted file mode 100644 index a8b9c4c..0000000 Binary files a/res/drawable-mdpi/ci_eightdir.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_exit.png b/res/drawable-mdpi/ci_exit.png deleted file mode 100644 index eed39b2..0000000 Binary files a/res/drawable-mdpi/ci_exit.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_fav.png b/res/drawable-mdpi/ci_fav.png deleted file mode 100644 index 6a67080..0000000 Binary files a/res/drawable-mdpi/ci_fav.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_fava.png b/res/drawable-mdpi/ci_fava.png deleted file mode 100644 index 70171a6..0000000 Binary files a/res/drawable-mdpi/ci_fava.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_filter.png b/res/drawable-mdpi/ci_filter.png deleted file mode 100644 index 71344fa..0000000 Binary files a/res/drawable-mdpi/ci_filter.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_gear.png b/res/drawable-mdpi/ci_gear.png deleted file mode 100644 index 0281d3c..0000000 Binary files a/res/drawable-mdpi/ci_gear.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_gear2.png b/res/drawable-mdpi/ci_gear2.png deleted file mode 100644 index 779c71a..0000000 Binary files a/res/drawable-mdpi/ci_gear2.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_grid.png b/res/drawable-mdpi/ci_grid.png deleted file mode 100644 index 8ce3fb7..0000000 Binary files a/res/drawable-mdpi/ci_grid.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_home.png b/res/drawable-mdpi/ci_home.png deleted file mode 100644 index 0e9319d..0000000 Binary files a/res/drawable-mdpi/ci_home.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_kill.png b/res/drawable-mdpi/ci_kill.png deleted file mode 100644 index 2f8499a..0000000 Binary files a/res/drawable-mdpi/ci_kill.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_levelup.png b/res/drawable-mdpi/ci_levelup.png deleted file mode 100644 index 2c10954..0000000 Binary files a/res/drawable-mdpi/ci_levelup.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_lock.png b/res/drawable-mdpi/ci_lock.png deleted file mode 100644 index 8b2dc94..0000000 Binary files a/res/drawable-mdpi/ci_lock.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_lre.png b/res/drawable-mdpi/ci_lre.png deleted file mode 100644 index 68b3413..0000000 Binary files a/res/drawable-mdpi/ci_lre.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_lrea.png b/res/drawable-mdpi/ci_lrea.png deleted file mode 100644 index 7621452..0000000 Binary files a/res/drawable-mdpi/ci_lrea.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_ok.png b/res/drawable-mdpi/ci_ok.png deleted file mode 100644 index e627a12..0000000 Binary files a/res/drawable-mdpi/ci_ok.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_power.png b/res/drawable-mdpi/ci_power.png deleted file mode 100644 index b91e642..0000000 Binary files a/res/drawable-mdpi/ci_power.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_question.png b/res/drawable-mdpi/ci_question.png deleted file mode 100644 index 431622a..0000000 Binary files a/res/drawable-mdpi/ci_question.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_ram.png b/res/drawable-mdpi/ci_ram.png deleted file mode 100644 index d66c99e..0000000 Binary files a/res/drawable-mdpi/ci_ram.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_reboot.png b/res/drawable-mdpi/ci_reboot.png deleted file mode 100644 index 5987b92..0000000 Binary files a/res/drawable-mdpi/ci_reboot.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_run.png b/res/drawable-mdpi/ci_run.png deleted file mode 100644 index e833f3a..0000000 Binary files a/res/drawable-mdpi/ci_run.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_save.png b/res/drawable-mdpi/ci_save.png deleted file mode 100644 index 9bd47f6..0000000 Binary files a/res/drawable-mdpi/ci_save.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_search.png b/res/drawable-mdpi/ci_search.png deleted file mode 100644 index 5977554..0000000 Binary files a/res/drawable-mdpi/ci_search.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_tools.png b/res/drawable-mdpi/ci_tools.png deleted file mode 100644 index 33bbcd9..0000000 Binary files a/res/drawable-mdpi/ci_tools.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_wifi.png b/res/drawable-mdpi/ci_wifi.png deleted file mode 100644 index c7fcd5b..0000000 Binary files a/res/drawable-mdpi/ci_wifi.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_wifiscan.png b/res/drawable-mdpi/ci_wifiscan.png deleted file mode 100644 index f1af8de..0000000 Binary files a/res/drawable-mdpi/ci_wifiscan.png and /dev/null differ diff --git a/res/drawable-mdpi/ci_wifisetup.png b/res/drawable-mdpi/ci_wifisetup.png deleted file mode 100644 index f6b6544..0000000 Binary files a/res/drawable-mdpi/ci_wifisetup.png and /dev/null differ diff --git a/res/drawable-mdpi/dir_ok.png b/res/drawable-mdpi/dir_ok.png deleted file mode 100644 index 4fa554a..0000000 Binary files a/res/drawable-mdpi/dir_ok.png and /dev/null differ diff --git a/res/drawable-mdpi/file_notok.png b/res/drawable-mdpi/file_notok.png deleted file mode 100644 index b68c87b..0000000 Binary files a/res/drawable-mdpi/file_notok.png and /dev/null differ diff --git a/res/drawable-mdpi/file_ok.png b/res/drawable-mdpi/file_ok.png deleted file mode 100644 index ecadea1..0000000 Binary files a/res/drawable-mdpi/file_ok.png and /dev/null differ diff --git a/res/drawable-mdpi/icon.png b/res/drawable-mdpi/icon.png deleted file mode 100644 index 1136e42..0000000 Binary files a/res/drawable-mdpi/icon.png and /dev/null differ diff --git a/res/drawable-mdpi/install.png b/res/drawable-mdpi/install.png deleted file mode 100644 index 307eb18..0000000 Binary files a/res/drawable-mdpi/install.png and /dev/null differ diff --git a/res/drawable-mdpi/ram.png b/res/drawable-mdpi/ram.png deleted file mode 100644 index 8111499..0000000 Binary files a/res/drawable-mdpi/ram.png and /dev/null differ diff --git a/res/drawable-mdpi/wifi_off.png b/res/drawable-mdpi/wifi_off.png deleted file mode 100644 index 192ea96..0000000 Binary files a/res/drawable-mdpi/wifi_off.png and /dev/null differ diff --git a/res/drawable-mdpi/wifi_on.png b/res/drawable-mdpi/wifi_on.png deleted file mode 100644 index 2c96b91..0000000 Binary files a/res/drawable-mdpi/wifi_on.png and /dev/null differ diff --git a/res/layout-hdpi/search.xml b/res/layout-hdpi/search.xml deleted file mode 100644 index 19fbae2..0000000 --- a/res/layout-hdpi/search.xml +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/values/changelog.xml b/res/values/changelog.xml deleted file mode 100644 index 46fb868..0000000 --- a/res/values/changelog.xml +++ /dev/null @@ -1,163 +0,0 @@ - - - - - <b>HELP</b><br> - ReLaunch is a versatile reading programs launcher and system-wide shell for Nook Simple Touch (also supported by Sony PRS-T1).<br> - It is assumed that the user library is organized in an ordered structure - of folders and files have names of books that match their names.<br> - ReLaunch supports flexible configuration of many on-screen buttons for quick - access to certain features of the program and run third party applications.<br> - Non-obvious possibilities:<br> - - Some functions of the program available only with run as a desktop shell for system.<br> - - Some functions require a device with root-access, or only implemented for - Nook Simple Touch (you will receive appropriate notice).<br> - - On-screen scrolling buttons support double click to navigate to the specified - number of percents in list and long-click to quickly move to the end (beginning) of the file list. - This feature often will not work properly, be careful (you need to enable it in settings).<br> - - If you open with the button, for example, the second-to-read book, it will be after the opening of the first. - Thus, you will start in round fashion two (three, etc., depending on the configuration), the last-readed books.<br> - <br> - - - <b>APPRECIATIONS</b><br> - - CoolReader Engine project (Eink support code)<br> - &nbsp;&nbsp;<a href="http://sourceforge.net/projects/crengine/">http://sourceforge.net/projects/crengine/</a><br> - - Interactivemania (icons pack)<br> - &nbsp;&nbsp;<a href="http://www.interactivemania.com/">http://www.interactivemania.com/</a><br> - &nbsp;&nbsp;<a href="http://www.defaulticon.com/">http://www.defaulticon.com/</a><br> - <br> - - - <b>CHANGELOG</b><br> - <b>1.3.8</b><br> - - added file properties dialog<br> - - rewritten book annotation dialog<br> - - returned function "add to Start folders"<br> - <b>1.3.7</b><br> - - added annotation window for fb2/epub files<br> - - Back button may be used for folder navigation<br> - - Start Folder, selected from context menu, replaces the old ones<br> - - single line output mode for filenames<br> - - fixed bug, then longpress event fired after doubletap<br> - <b>1.3.6</b><br> - - updated preferences screen for SONY PRS-T1<br> - - new option \"Add start folder\" in context menu<br> - - new options for double and long taps on "Favorite applications" button<br> - - disabled fullscreen mode in Preferences activity<br> - - fixed bug with symbol # in file names<br> - - tunable number of columns of All and Favorite applications<br> - - added new variable %f to book name template<br> - <b>1.3.5</b><br> - - new appearance of preference screen<br> - - added support for Sony PRS-T1 buttons<br> - - added new file associations<br> - - fixed bug with second line of book title disappearance<br> - - added options for clear Favorites and Last opened lists<br> - <b>1.3.4</b><br> - - showing the book title in two lines<br> - - database cleanup function implemented<br> - - added items separator to files list<br> - - fixed font size for SONY-PRS-T1 in preferences screen<br> - - fixed rename file from tags with a template with line break<br> - - fixed sort order in "Show titles" mode<br> - <b>1.3.3</b><br> - - interface is partially adapted for SONY-PRS-T1<br> - - save/restore settings function implemented<br> - - show book titles in Favorites and Last recent opened lists<br> - - a new mechanism of context menu implementation<br> - - fixed bug with battery status intent reciever<br> - - fixed bug of incorrect book series sorting<br> - - fixed some minor bugs<br> - <b>1.3.2</b><br> - - almost fully implemented file operations (create, rename, copy, move file and folders)<br> - - book title pattern changed<br> - - added context menu item [Rename from fb2/epub tags]<br> - - added saving current position in the directory between calls bookreaders<br> - - fixed sorting in book titles mode<br> - <b>1.3.1</b><br> - - Option "Show hidden files" added to preferences<br> - - Copy/move file functions added to context menu<br> - - Show book titles functionality implemented for .fb2 and .epub files <br> - <b>1.3.0</b><br> - - source code cleaning and formatting<br> - - fixed filtering on directories, now not under filtering<br> - - some fixes in search (strange behavior)<br> - - quick scroll in "results screens" fixes<br> - - preferences "save dialog" only after changing something<br> - - added ability configure icon size<br> - - added on-screen scroll buttons for preferences<br> - - added ability to disable (buggy) percentage scroll on Nook<br> - - added extended functionality to Last Used, Favorites and Settings buttons<br> - - added Setup WiFi button to advanced screen<br> - - Advanced, Memory, Battery buttons now configurable<br> - - Full new icons and some layout changes - in original NOOK look and feel.<br> - - Scroll by on-screen buttons changed to satisfy Sony users.<br> - - Lock functionality in Advanced screen.<br> - - some changes in Home button configuration.<br> - - simplify buttons on Preferences screen.<br> - - force screen orientation change (configurable).<br> - - Some fixes in power adapter show when attached.<br> - - Configurable File Manager (now implemented deletion only, sorry) menu items (user can disable).<br> - - Configurable hiding of known (via associations) file extensions (user can enable).<br> - - Configurable hiding of known (via home dirs) parts of directories names (user can enable).<br> - - Fixes in context menu creation for empty dir and leaking of mount sdcard broadcast receiver.<br> - <b>1.2.10</b><br> - - skipped due quick development<br> - <b>1.2.9</b><br> - - Home icon changed.<br> - - Spanish translation added.<br> - <b>1.2.8</b><br> - - Added USB or AC adapter connection information.<br> - - Redone support for Eink Nook display.<br> - - Configurable multicolumn output.<br> - - Close Fav, Lru and so on windows after start reader (configurable).<br> - - Font size for files and directory names (configurable).<br> - - User may have now many home folders.<br> - - User may disable to go up from home folders.<br> - - Smart configurable Home button with distinct reaction to tap, double tap and long tap introduced.<br> - - Fixes: "scroll buttons" sometimes not working; invocation dir from favorites and search results, now shown in main window; search results representation when search from root.<br> - <b>1.2.7</b><br> - - Preferences Light Theme for Sony reader and mobiles.<br> - - Application and readers invocation code fixes.<br> - - Small layout and visual fixes.<br> - <b>1.2.6</b><br> - - Source code and resources reformatted, caused by i18n.<br> - - Russian translation.<br> - - WiFi signal strength receive fixed, now with dBm level and "classic" visual output.<br> - - Application and readers detection and invocation code rewritten, many bugfixes.<br> - - Fully redesigned to original White NOOK ST "look and feel".<br> - - Startup as launcher at boot fixes.<br> - - History supporting fixes.<br> - <b>1.2.5</b><br> - - Source code cleaned, now compiled without warnings.<br> - - Source code prepared to i18n.<br> - - Reading Lists (i.e. FAVs, LRUs) with full UTF8 support.<br> - - Writing Lists (i.e. FAVs, LRUs) now is more frequent.<br> - - Added \"Power Off\" functionality (in complement to \"Reboot\") and rewriting implementation.<br> - <b>1.2.4</b><br> - - Sony PRS-T1 support is added, some layout changes.<br> - - Optional return to main window after application starts from \"All Applications\" window.<br> - <b>1.2.3</b><br> - - Context menu items \'Open with ...\' and \'Create intent ...\' added. Note that these items can be disabled via configuration settings.<br> - - Search root can be comma separated directories list as well as a single directory. - <br><b>1.2.2</b><br> - - All configured networks now are present in advanced screen. - <br><b>1.2.1</b><br> - - New buttons: scroll up/down by big steps. Note that the step length is configurable.<br> - - New advanced information screen (marked with \'#\' character). - <br><b>1.2.0</b><br> - - New directory navigation, visible scrollbar (see settings).<br> - - gl16 mode (eInk refresh mode) may be set now via settings. - <br><b>1.1.3</b><br> - - Check HW and warn if it isn\'t NookSimpleTouch. - <br><b>1.1.2</b><br> - - Associations settings allows now to configure explicit applications invocation as well as general intent creation.<br> - - Obsolete \'how to call readers\' setting removed. - <br><b>1.1.1</b><br> - - New Cancel/Revert buttons in settings screen. - <br><b>1.1.0</b><br> - - Task manager / battery manager - just tap on memory or battery status (bottom of the main screen, launcher mode only). - - - \ No newline at end of file diff --git a/res/values/shell.xml b/res/values/shell.xml deleted file mode 100644 index 51c65cb..0000000 --- a/res/values/shell.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - /system/bin/sh - - - \ No newline at end of file diff --git a/res/values/styles.xml b/res/values/styles.xml deleted file mode 100644 index 720012d..0000000 --- a/res/values/styles.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..2f3893f --- /dev/null +++ b/settings.gradle @@ -0,0 +1,3 @@ +include ':app' +include ':libs:ebookparser' + diff --git a/src/com/harasoft/relaunch/Advanced.java b/src/com/harasoft/relaunch/Advanced.java deleted file mode 100644 index e13cedb..0000000 --- a/src/com/harasoft/relaunch/Advanced.java +++ /dev/null @@ -1,851 +0,0 @@ -package com.harasoft.relaunch; - -import java.io.BufferedReader; -import java.io.DataInputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.graphics.Typeface; -import android.net.wifi.ScanResult; -import android.net.wifi.WifiConfiguration; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.text.SpannableString; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.WebView; -import android.widget.AbsListView; -import android.widget.BaseAdapter; -import android.widget.Button; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.Toast; - -public class Advanced extends Activity { - final static String TAG = "Advanced"; - - SharedPreferences prefs; - ReLaunchApp app; - Button rebootBtn; - Button powerOffBtn; - String[] ingnoreFs; - List infos; - int myId = -1; - boolean addSView = true; - - WifiManager wfm; - boolean wifiOn = false; - Button wifiOnOff; - Button wifiScan; - List wifiNetworks = new ArrayList(); - WiFiAdapter adapter; - ListView lv_wifi; - IntentFilter i1; - IntentFilter i2; - BroadcastReceiver b1; - BroadcastReceiver b2; - String connectedSSID; - - private void setEinkController() { - if (prefs != null) { - Integer einkUpdateMode = 1; - try { - einkUpdateMode = Integer.parseInt(prefs.getString( - "einkUpdateMode", "1")); - } catch (Exception e) { - einkUpdateMode = 1; - } - if (einkUpdateMode < -1 || einkUpdateMode > 2) - einkUpdateMode = 1; - if (einkUpdateMode >= 0) { - EinkScreen.UpdateMode = einkUpdateMode; - - Integer einkUpdateInterval = 10; - try { - einkUpdateInterval = Integer.parseInt(prefs.getString( - "einkUpdateInterval", "10")); - } catch (Exception e) { - einkUpdateInterval = 10; - } - if (einkUpdateInterval < 0 || einkUpdateInterval > 100) - einkUpdateInterval = 10; - EinkScreen.UpdateModeInterval = einkUpdateInterval; - - EinkScreen.PrepareController(null, false); - } - } - } - - static class NetInfo { - static int unknownLevel = -5000; - String SSID; - String extra; - int level; - int netId; - boolean inrange; - boolean configured; - - NetInfo(String s, int id, boolean in, boolean conf) { - SSID = s; - extra = ""; - level = unknownLevel; - netId = id; - inrange = in; - configured = conf; - } - - NetInfo(String s, boolean in, boolean conf) { - SSID = s; - extra = ""; - level = unknownLevel; - netId = 0; - inrange = in; - configured = conf; - } - - NetInfo(String s, String e, int id, boolean in, boolean conf) { - SSID = s; - extra = e; - level = unknownLevel; - netId = id; - inrange = in; - configured = conf; - } - - NetInfo(String s, String e, boolean in, boolean conf) { - SSID = s; - extra = e; - level = unknownLevel; - netId = 0; - inrange = in; - configured = conf; - } - } - - public class NetInfoComparator implements java.util.Comparator { - public int compare(NetInfo o1, NetInfo o2) { - if (connectedSSID != null && connectedSSID.equals(o1.SSID)) { - return -1; - } - if (connectedSSID != null && connectedSSID.equals(o2.SSID)) { - return 1; - } - if (o1.inrange && !o2.inrange) - return -1; - if (!o1.inrange && o2.inrange) - return 1; - if (o1.level < o2.level) - return 1; - if (o1.level > o2.level) - return -1; - return o1.SSID.compareToIgnoreCase(o2.SSID); - } - } - - static class Info { - String dev; - String mpoint; - String fs; - String total; - String used; - String free; - boolean ro; - - public void dump(String p) { - /* - * Log.d(TAG, p + " dev=\"" + dev + "\" mpoint=\"" + mpoint + - * "\" fs=\"" + fs + "\" used=\"" + used + " total=\"" + total + - * "\" free=\"" + free + "\" ro=" + ro); - */ - } - } - - private void Trace(String t, String s) { - // Log.d(t, s); - } - - static class ViewHolder { - TextView tv1; - TextView tv2; - TextView tv3; - ImageView iv; - } - - class WiFiAdapter extends BaseAdapter { - final Context cntx; - - WiFiAdapter(Context context) { - cntx = context; - } - - public int getCount() { - return wifiNetworks.size(); - } - - public Object getItem(int position) { - return wifiNetworks.get(position); - } - - public long getItemId(int position) { - return 0; - } - - public View getView(final int position, View convertView, - ViewGroup parent) { - ViewHolder holder; - View v = convertView; - if (v == null) { - LayoutInflater vi = (LayoutInflater) getApplicationContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - v = vi.inflate(R.layout.adv_wifi_item, null); - holder = new ViewHolder(); - holder.tv1 = (TextView) v.findViewById(R.id.wf_ssid); - holder.tv2 = (TextView) v.findViewById(R.id.wf_capabilities); - holder.tv3 = (TextView) v.findViewById(R.id.wf_other); - holder.iv = (ImageView) v.findViewById(R.id.wf_icon); - v.setTag(holder); - } else - holder = (ViewHolder) v.getTag(); - TextView tv1 = holder.tv1; - TextView tv2 = holder.tv2; - TextView tv3 = holder.tv3; - ImageView iv = holder.iv; - final WifiInfo winfo = wfm.getConnectionInfo(); - final NetInfo item = wifiNetworks.get(position); - if (item != null) { - if (item.inrange && item.configured) { - tv1.setBackgroundColor(getResources().getColor( - R.color.file_reading_bg)); - tv1.setTextColor(getResources().getColor( - R.color.file_reading_fg)); - tv2.setBackgroundColor(getResources().getColor( - R.color.file_reading_bg)); - tv2.setTextColor(getResources().getColor( - R.color.file_reading_fg)); - tv3.setBackgroundColor(getResources().getColor( - R.color.file_reading_bg)); - tv3.setTextColor(getResources().getColor( - R.color.file_reading_fg)); - iv.setImageDrawable(getResources().getDrawable( - R.drawable.file_ok)); - } else { - tv1.setBackgroundColor(getResources().getColor( - R.color.file_finished_bg)); - tv1.setTextColor(getResources().getColor( - R.color.file_finished_fg)); - tv2.setBackgroundColor(getResources().getColor( - R.color.file_finished_bg)); - tv2.setTextColor(getResources().getColor( - R.color.file_finished_fg)); - tv3.setBackgroundColor(getResources().getColor( - R.color.file_finished_bg)); - tv3.setTextColor(getResources().getColor( - R.color.file_finished_fg)); - iv.setImageDrawable(getResources().getDrawable( - R.drawable.file_notok)); - } - - if (item.SSID.equals(winfo.getSSID())) { - SpannableString s1 = new SpannableString(item.SSID); - s1.setSpan(Typeface.BOLD, 0, item.SSID.length(), 0); - tv1.setText(s1); - if (item.extra.equals("")) - tv2.setText(""); - else { - SpannableString s2 = new SpannableString(item.extra); - s2.setSpan(Typeface.BOLD, 0, item.extra.length(), 0); - tv2.setText(s2); - } - int ipAddress = winfo.getIpAddress(); - // "Connected, IP: %d.%d.%d.%d" - String s = String.format( - getResources().getString( - R.string.jv_advanced_connected) - + " %d.%d.%d.%d", (ipAddress & 0xff), - (ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff), - (ipAddress >> 24 & 0xff)); - int sl1 = s.length(); - // ", Level: " - s += ", " - + getResources().getString( - R.string.jv_advanced_level) + " " - + item.level + "dBm " + levelToString(item.level); - SpannableString s3 = new SpannableString(s); - s3.setSpan(Typeface.BOLD, 0, sl1, 0); - tv3.setText(s3); - } else { - SpannableString s1 = new SpannableString(item.SSID); - s1.setSpan(Typeface.BOLD, 0, item.SSID.length(), 0); - tv1.setText(s1); - tv2.setText(item.extra); - String s; - if (item.inrange) - // "Level: " - s = getResources() - .getString(R.string.jv_advanced_level) - + " " - + item.level - + "dBm " - + levelToString(item.level); - else - // "Not in range" - s = getResources().getString( - R.string.jv_advanced_notrange); - if (!item.configured) - // ", not configured" - s += ", " - + getResources().getString( - R.string.jv_advanced_not_configured); - tv3.setText(s); - } - } - return v; - } - } - - private String levelToString(int level) { - if (level >= -56) - return "[\u25A0\u25A0\u25A0\u25A0\u25A0]"; - if (level >= -63) - return "[\u25A0\u25A0\u25A0\u25A0\u25A1]"; - if (level >= -70) - return "[\u25A0\u25A0\u25A0\u25A1\u25A1]"; - if (level >= -77) - return "[\u25A0\u25A0\u25A1\u25A1\u25A1]"; - if (level >= -84) - return "[\u25A0\u25A1\u25A1\u25A1\u25A1]"; - return "[\u25A1\u25A1\u25A1\u25A1\u25A1]"; - } - - private String sp(int n) { - String rc = ""; - for (int i = 0; i < n; i++) - rc += " "; - return rc; - } - - private int getMyId() { - int rc = -1; - - for (String l : execFg("id")) { - Pattern p = Pattern.compile("uid=(\\d+)\\("); - Matcher m = p.matcher(l); - if (m.find()) { - try { - rc = Integer.parseInt(m.group(1)); - } catch (NumberFormatException e) { - rc = -1; - } - if (rc != -1) - return rc; - } - } - return rc; - } - - // Read file and return result as list of strings - private List readFile(String fname) { - BufferedReader br; - String readLine; - List rc = new ArrayList(); - try { - br = new BufferedReader(new InputStreamReader(new FileInputStream( - fname)), 1000); - } catch (FileNotFoundException e) { - return rc; - } - try { - while ((readLine = br.readLine()) != null) - rc.add(readLine); - } catch (IOException e) { - try { - br.close(); - } catch (IOException e1) { - } - return rc; - } - try { - br.close(); - } catch (IOException e) { - } - - return rc; - } - - // Execute foreground command and return result as list of strings - private List execFg(String cmd) { - List rc = new ArrayList(); - try { - - Process p = Runtime.getRuntime().exec(cmd); - try { - DataInputStream ds = new DataInputStream(p.getInputStream()); - String line; - while (true) { - line = ds.readLine(); - if (line == null) - break; - rc.add(line); - } - } finally { - p.destroy(); - } - } catch (IOException e) { - } - return rc; - } - - private void createInfo() { - // Filesystem - infos = new ArrayList(); - for (String s : readFile("/proc/mounts")) { - String[] f = s.split("\\s+"); - if (f.length < 4) - continue; - String fs = f[2]; - String flags = f[3]; - String[] f1 = flags.split(","); - boolean ignore = false; - for (int i = 0; i < ingnoreFs.length; i++) - if (ingnoreFs[i].equals(fs)) { - ignore = true; - break; - } - if (ignore) - continue; - Info in = new Info(); - in.dev = f[0]; - in.mpoint = f[1]; - in.fs = fs; - for (int i = 0; i < f1.length; i++) - if (f1[i].equals("ro")) { - in.ro = true; - break; - } else if (f1[i].equals("rw")) { - in.ro = false; - break; - } - in.total = "0"; - in.used = "0"; - in.free = "0"; - for (String l : execFg("df " + in.mpoint)) { - String[] e = l.split("\\s+"); - if (e.length < 6) - continue; - in.total = e[1]; - in.used = e[3]; - in.free = e[5]; - } - - infos.add(in); - } - - // UID - myId = getMyId(); - - // Wifi - wfm = (WifiManager) getSystemService(Context.WIFI_SERVICE); - wifiOn = wfm.isWifiEnabled(); - wifiNetworks = readScanResults(wfm); - } - - private List readScanResults(WifiManager w) { - List rc = new ArrayList(); - List rc1 = w.getScanResults(); - List rc2 = w.getConfiguredNetworks(); - - connectedSSID = w.getConnectionInfo().getSSID(); - - if (rc1 == null) { - // No scan results - just copy configured networks to returned value - for (WifiConfiguration wc : rc2) - rc.add(new NetInfo(wc.SSID, wc.networkId, false, true)); - Collections.sort(rc, new NetInfoComparator()); - return rc; - } - - // Merge uniq scanresult items with configured network info - for (ScanResult s : rc1) { - boolean alreadyHere = false; - for (NetInfo s1 : rc) - if (s1.SSID.equals(s.SSID)) { - alreadyHere = true; - s1.level = s.level; - break; - } - if (!alreadyHere) { - boolean in = false; - for (WifiConfiguration wc : rc2) { - String ssid = wc.SSID; - if (ssid.startsWith("\"") && ssid.endsWith("\"")) - ssid = ssid.substring(1, ssid.length() - 1); - if (ssid.equals(s.SSID)) { - rc.add(new NetInfo(ssid, s.capabilities, wc.networkId, - true, true)); - rc.get(rc.size() - 1).level = s.level; - in = true; - break; - } - } - if (!in) - // In range but not configured - rc.add(new NetInfo(s.SSID, s.capabilities, true, false)); - rc.get(rc.size() - 1).level = s.level; - } - } - - // Add confiured but not active networks - for (WifiConfiguration wc : rc2) { - String ssid = wc.SSID; - if (ssid.startsWith("\"") && ssid.endsWith("\"")) - ssid = ssid.substring(1, ssid.length() - 1); - boolean alreadyHere = false; - for (NetInfo s : rc) - if (s.SSID.equals(ssid)) { - alreadyHere = true; - break; - } - if (!alreadyHere) - rc.add(new NetInfo(ssid, false, true)); - } - Collections.sort(rc, new NetInfoComparator()); - return rc; - } - - private void updateWiFiInfo() { - wifiOnOff.setEnabled(true); - if (wifiOn) { - // "Turn WiFi off" - wifiOnOff.setText(getResources().getString( - R.string.jv_advanced_turn_wifi_off)); - wifiOnOff.setCompoundDrawablesWithIntrinsicBounds(getResources() - .getDrawable(R.drawable.wifi_off), getResources() - .getDrawable(R.drawable.ci_wifi), getResources() - .getDrawable(R.drawable.wifi_off), null); - wifiOnOff.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - wfm.setWifiEnabled(false); - // "Turning WiFi off" - wifiOnOff.setText(getResources().getString( - R.string.jv_advanced_turning_wifi_off)); - wifiOnOff.setEnabled(false); - } - }); - wifiNetworks = readScanResults(wfm); - setEinkController(); - adapter.notifyDataSetChanged(); - wifiScan.setEnabled(true); - } else { - // "Turn WiFi on" - wifiOnOff.setText(getResources().getString( - R.string.jv_advanced_turn_wifi_on)); - wifiOnOff.setCompoundDrawablesWithIntrinsicBounds(getResources() - .getDrawable(R.drawable.wifi_on), getResources() - .getDrawable(R.drawable.ci_wifi), getResources() - .getDrawable(R.drawable.wifi_on), null); - wifiOnOff.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - wfm.setWifiEnabled(true); - // "Turning WiFi on" - wifiOnOff.setText(getResources().getString( - R.string.jv_advanced_turning_wifi_on)); - wifiOnOff.setEnabled(false); - } - }); - wifiNetworks.clear(); - setEinkController(); - adapter.notifyDataSetChanged(); - wifiScan.setEnabled(false); - } - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - - setEinkController(); - - ingnoreFs = getResources() - .getStringArray(R.array.filesystems_to_ignore); - - app = ((ReLaunchApp) getApplicationContext()); - app.setFullScreenIfNecessary(this); - setContentView(R.layout.advanced_layout); - - createInfo(); - // "Advanced functions, info, etc." - ((TextView) findViewById(R.id.results_title)).setText(getResources() - .getString(R.string.jv_advanced_title)); - ((ImageButton) findViewById(R.id.results_btn)) - .setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - finish(); - } - }); - - // Wifi info - lv_wifi = (ListView) findViewById(R.id.wifi_lv); - adapter = new WiFiAdapter(this); - lv_wifi.setAdapter(adapter); - - if (prefs.getBoolean("customScroll", app.customScrollDef)) { - int scrollW; - try { - scrollW = Integer - .parseInt(prefs.getString("scrollWidth", "25")); - } catch (NumberFormatException e) { - scrollW = 25; - } - - if (addSView) { - LinearLayout ll = (LinearLayout) findViewById(R.id.wifi_lv_layout); - final SView sv = new SView(getBaseContext()); - LinearLayout.LayoutParams pars = new LinearLayout.LayoutParams( - scrollW, ViewGroup.LayoutParams.FILL_PARENT, 1f); - sv.setLayoutParams(pars); - ll.addView(sv); - lv_wifi.setOnScrollListener(new AbsListView.OnScrollListener() { - public void onScroll(AbsListView view, - int firstVisibleItem, int visibleItemCount, - int totalItemCount) { - sv.total = totalItemCount; - sv.count = visibleItemCount; - sv.first = firstVisibleItem; - setEinkController(); - sv.invalidate(); - } - - public void onScrollStateChanged(AbsListView view, - int scrollState) { - } - }); - addSView = false; - } - } else { - lv_wifi.setOnScrollListener(new AbsListView.OnScrollListener() { - public void onScroll(AbsListView view, int firstVisibleItem, - int visibleItemCount, int totalItemCount) { - setEinkController(); - } - - public void onScrollStateChanged(AbsListView view, - int scrollState) { - } - }); - } - - wifiScan = (Button) findViewById(R.id.wifi_scan_btn); - wifiScan.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - wfm.startScan(); - wifiScan.setEnabled(false); - } - }); - - // Receive broadcast when scan results are available - i1 = new IntentFilter(); - i1.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); - b1 = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Trace(TAG, "--- Broadcast receiver B1"); - wifiNetworks = readScanResults(wfm); - wifiScan.setEnabled(true); - adapter.notifyDataSetChanged(); - } - }; - registerReceiver(b1, i1); - - // Receive broadcast when WiFi status changed - i2 = new IntentFilter(); - i2.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); - i2.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); - i2.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION); - i2.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); - i2.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); - b2 = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Trace(TAG, "--- Broadcast receiver B2"); - wifiOn = wfm.isWifiEnabled(); - wifiNetworks = readScanResults(wfm); - wifiScan.setEnabled(true); - adapter.notifyDataSetChanged(); - updateWiFiInfo(); - } - }; - registerReceiver(b2, i2); - - wifiOnOff = (Button) findViewById(R.id.wifi_onoff_btn); - updateWiFiInfo(); - - Button wifiSetup = (Button) findViewById(R.id.wifi_setup_btn); - wifiSetup.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - if (DeviceInfo.EINK_NOOK) { - final Intent intent = new Intent(Intent.ACTION_MAIN, null); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - // NOOK ST only! - final ComponentName cn = new ComponentName( - "com.android.settings", - "com.android.settings.wifi.Settings_Wifi_Settings"); - intent.setComponent(cn); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - } else { - Toast.makeText( - Advanced.this, - getResources().getString( - R.string.jv_advanced_nook_only), - Toast.LENGTH_LONG).show(); - } - } - }); - - // Lock button - final Activity parent = this; - Button lockBtn = (Button) findViewById(R.id.lock_btn); - lockBtn.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - if (PowerFunctions.actionLock(parent)) { - parent.finish(); - } - } - }); - - // Reboot button - rebootBtn = (Button) findViewById(R.id.reboot_btn); - rebootBtn.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - PowerFunctions.actionReboot(parent); - } - }); - - // Power Off button - powerOffBtn = (Button) findViewById(R.id.poweroff_btn); - powerOffBtn.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - PowerFunctions.actionPowerOff(parent); - } - }); - - // Web info view - WebView wv = (WebView) findViewById(R.id.webview1); - final int ntitle1 = 3; - final int ntitle2 = 8; - // "

Disks/partitions

" - String s = "

" - + getResources().getString( - R.string.jv_advanced_mount_diskspartitions) - + "

"; - s += "" - // + "" - + "" - // + "" - + "" - // + "" - + "" - // + "" - + "" - // + "" - + "" - // + "" - + "" + ""; - for (Info i : infos) - s += "" + "" - + "" - + "" - + "" - + "" - // + "" - + "" + ""; - s += "
" + sp(ntitle1) + "Mount point" + sp(ntitle2) + "" - + sp(ntitle1) - + getResources().getString( - R.string.jv_advanced_mount_mountpoint) - + sp(ntitle2) - + "" + sp(ntitle1) + "FS" + sp(ntitle2) + "" - + sp(ntitle1) - + getResources().getString(R.string.jv_advanced_mount_FS) - + sp(ntitle2) - + "" + sp(ntitle1) + "total" + sp(ntitle2) + - // "" - + sp(ntitle1) - + getResources().getString(R.string.jv_advanced_mount_total) - + sp(ntitle2) - + "" + sp(ntitle1) + "used" + sp(ntitle2) + - // "" - + sp(ntitle1) - + getResources().getString(R.string.jv_advanced_mount_used) - + sp(ntitle2) - + "" + sp(ntitle1) + "free" + sp(ntitle2) + - // "" - + sp(ntitle1) - + getResources().getString(R.string.jv_advanced_mount_free) - + sp(ntitle2) - + "" + sp(ntitle1) + "RO/RW" + sp(ntitle2) + - // "" + sp(ntitle1) - + getResources().getString(R.string.jv_advanced_mount_rorw) - + sp(ntitle2) + "
" - + i.mpoint - + "" - + i.fs - + "" - + i.total - + "" - + i.used - + "" - + i.free - + "" + (i.ro ? "RO" : "RW") + "" - + (i.ro ? getResources().getString( - R.string.jv_advanced_mount_ro) : getResources() - .getString(R.string.jv_advanced_mount_rw)) - + "
"; - wv.loadDataWithBaseURL(null, s, "text/html", "utf-8", null); - - ScreenOrientation.set(this, prefs); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } - - @Override - protected void onStop() { - super.onStop(); - unregisterReceiver(b1); - unregisterReceiver(b2); - } - - @Override - protected void onResume() { - super.onResume(); - setEinkController(); - app.generalOnResume(TAG, this); - } - -}