diff --git a/mobile/AndroidManifest.xml b/mobile/AndroidManifest.xml index 3020f113..b9019f86 100644 --- a/mobile/AndroidManifest.xml +++ b/mobile/AndroidManifest.xml @@ -80,8 +80,8 @@ - - + + @@ -92,23 +92,20 @@ - + android:pathPattern=".*\\.user.js" + android:scheme="file"/> - + android:pathPattern=".*\\.user.js" + android:scheme="content"/> - + android:pathPattern=".*\\.user.js" + android:scheme="http"/> + android:pathPattern=".*\\.user.js" + android:scheme="https"/> @@ -149,6 +146,15 @@ + + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/pager" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ShareActivity"/> diff --git a/mobile/res/layout/dialog_progressbar.xml b/mobile/res/layout/dialog_progressbar.xml index 88191be7..6d7af384 100644 --- a/mobile/res/layout/dialog_progressbar.xml +++ b/mobile/res/layout/dialog_progressbar.xml @@ -1,6 +1,11 @@ + android:id="@+id/progressBarLoading" + style="?android:attr/progressBarStyleLarge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingBottom="@dimen/activity_vertical_margin" + android:paddingLeft="@dimen/activity_horizontal_margin" + android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingTop="@dimen/activity_vertical_margin"/> diff --git a/mobile/res/layout/preference_header_item.xml b/mobile/res/layout/preference_header_item.xml index f18136bf..19ca5127 100644 --- a/mobile/res/layout/preference_header_item.xml +++ b/mobile/res/layout/preference_header_item.xml @@ -1,5 +1,4 @@ - + android:paddingRight="?android:attr/scrollbarSize"> + android:layout_weight="1"> + android:textAppearance="?android:attr/textAppearanceMedium"/> + android:textAppearance="?android:attr/textAppearanceSmall"/> \ No newline at end of file diff --git a/mobile/res/menu/main.xml b/mobile/res/menu/main.xml index 4953812b..ef80fd10 100644 --- a/mobile/res/menu/main.xml +++ b/mobile/res/menu/main.xml @@ -1,3 +1,4 @@ + - @@ -8,7 +9,10 @@ 400dip 200dip + 8dp + + 36dp \ No newline at end of file diff --git a/mobile/res/values/strings.xml b/mobile/res/values/strings.xml index 202d9799..4e208cdd 100644 --- a/mobile/res/values/strings.xml +++ b/mobile/res/values/strings.xml @@ -8,6 +8,7 @@ IITC Plugins Share using… Copy to clipboard + Save to file Settings Show navigation menu Hide navigation menu @@ -185,4 +186,4 @@ Are you sure you want to proceed?]]> - + \ No newline at end of file diff --git a/mobile/res/values/styles.xml b/mobile/res/values/styles.xml index 79064a63..44fd7a3b 100644 --- a/mobile/res/values/styles.xml +++ b/mobile/res/values/styles.xml @@ -1,3 +1,4 @@ + + + + \ No newline at end of file diff --git a/mobile/res/xml/preferences.xml b/mobile/res/xml/preferences.xml index 14219efd..b1d97c5d 100644 --- a/mobile/res/xml/preferences.xml +++ b/mobile/res/xml/preferences.xml @@ -1,5 +1,6 @@ + @@ -36,8 +37,8 @@ android:fragment="com.cradle.iitc_mobile.fragments.PluginsFragment" android:key="pref_plugins" android:persistent="false" - android:title="@string/pref_plugins" - android:summary="@string/pref_plugins_sum"> + android:summary="@string/pref_plugins_sum" + android:title="@string/pref_plugins"> @@ -60,18 +61,19 @@ android:title="@string/pref_press_twice_to_exit"/> + android:key="pref_mics" + android:title="@string/pref_misc_cat"> + android:summary="@string/pref_advanced_options_sum" + android:title="@string/pref_advanced_options"> + @@ -106,4 +108,4 @@ - + \ No newline at end of file diff --git a/mobile/res/xml/searchable.xml b/mobile/res/xml/searchable.xml index 19c27279..384c4780 100644 --- a/mobile/res/xml/searchable.xml +++ b/mobile/res/xml/searchable.xml @@ -1,8 +1,7 @@ - + android:hint="@string/search_hint" + android:label="@string/app_name" + android:voiceLanguageModel="web_search" + android:voiceMaxResults="1" + android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"/> diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java b/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java index f2933755..0c244cef 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_FileManager.java @@ -63,8 +63,7 @@ public class IITC_FileManager { * @throws IOException */ public static void copyStream(final InputStream inStream, final OutputStream outStream, final boolean closeOutput) - throws IOException - { + throws IOException { // in case Android includes Apache commons IO in the future, this function should be replaced by IOUtils.copy final int bufferSize = 4096; final byte[] buffer = new byte[bufferSize]; @@ -94,20 +93,20 @@ public class IITC_FileManager { map.put("name", "unknown"); map.put("description", ""); map.put("category", "Misc"); - BufferedReader reader = new BufferedReader(new StringReader(header)); + final BufferedReader reader = new BufferedReader(new StringReader(header)); String headerLine; try { while ((headerLine = reader.readLine()) != null) { if (headerLine.matches("//.*@.*")) { // get start of key name (first @ in line) - String[] keyStart = headerLine.split("@", 2); + final String[] keyStart = headerLine.split("@", 2); // split key value - String[] keyValue = keyStart[1].split(" ", 2); + final String[] keyValue = keyStart[1].split(" ", 2); // remove whitespaces from string begin and end and push to map map.put(keyValue[0].trim(), keyValue[1].trim()); } } - } catch (IOException e) { + } catch (final IOException e) { Log.w(e); } return map; @@ -279,7 +278,7 @@ public class IITC_FileManager { InputStream is; String fileName; if (uri.getScheme().contains("http")) { - URLConnection conn = new URL(url).openConnection(); + final URLConnection conn = new URL(url).openConnection(); is = conn.getInputStream(); fileName = uri.getLastPathSegment(); } else { diff --git a/mobile/src/com/cradle/iitc_mobile/share/IntentGenerator.java b/mobile/src/com/cradle/iitc_mobile/share/IntentGenerator.java index 0c07a23e..fc4959a8 100644 --- a/mobile/src/com/cradle/iitc_mobile/share/IntentGenerator.java +++ b/mobile/src/com/cradle/iitc_mobile/share/IntentGenerator.java @@ -7,6 +7,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; +import android.os.Build; import com.cradle.iitc_mobile.Log; import com.cradle.iitc_mobile.R; @@ -136,6 +137,14 @@ public class IntentGenerator { return targets; } + /** + * get a list of intents capable of sharing a plain text string + * + * @param title + * description of the shared string + * @param text + * the string to be shared + */ public ArrayList getShareIntents(final String title, final String text) { final Intent intent = new Intent(Intent.ACTION_SEND) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) @@ -155,11 +164,29 @@ public class IntentGenerator { return targets; } - public ArrayList getShareIntents(final String title, final Uri uri, final String type) { - return resolveTargets(new Intent(Intent.ACTION_SEND) + /** + * get a list of intents capable of sharing the given content + * + * @param uri + * URI of a file to share + * @param type + * MIME type of the file + */ + public ArrayList getShareIntents(final Uri uri, final String type) { + final Intent intent = new Intent(Intent.ACTION_SEND) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) .setType(type) - .putExtra(Intent.EXTRA_SUBJECT, title) - .putExtra(Intent.EXTRA_STREAM, uri)); + .putExtra(Intent.EXTRA_SUBJECT, uri.getLastPathSegment()) + .putExtra(Intent.EXTRA_STREAM, uri); + + final ArrayList targets = resolveTargets(intent); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + targets.add(new Intent(intent) + .setComponent(new ComponentName(mContext, SaveToFile.class)) + .putExtra(EXTRA_FLAG_TITLE, mContext.getString(R.string.activity_save_to_file))); + } + + return targets; } } diff --git a/mobile/src/com/cradle/iitc_mobile/share/ShareActivity.java b/mobile/src/com/cradle/iitc_mobile/share/ShareActivity.java index a869dd1d..0e923b53 100644 --- a/mobile/src/com/cradle/iitc_mobile/share/ShareActivity.java +++ b/mobile/src/com/cradle/iitc_mobile/share/ShareActivity.java @@ -55,7 +55,6 @@ public class ShareActivity extends FragmentActivity implements ActionBar.TabList private FragmentAdapter mFragmentAdapter; private IntentGenerator mGenerator; private SharedPreferences mSharedPrefs = null; - private String mTitle; private ViewPager mViewPager; private void addTab(final ArrayList intents, final int label, final int icon) { @@ -115,34 +114,33 @@ public class ShareActivity extends FragmentActivity implements ActionBar.TabList final String type = intent.getStringExtra(EXTRA_TYPE); // from portallinks/permalinks we build 3 intents (share / geo / vanilla-intel-link) if (TYPE_PERMALINK.equals(type) || TYPE_PORTAL_LINK.equals(type)) { - mTitle = intent.getStringExtra("title"); + final String title = intent.getStringExtra("title"); final String ll = intent.getDoubleExtra("lat", 0) + "," + intent.getDoubleExtra("lng", 0); final int zoom = intent.getIntExtra("zoom", 0); final String url = getIntelUrl(ll, zoom, TYPE_PORTAL_LINK.equals(type)); - actionBar.setTitle(mTitle); + actionBar.setTitle(title); - addTab(mGenerator.getShareIntents(mTitle, url), + addTab(mGenerator.getShareIntents(title, url), R.string.tab_share, R.drawable.ic_action_share); - addTab(mGenerator.getGeoIntents(mTitle, ll, zoom), + addTab(mGenerator.getGeoIntents(title, ll, zoom), R.string.tab_map, R.drawable.ic_action_place); - addTab(mGenerator.getBrowserIntents(mTitle, url), + addTab(mGenerator.getBrowserIntents(title, url), R.string.tab_browser, R.drawable.ic_action_web_site); } else if (TYPE_STRING.equals(type)) { - mTitle = getString(R.string.app_name); + final String title = getString(R.string.app_name); final String shareString = intent.getStringExtra("shareString"); - addTab(mGenerator.getShareIntents(mTitle, shareString), R.string.tab_share, R.drawable.ic_action_share); + addTab(mGenerator.getShareIntents(title, shareString), R.string.tab_share, R.drawable.ic_action_share); } else if (TYPE_FILE.equals(type)) { - mTitle = "Screenshot"; final Uri uri = intent.getParcelableExtra("uri"); final String mime = intent.getStringExtra("type"); - addTab(mGenerator.getShareIntents(mTitle, uri, mime), R.string.tab_share, R.drawable.ic_action_share); + addTab(mGenerator.getShareIntents(uri, mime), R.string.tab_share, R.drawable.ic_action_share); } else { Log.w("Unknown sharing type: " + type); setResult(RESULT_CANCELED);