Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a59d6b146 | ||
|
|
5238026ce3 | ||
|
|
629067d618 | ||
|
|
3353234786 | ||
|
|
d886789a86 | ||
|
|
fa9e616c3f | ||
|
|
15499c9b31 | ||
|
|
1121f858c8 | ||
|
|
e5700bc992 |
@ -8,14 +8,14 @@ LOCAL_PACKAGE_NAME := F-Droid
|
||||
|
||||
fdroid_root := $(LOCAL_PATH)
|
||||
fdroid_dir := F-Droid
|
||||
fdroid_out := $(OUT_DIR)/target/common/obj/APPS/$(LOCAL_MODULE)_intermediates
|
||||
fdroid_out := $(PWD)/$(OUT_DIR)/target/common/obj/APPS/$(LOCAL_MODULE)_intermediates
|
||||
fdroid_build := $(fdroid_root)/$(fdroid_dir)/build
|
||||
fdroid_apk := build/outputs/apk/F-Droid-release-unsigned.apk
|
||||
|
||||
$(fdroid_root)/$(fdroid_dir)/$(fdroid_apk):
|
||||
rm -Rf $(fdroid_build)
|
||||
mkdir -p $(fdroid_out)
|
||||
ln -s $(fdroid_out) $(fdroid_build)
|
||||
ln -sf $(fdroid_out) $(fdroid_build)
|
||||
cd $(fdroid_root)/$(fdroid_dir) && gradle assembleRelease
|
||||
|
||||
LOCAL_CERTIFICATE := platform
|
||||
|
||||
14
CHANGELOG.md
14
CHANGELOG.md
@ -1,4 +1,16 @@
|
||||
### 0.98 (upcoming release)
|
||||
### 0.98.1 (2016-02-14)
|
||||
|
||||
* Fix crash when entering only a space into the search dialog
|
||||
|
||||
* Fix crash when entering slashes into the search dialog
|
||||
|
||||
* Fix potential fragment crash when installing/removing a package
|
||||
|
||||
* Fix crash when adding malformed URIs as repos
|
||||
|
||||
* Fix Android.mk build when the output dir is a relative path
|
||||
|
||||
### 0.98 (2016-02-01)
|
||||
|
||||
* Add opt-in crash reporting via ACRA
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.fdroid.fdroid"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="98007"
|
||||
android:versionName="0.98-alpha7"
|
||||
android:versionCode="98150"
|
||||
android:versionName="0.98.1"
|
||||
>
|
||||
|
||||
<uses-sdk
|
||||
|
||||
@ -609,8 +609,10 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A
|
||||
private void refreshHeader() {
|
||||
mHeaderFragment = (AppDetailsHeaderFragment)
|
||||
getSupportFragmentManager().findFragmentById(R.id.header);
|
||||
if (mHeaderFragment != null) {
|
||||
mHeaderFragment.updateViews();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
|
||||
@ -304,9 +304,9 @@ public final class Utils {
|
||||
b.scheme(localRepoUri.getScheme().replaceFirst("http", "fdroidrepo"));
|
||||
b.appendQueryParameter("swap", "1");
|
||||
if (!TextUtils.isEmpty(FDroidApp.bssid)) {
|
||||
b.appendQueryParameter("bssid", Uri.encode(FDroidApp.bssid));
|
||||
b.appendQueryParameter("bssid", FDroidApp.bssid);
|
||||
if (!TextUtils.isEmpty(FDroidApp.ssid))
|
||||
b.appendQueryParameter("ssid", Uri.encode(FDroidApp.ssid));
|
||||
b.appendQueryParameter("ssid", FDroidApp.ssid);
|
||||
}
|
||||
return b.build();
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import android.content.UriMatcher;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import org.fdroid.fdroid.Preferences;
|
||||
@ -542,17 +543,22 @@ public class AppProvider extends FDroidProvider {
|
||||
}
|
||||
|
||||
public static Uri getSearchUri(String query) {
|
||||
if (TextUtils.isEmpty(query)) {
|
||||
// Return all the things for an empty search.
|
||||
return getContentUri();
|
||||
} else {
|
||||
return getContentUri().buildUpon()
|
||||
.appendPath(PATH_SEARCH)
|
||||
.appendEncodedPath(query)
|
||||
.appendPath(query)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
public static Uri getSearchInstalledUri(String query) {
|
||||
return getContentUri()
|
||||
.buildUpon()
|
||||
.appendPath(PATH_SEARCH_INSTALLED)
|
||||
.appendEncodedPath(query)
|
||||
.appendPath(query)
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -560,7 +566,7 @@ public class AppProvider extends FDroidProvider {
|
||||
return getContentUri()
|
||||
.buildUpon()
|
||||
.appendPath(PATH_SEARCH_CAN_UPDATE)
|
||||
.appendEncodedPath(query)
|
||||
.appendPath(query)
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -568,7 +574,7 @@ public class AppProvider extends FDroidProvider {
|
||||
return getContentUri().buildUpon()
|
||||
.appendPath(PATH_SEARCH_REPO)
|
||||
.appendPath(repo.id + "")
|
||||
.appendEncodedPath(query)
|
||||
.appendPath(query)
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -614,15 +620,14 @@ public class AppProvider extends FDroidProvider {
|
||||
}
|
||||
|
||||
private AppQuerySelection querySearch(String query) {
|
||||
final String[] columns = {
|
||||
getTableName() + ".id",
|
||||
getTableName() + ".name",
|
||||
getTableName() + ".summary",
|
||||
getTableName() + ".description",
|
||||
};
|
||||
|
||||
// Remove duplicates, surround in % for wildcard searching
|
||||
// Put in a Set to remove duplicates
|
||||
final Set<String> keywordSet = new HashSet<>(Arrays.asList(query.split("\\s")));
|
||||
|
||||
if (keywordSet.size() == 0) {
|
||||
return new AppQuerySelection();
|
||||
}
|
||||
|
||||
// Surround each keyword in % for wildcard searching
|
||||
final String[] keywords = new String[keywordSet.size()];
|
||||
int iKeyword = 0;
|
||||
for (final String keyword : keywordSet) {
|
||||
@ -630,6 +635,13 @@ public class AppProvider extends FDroidProvider {
|
||||
iKeyword++;
|
||||
}
|
||||
|
||||
final String[] columns = {
|
||||
getTableName() + ".id",
|
||||
getTableName() + ".name",
|
||||
getTableName() + ".summary",
|
||||
getTableName() + ".description",
|
||||
};
|
||||
|
||||
// Build selection string and fill out keyword arguments
|
||||
final StringBuilder selection = new StringBuilder();
|
||||
final String[] selectionKeywords = new String[columns.length * keywords.length];
|
||||
|
||||
@ -58,7 +58,22 @@ public class AppListFragmentPagerAdapter extends FragmentPagerAdapter {
|
||||
return parent.getString(R.string.tab_updates_count, updateCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Changing the search query is quite an expensive operation, so this does some rudimentary
|
||||
* checking to see if the two queries are meaningfully different. At present, it trims the
|
||||
* strings and does a case insensitive comparison.
|
||||
*/
|
||||
private boolean isSearchQuerySame(String newQuery) {
|
||||
String oldValueTrimmed = searchQuery == null ? "" : searchQuery.trim();
|
||||
String newValueTrimmed = newQuery == null ? "" : newQuery.trim();
|
||||
return oldValueTrimmed.equalsIgnoreCase(newValueTrimmed);
|
||||
}
|
||||
|
||||
public void updateSearchQuery(@Nullable String query) {
|
||||
if (isSearchQuerySame(query)) {
|
||||
return;
|
||||
}
|
||||
|
||||
searchQuery = query;
|
||||
for (AppListFragment fragment : registeredFragments) {
|
||||
if (fragment != null) {
|
||||
|
||||
@ -583,10 +583,13 @@ public class ManageReposActivity extends ActionBarActivity {
|
||||
}
|
||||
|
||||
uri = uri.normalize();
|
||||
String path = uri.getPath().replaceAll("//*/", "/"); // Collapse multiple forward slashes into 1.
|
||||
String path = uri.getPath();
|
||||
if (path != null) {
|
||||
path = path.replaceAll("//*/", "/"); // Collapse multiple forward slashes into 1.
|
||||
if (path.length() > 0 && path.charAt(path.length() - 1) == '/') {
|
||||
path = path.substring(0, path.length() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(),
|
||||
path, uri.getQuery(), uri.getFragment()).toString();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user