Use string switches from Java 1.7

Advantages:
 * Greatly simplifies code
 * No variable name duplication
 * Potentially more efficient bytecode
This commit is contained in:
Daniel Martí 2015-04-01 13:09:02 +02:00
parent 3eddb1402c
commit b0e4f59f43
16 changed files with 607 additions and 447 deletions

View File

@ -1089,20 +1089,24 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
}
boolean finished = false;
if (event.type.equals(Downloader.EVENT_PROGRESS)) {
updateProgressDialog(event.progress, event.total);
} else if (event.type.equals(ApkDownloader.EVENT_ERROR)) {
final String text;
if (event.getData().getInt(ApkDownloader.EVENT_DATA_ERROR_TYPE) == ApkDownloader.ERROR_HASH_MISMATCH)
text = getString(R.string.corrupt_download);
else
text = getString(R.string.details_notinstalled);
// this must be on the main UI thread
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
finished = true;
} else if (event.type.equals(ApkDownloader.EVENT_APK_DOWNLOAD_COMPLETE)) {
downloadCompleteInstallApk();
finished = true;
switch (event.type) {
case Downloader.EVENT_PROGRESS:
updateProgressDialog(event.progress, event.total);
break;
case ApkDownloader.EVENT_ERROR:
final String text;
if (event.getData().getInt(ApkDownloader.EVENT_DATA_ERROR_TYPE) == ApkDownloader.ERROR_HASH_MISMATCH)
text = getString(R.string.corrupt_download);
else
text = getString(R.string.details_notinstalled);
// this must be on the main UI thread
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
finished = true;
break;
case ApkDownloader.EVENT_APK_DOWNLOAD_COMPLETE:
downloadCompleteInstallApk();
finished = true;
break;
}
if (finished) {
@ -1276,18 +1280,20 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
}
private String descAntiFeature(String af) {
if (af.equals("Ads"))
return getString(R.string.antiadslist);
if (af.equals("Tracking"))
return getString(R.string.antitracklist);
if (af.equals("NonFreeNet"))
return getString(R.string.antinonfreenetlist);
if (af.equals("NonFreeAdd"))
return getString(R.string.antinonfreeadlist);
if (af.equals("NonFreeDep"))
return getString(R.string.antinonfreedeplist);
if (af.equals("UpstreamNonFree"))
return getString(R.string.antiupstreamnonfreelist);
switch (af) {
case "Ads":
return getString(R.string.antiadslist);
case "Tracking":
return getString(R.string.antitracklist);
case "NonFreeNet":
return getString(R.string.antinonfreenetlist);
case "NonFreeAdd":
return getString(R.string.antinonfreeadlist);
case "NonFreeDep":
return getString(R.string.antinonfreedeplist);
case "UpstreamNonFree":
return getString(R.string.antiupstreamnonfreelist);
}
return null;
}

View File

@ -226,30 +226,37 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
Log.d(TAG, "Invalidating preference '" + key + "'.");
uninitialize(key);
if (key.equals(PREF_COMPACT_LAYOUT)) {
for (ChangeListener listener : compactLayoutListeners) {
listener.onPreferenceChange();
}
} else if (key.equals(PREF_ROOTED)) {
for (ChangeListener listener : filterAppsRequiringRootListeners) {
listener.onPreferenceChange();
}
} else if (key.equals(PREF_UPD_HISTORY)) {
for (ChangeListener listener : updateHistoryListeners) {
listener.onPreferenceChange();
}
} else if (key.equals(PREF_LOCAL_REPO_BONJOUR)) {
for (ChangeListener listener : localRepoBonjourListeners) {
listener.onPreferenceChange();
}
} else if (key.equals(PREF_LOCAL_REPO_NAME)) {
for (ChangeListener listener : localRepoNameListeners) {
listener.onPreferenceChange();
}
} else if (key.equals(PREF_LOCAL_REPO_HTTPS)) {
for (ChangeListener listener : localRepoHttpsListeners) {
listener.onPreferenceChange();
}
switch (key) {
case PREF_COMPACT_LAYOUT:
for (ChangeListener listener : compactLayoutListeners) {
listener.onPreferenceChange();
}
break;
case PREF_ROOTED:
for (ChangeListener listener : filterAppsRequiringRootListeners) {
listener.onPreferenceChange();
}
break;
case PREF_UPD_HISTORY:
for (ChangeListener listener : updateHistoryListeners) {
listener.onPreferenceChange();
}
break;
case PREF_LOCAL_REPO_BONJOUR:
for (ChangeListener listener : localRepoBonjourListeners) {
listener.onPreferenceChange();
}
break;
case PREF_LOCAL_REPO_NAME:
for (ChangeListener listener : localRepoNameListeners) {
listener.onPreferenceChange();
}
break;
case PREF_LOCAL_REPO_HTTPS:
for (ChangeListener listener : localRepoHttpsListeners) {
listener.onPreferenceChange();
}
break;
}
}

View File

@ -124,123 +124,159 @@ public class RepoXMLHandler extends DefaultHandler {
apksList.add(curapk);
curapk = null;
} else if (curapk != null && str != null) {
if (curel.equals("version")) {
curapk.version = str;
} else if (curel.equals("versioncode")) {
try {
curapk.vercode = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.vercode = -1;
}
} else if (curel.equals("size")) {
try {
curapk.size = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.size = 0;
}
} else if (curel.equals("hash")) {
if (hashType == null || hashType.equals("md5")) {
if (curapk.hash == null) {
curapk.hash = str;
curapk.hashType = "MD5";
switch (curel) {
case "version":
curapk.version = str;
break;
case "versioncode":
try {
curapk.vercode = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.vercode = -1;
}
} else if (hashType.equals("sha256")) {
curapk.hash = str;
curapk.hashType = "SHA-256";
}
} else if (curel.equals("sig")) {
curapk.sig = str;
} else if (curel.equals("srcname")) {
curapk.srcname = str;
} else if (curel.equals("apkname")) {
curapk.apkName = str;
} else if (curel.equals("sdkver")) {
try {
curapk.minSdkVersion = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.minSdkVersion = 0;
}
} else if (curel.equals("maxsdkver")) {
try {
curapk.maxSdkVersion = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.maxSdkVersion = 0;
}
} else if (curel.equals("added")) {
try {
curapk.added = str.length() == 0 ? null : Utils.DATE_FORMAT
.parse(str);
} catch (ParseException e) {
curapk.added = null;
}
} else if (curel.equals("permissions")) {
curapk.permissions = Utils.CommaSeparatedList.make(str);
} else if (curel.equals("features")) {
curapk.features = Utils.CommaSeparatedList.make(str);
} else if (curel.equals("nativecode")) {
curapk.nativecode = Utils.CommaSeparatedList.make(str);
break;
case "size":
try {
curapk.size = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.size = 0;
}
break;
case "hash":
if (hashType == null || hashType.equals("md5")) {
if (curapk.hash == null) {
curapk.hash = str;
curapk.hashType = "MD5";
}
} else if (hashType.equals("sha256")) {
curapk.hash = str;
curapk.hashType = "SHA-256";
}
break;
case "sig":
curapk.sig = str;
break;
case "srcname":
curapk.srcname = str;
break;
case "apkname":
curapk.apkName = str;
break;
case "sdkver":
try {
curapk.minSdkVersion = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.minSdkVersion = 0;
}
break;
case "maxsdkver":
try {
curapk.maxSdkVersion = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapk.maxSdkVersion = 0;
}
break;
case "added":
try {
curapk.added = str.length() == 0 ? null : Utils.DATE_FORMAT
.parse(str);
} catch (ParseException e) {
curapk.added = null;
}
break;
case "permissions":
curapk.permissions = Utils.CommaSeparatedList.make(str);
break;
case "features":
curapk.features = Utils.CommaSeparatedList.make(str);
break;
case "nativecode":
curapk.nativecode = Utils.CommaSeparatedList.make(str);
break;
}
} else if (curapp != null && str != null) {
if (curel.equals("name")) {
curapp.name = str;
} else if (curel.equals("icon")) {
curapp.icon = str;
} else if (curel.equals("description")) {
// This is the old-style description. We'll read it
// if present, to support old repos, but in newer
// repos it will get overwritten straight away!
curapp.description = "<p>" + str + "</p>";
} else if (curel.equals("desc")) {
// New-style description.
curapp.description = str;
} else if (curel.equals("summary")) {
curapp.summary = str;
} else if (curel.equals("license")) {
curapp.license = str;
} else if (curel.equals("source")) {
curapp.sourceURL = str;
} else if (curel.equals("donate")) {
curapp.donateURL = str;
} else if (curel.equals("bitcoin")) {
curapp.bitcoinAddr = str;
} else if (curel.equals("litecoin")) {
curapp.litecoinAddr = str;
} else if (curel.equals("dogecoin")) {
curapp.dogecoinAddr = str;
} else if (curel.equals("flattr")) {
curapp.flattrID = str;
} else if (curel.equals("web")) {
curapp.webURL = str;
} else if (curel.equals("tracker")) {
curapp.trackerURL = str;
} else if (curel.equals("added")) {
try {
curapp.added = str.length() == 0 ? null : Utils.DATE_FORMAT
.parse(str);
} catch (ParseException e) {
curapp.added = null;
}
} else if (curel.equals("lastupdated")) {
try {
curapp.lastUpdated = str.length() == 0 ? null
: Utils.DATE_FORMAT.parse(str);
} catch (ParseException e) {
curapp.lastUpdated = null;
}
} else if (curel.equals("marketversion")) {
curapp.upstreamVersion = str;
} else if (curel.equals("marketvercode")) {
try {
curapp.upstreamVercode = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapp.upstreamVercode = -1;
}
} else if (curel.equals("categories")) {
curapp.categories = Utils.CommaSeparatedList.make(str);
} else if (curel.equals("antifeatures")) {
curapp.antiFeatures = Utils.CommaSeparatedList.make(str);
} else if (curel.equals("requirements")) {
curapp.requirements = Utils.CommaSeparatedList.make(str);
switch (curel) {
case "name":
curapp.name = str;
break;
case "icon":
curapp.icon = str;
break;
case "description":
// This is the old-style description. We'll read it
// if present, to support old repos, but in newer
// repos it will get overwritten straight away!
curapp.description = "<p>" + str + "</p>";
break;
case "desc":
// New-style description.
curapp.description = str;
break;
case "summary":
curapp.summary = str;
break;
case "license":
curapp.license = str;
break;
case "source":
curapp.sourceURL = str;
break;
case "donate":
curapp.donateURL = str;
break;
case "bitcoin":
curapp.bitcoinAddr = str;
break;
case "litecoin":
curapp.litecoinAddr = str;
break;
case "dogecoin":
curapp.dogecoinAddr = str;
break;
case "flattr":
curapp.flattrID = str;
break;
case "web":
curapp.webURL = str;
break;
case "tracker":
curapp.trackerURL = str;
break;
case "added":
try {
curapp.added = str.length() == 0 ? null : Utils.DATE_FORMAT
.parse(str);
} catch (ParseException e) {
curapp.added = null;
}
break;
case "lastupdated":
try {
curapp.lastUpdated = str.length() == 0 ? null
: Utils.DATE_FORMAT.parse(str);
} catch (ParseException e) {
curapp.lastUpdated = null;
}
break;
case "marketversion":
curapp.upstreamVersion = str;
break;
case "marketvercode":
try {
curapp.upstreamVercode = Integer.parseInt(str);
} catch (NumberFormatException ex) {
curapp.upstreamVercode = -1;
}
break;
case "categories":
curapp.categories = Utils.CommaSeparatedList.make(str);
break;
case "antifeatures":
curapp.antiFeatures = Utils.CommaSeparatedList.make(str);
break;
case "requirements":
curapp.requirements = Utils.CommaSeparatedList.make(str);
break;
}
} else if (curel.equals("description")) {
description = cleanWhiteSpace(str);

View File

@ -805,13 +805,16 @@ public class UpdateService extends IntentService implements ProgressListener {
// TODO: Switch to passing through Bundles of data with the event, rather than a repo address. They are
// now much more general purpose then just repo downloading.
String repoAddress = event.getData().getString(RepoUpdater.PROGRESS_DATA_REPO_ADDRESS);
if (event.type.equals(Downloader.EVENT_PROGRESS)) {
String downloadedSize = Utils.getFriendlySize(event.progress);
String totalSize = Utils.getFriendlySize(event.total);
int percent = (int)((double)event.progress/event.total * 100);
message = getString(R.string.status_download, repoAddress, downloadedSize, totalSize, percent);
} else if (event.type.equals(RepoUpdater.PROGRESS_TYPE_PROCESS_XML)) {
message = getString(R.string.status_processing_xml, repoAddress, event.progress, event.total);
switch (event.type) {
case Downloader.EVENT_PROGRESS:
String downloadedSize = Utils.getFriendlySize(event.progress);
String totalSize = Utils.getFriendlySize(event.total);
int percent = (int)((double)event.progress/event.total * 100);
message = getString(R.string.status_download, repoAddress, downloadedSize, totalSize, percent);
break;
case RepoUpdater.PROGRESS_TYPE_PROCESS_XML:
message = getString(R.string.status_processing_xml, repoAddress, event.progress, event.total);
break;
}
sendStatus(STATUS_INFO, message);
}

View File

@ -477,27 +477,31 @@ public final class Utils {
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader reader) {
if (tag.equals("ul")) {
if (opening)
listNum = -1;
else
output.append('\n');
} else if (tag.equals("ol")) {
if (opening)
listNum = 1;
else
output.append('\n');
} else if (tag.equals("li")) {
if (opening) {
if (listNum == -1) {
output.append("\t• ");
switch (tag) {
case "ul":
if (opening)
listNum = -1;
else
output.append('\n');
break;
case "ol":
if (opening)
listNum = 1;
else
output.append('\n');
break;
case "li":
if (opening) {
if (listNum == -1) {
output.append("\t• ");
} else {
output.append("\t").append(Integer.toString(listNum)).append(". ");
listNum++;
}
} else {
output.append("\t").append(Integer.toString(listNum)).append(". ");
listNum++;
output.append('\n');
}
} else {
output.append('\n');
}
break;
}
}
}

View File

@ -63,46 +63,67 @@ public class Apk extends ValueObject implements Comparable<Apk> {
for (int i = 0; i < cursor.getColumnCount(); i++) {
String column = cursor.getColumnName(i);
if (column.equals(ApkProvider.DataColumns.HASH)) {
hash = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.HASH_TYPE)) {
hashType = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.ADDED_DATE)) {
added = ValueObject.toDate(cursor.getString(i));
} else if (column.equals(ApkProvider.DataColumns.FEATURES)) {
features = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(ApkProvider.DataColumns.APK_ID)) {
id = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.IS_COMPATIBLE)) {
compatible = cursor.getInt(i) == 1;
} else if (column.equals(ApkProvider.DataColumns.MIN_SDK_VERSION)) {
minSdkVersion = cursor.getInt(i);
} else if (column.equals(ApkProvider.DataColumns.MAX_SDK_VERSION)) {
maxSdkVersion = cursor.getInt(i);
} else if (column.equals(ApkProvider.DataColumns.NAME)) {
apkName = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.PERMISSIONS)) {
permissions = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(ApkProvider.DataColumns.NATIVE_CODE)) {
nativecode = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(ApkProvider.DataColumns.INCOMPATIBLE_REASONS)) {
incompatible_reasons = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(ApkProvider.DataColumns.REPO_ID)) {
repo = cursor.getInt(i);
} else if (column.equals(ApkProvider.DataColumns.SIGNATURE)) {
sig = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.SIZE)) {
size = cursor.getInt(i);
} else if (column.equals(ApkProvider.DataColumns.SOURCE_NAME)) {
srcname = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.VERSION)) {
version = cursor.getString(i);
} else if (column.equals(ApkProvider.DataColumns.VERSION_CODE)) {
vercode = cursor.getInt(i);
} else if (column.equals(ApkProvider.DataColumns.REPO_VERSION)) {
repoVersion = cursor.getInt(i);
} else if (column.equals(ApkProvider.DataColumns.REPO_ADDRESS)) {
repoAddress = cursor.getString(i);
switch (cursor.getColumnName(i)) {
case ApkProvider.DataColumns.HASH:
hash = cursor.getString(i);
break;
case ApkProvider.DataColumns.HASH_TYPE:
hashType = cursor.getString(i);
break;
case ApkProvider.DataColumns.ADDED_DATE:
added = ValueObject.toDate(cursor.getString(i));
break;
case ApkProvider.DataColumns.FEATURES:
features = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case ApkProvider.DataColumns.APK_ID:
id = cursor.getString(i);
break;
case ApkProvider.DataColumns.IS_COMPATIBLE:
compatible = cursor.getInt(i) == 1;
break;
case ApkProvider.DataColumns.MIN_SDK_VERSION:
minSdkVersion = cursor.getInt(i);
break;
case ApkProvider.DataColumns.MAX_SDK_VERSION:
maxSdkVersion = cursor.getInt(i);
break;
case ApkProvider.DataColumns.NAME:
apkName = cursor.getString(i);
break;
case ApkProvider.DataColumns.PERMISSIONS:
permissions = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case ApkProvider.DataColumns.NATIVE_CODE:
nativecode = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case ApkProvider.DataColumns.INCOMPATIBLE_REASONS:
incompatible_reasons = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case ApkProvider.DataColumns.REPO_ID:
repo = cursor.getInt(i);
break;
case ApkProvider.DataColumns.SIGNATURE:
sig = cursor.getString(i);
break;
case ApkProvider.DataColumns.SIZE:
size = cursor.getInt(i);
break;
case ApkProvider.DataColumns.SOURCE_NAME:
srcname = cursor.getString(i);
break;
case ApkProvider.DataColumns.VERSION:
version = cursor.getString(i);
break;
case ApkProvider.DataColumns.VERSION_CODE:
vercode = cursor.getInt(i);
break;
case ApkProvider.DataColumns.REPO_VERSION:
repoVersion = cursor.getInt(i);
break;
case ApkProvider.DataColumns.REPO_ADDRESS:
repoAddress = cursor.getString(i);
break;
}
}
}

View File

@ -112,65 +112,94 @@ public class App extends ValueObject implements Comparable<App> {
checkCursorPosition(cursor);
for (int i = 0; i < cursor.getColumnCount(); i++) {
String column = cursor.getColumnName(i);
if (column.equals(AppProvider.DataColumns.IS_COMPATIBLE)) {
compatible = cursor.getInt(i) == 1;
} else if (column.equals(AppProvider.DataColumns.APP_ID)) {
id = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.NAME)) {
name = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.SUMMARY)) {
summary = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.ICON)) {
icon = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.DESCRIPTION)) {
description = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.LICENSE)) {
license = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.WEB_URL)) {
webURL = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.TRACKER_URL)) {
trackerURL = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.SOURCE_URL)) {
sourceURL = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.DONATE_URL)) {
donateURL = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.BITCOIN_ADDR)) {
bitcoinAddr = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.LITECOIN_ADDR)) {
litecoinAddr = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.DOGECOIN_ADDR)) {
dogecoinAddr = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.FLATTR_ID)) {
flattrID = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.SuggestedApk.VERSION)) {
suggestedVersion = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.SUGGESTED_VERSION_CODE)) {
suggestedVercode = cursor.getInt(i);
} else if (column.equals(AppProvider.DataColumns.UPSTREAM_VERSION_CODE)) {
upstreamVercode = cursor.getInt(i);
} else if (column.equals(AppProvider.DataColumns.UPSTREAM_VERSION)) {
upstreamVersion = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.ADDED)) {
added = ValueObject.toDate(cursor.getString(i));
} else if (column.equals(AppProvider.DataColumns.LAST_UPDATED)) {
lastUpdated = ValueObject.toDate(cursor.getString(i));
} else if (column.equals(AppProvider.DataColumns.CATEGORIES)) {
categories = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(AppProvider.DataColumns.ANTI_FEATURES)) {
antiFeatures = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(AppProvider.DataColumns.REQUIREMENTS)) {
requirements = Utils.CommaSeparatedList.make(cursor.getString(i));
} else if (column.equals(AppProvider.DataColumns.IGNORE_ALLUPDATES)) {
ignoreAllUpdates = cursor.getInt(i) == 1;
} else if (column.equals(AppProvider.DataColumns.IGNORE_THISUPDATE)) {
ignoreThisUpdate = cursor.getInt(i);
} else if (column.equals(AppProvider.DataColumns.ICON_URL)) {
iconUrl = cursor.getString(i);
} else if (column.equals(AppProvider.DataColumns.InstalledApp.VERSION_CODE)) {
installedVersionCode = cursor.getInt(i);
} else if (column.equals(AppProvider.DataColumns.InstalledApp.VERSION_NAME)) {
installedVersionName = cursor.getString(i);
switch (cursor.getColumnName(i)) {
case AppProvider.DataColumns.IS_COMPATIBLE:
compatible = cursor.getInt(i) == 1;
break;
case AppProvider.DataColumns.APP_ID:
id = cursor.getString(i);
break;
case AppProvider.DataColumns.NAME:
name = cursor.getString(i);
break;
case AppProvider.DataColumns.SUMMARY:
summary = cursor.getString(i);
break;
case AppProvider.DataColumns.ICON:
icon = cursor.getString(i);
break;
case AppProvider.DataColumns.DESCRIPTION:
description = cursor.getString(i);
break;
case AppProvider.DataColumns.LICENSE:
license = cursor.getString(i);
break;
case AppProvider.DataColumns.WEB_URL:
webURL = cursor.getString(i);
break;
case AppProvider.DataColumns.TRACKER_URL:
trackerURL = cursor.getString(i);
break;
case AppProvider.DataColumns.SOURCE_URL:
sourceURL = cursor.getString(i);
break;
case AppProvider.DataColumns.DONATE_URL:
donateURL = cursor.getString(i);
break;
case AppProvider.DataColumns.BITCOIN_ADDR:
bitcoinAddr = cursor.getString(i);
break;
case AppProvider.DataColumns.LITECOIN_ADDR:
litecoinAddr = cursor.getString(i);
break;
case AppProvider.DataColumns.DOGECOIN_ADDR:
dogecoinAddr = cursor.getString(i);
break;
case AppProvider.DataColumns.FLATTR_ID:
flattrID = cursor.getString(i);
break;
case AppProvider.DataColumns.SuggestedApk.VERSION:
suggestedVersion = cursor.getString(i);
break;
case AppProvider.DataColumns.SUGGESTED_VERSION_CODE:
suggestedVercode = cursor.getInt(i);
break;
case AppProvider.DataColumns.UPSTREAM_VERSION_CODE:
upstreamVercode = cursor.getInt(i);
break;
case AppProvider.DataColumns.UPSTREAM_VERSION:
upstreamVersion = cursor.getString(i);
break;
case AppProvider.DataColumns.ADDED:
added = ValueObject.toDate(cursor.getString(i));
break;
case AppProvider.DataColumns.LAST_UPDATED:
lastUpdated = ValueObject.toDate(cursor.getString(i));
break;
case AppProvider.DataColumns.CATEGORIES:
categories = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case AppProvider.DataColumns.ANTI_FEATURES:
antiFeatures = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case AppProvider.DataColumns.REQUIREMENTS:
requirements = Utils.CommaSeparatedList.make(cursor.getString(i));
break;
case AppProvider.DataColumns.IGNORE_ALLUPDATES:
ignoreAllUpdates = cursor.getInt(i) == 1;
break;
case AppProvider.DataColumns.IGNORE_THISUPDATE:
ignoreThisUpdate = cursor.getInt(i);
break;
case AppProvider.DataColumns.ICON_URL:
iconUrl = cursor.getString(i);
break;
case AppProvider.DataColumns.InstalledApp.VERSION_CODE:
installedVersionCode = cursor.getInt(i);
break;
case AppProvider.DataColumns.InstalledApp.VERSION_NAME:
installedVersionName = cursor.getString(i);
break;
}
}
}

View File

@ -314,19 +314,25 @@ public class AppProvider extends FDroidProvider {
@Override
public void addField(String field) {
if (field.equals(DataColumns.SuggestedApk.VERSION)) {
addSuggestedApkVersionField();
} else if (field.equals(DataColumns.InstalledApp.VERSION_NAME)) {
addInstalledAppVersionName();
} else if (field.equals(DataColumns.InstalledApp.VERSION_CODE)) {
addInstalledAppVersionCode();
} else if (field.equals(DataColumns._COUNT)) {
appendCountField();
} else {
if (field.equals(DataColumns.CATEGORIES)) {
categoryFieldAdded = true;
}
appendField(field, "fdroid_app");
switch (field) {
case DataColumns.SuggestedApk.VERSION:
addSuggestedApkVersionField();
break;
case DataColumns.InstalledApp.VERSION_NAME:
addInstalledAppVersionName();
break;
case DataColumns.InstalledApp.VERSION_CODE:
addInstalledAppVersionCode();
break;
case DataColumns._COUNT:
appendCountField();
break;
default:
if (field.equals(DataColumns.CATEGORIES)) {
categoryFieldAdded = true;
}
appendField(field, "fdroid_app");
break;
}
}

View File

@ -41,33 +41,46 @@ public class Repo extends ValueObject {
checkCursorPosition(cursor);
for (int i = 0; i < cursor.getColumnCount(); i++) {
String column = cursor.getColumnName(i);
if (column.equals(RepoProvider.DataColumns._ID)) {
id = cursor.getInt(i);
} else if (column.equals(RepoProvider.DataColumns.LAST_ETAG)) {
lastetag = cursor.getString(i);
} else if (column.equals(RepoProvider.DataColumns.ADDRESS)) {
address = cursor.getString(i);
} else if (column.equals(RepoProvider.DataColumns.DESCRIPTION)) {
description = cursor.getString(i);
} else if (column.equals(RepoProvider.DataColumns.FINGERPRINT)) {
fingerprint = cursor.getString(i);
} else if (column.equals(RepoProvider.DataColumns.IN_USE)) {
inuse = cursor.getInt(i) == 1;
} else if (column.equals(RepoProvider.DataColumns.LAST_UPDATED)) {
lastUpdated = toDate(cursor.getString(i));
} else if (column.equals(RepoProvider.DataColumns.MAX_AGE)) {
maxage = cursor.getInt(i);
} else if (column.equals(RepoProvider.DataColumns.VERSION)) {
version = cursor.getInt(i);
} else if (column.equals(RepoProvider.DataColumns.NAME)) {
name = cursor.getString(i);
} else if (column.equals(RepoProvider.DataColumns.PUBLIC_KEY)) {
pubkey = cursor.getString(i);
} else if (column.equals(RepoProvider.DataColumns.PRIORITY)) {
priority = cursor.getInt(i);
} else if (column.equals(RepoProvider.DataColumns.IS_SWAP)) {
isSwap = cursor.getInt(i) == 1;
switch (cursor.getColumnName(i)) {
case RepoProvider.DataColumns._ID:
id = cursor.getInt(i);
break;
case RepoProvider.DataColumns.LAST_ETAG:
lastetag = cursor.getString(i);
break;
case RepoProvider.DataColumns.ADDRESS:
address = cursor.getString(i);
break;
case RepoProvider.DataColumns.DESCRIPTION:
description = cursor.getString(i);
break;
case RepoProvider.DataColumns.FINGERPRINT:
fingerprint = cursor.getString(i);
break;
case RepoProvider.DataColumns.IN_USE:
inuse = cursor.getInt(i) == 1;
break;
case RepoProvider.DataColumns.LAST_UPDATED:
lastUpdated = toDate(cursor.getString(i));
break;
case RepoProvider.DataColumns.MAX_AGE:
maxage = cursor.getInt(i);
break;
case RepoProvider.DataColumns.VERSION:
version = cursor.getInt(i);
break;
case RepoProvider.DataColumns.NAME:
name = cursor.getString(i);
break;
case RepoProvider.DataColumns.PUBLIC_KEY:
pubkey = cursor.getString(i);
break;
case RepoProvider.DataColumns.PRIORITY:
priority = cursor.getInt(i);
break;
case RepoProvider.DataColumns.IS_SWAP:
isSwap = cursor.getInt(i) == 1;
break;
}
}
}

View File

@ -200,11 +200,13 @@ public class ApkDownloader implements AsyncDownloadWrapper.Listener {
}
private void sendProgressEvent(Event event) {
if (event.type.equals(Downloader.EVENT_PROGRESS)) {
// Keep a copy of these ourselves, so people can interrogate us for the
// info (in addition to receiving events with the info).
totalSize = event.total;
progress = event.progress;
switch (event.type) {
case Downloader.EVENT_PROGRESS:
// Keep a copy of these ourselves, so people can interrogate us for the
// info (in addition to receiving events with the info).
totalSize = event.total;
progress = event.progress;
break;
}
event.getData().putLong(EVENT_SOURCE_ID, id);

View File

@ -212,15 +212,16 @@ public class ManageReposActivity extends ActionBarActivity {
new ProgressListener() {
@Override
public void onProgress(Event event) {
if (event.type.equals(UpdateService.EVENT_COMPLETE_AND_SAME) ||
event.type.equals(UpdateService.EVENT_COMPLETE_WITH_CHANGES)) {
// No need to prompt to update any more, we just
// did it!
changed = false;
}
if (event.type.equals(UpdateService.EVENT_FINISHED)) {
updateHandler = null;
switch (event.type) {
case UpdateService.EVENT_COMPLETE_AND_SAME:
case UpdateService.EVENT_COMPLETE_WITH_CHANGES:
// No need to prompt to update any more, we just
// did it!
changed = false;
break;
case UpdateService.EVENT_FINISHED:
updateHandler = null;
break;
}
}
});

View File

@ -189,12 +189,11 @@ public class AvailableAppsFragment extends AppListFragment implements
protected Uri getDataUri() {
if (currentCategory == null || currentCategory.equals(AppProvider.Helper.getCategoryAll(getActivity())))
return AppProvider.getContentUri();
else if (currentCategory.equals(AppProvider.Helper.getCategoryRecentlyUpdated(getActivity())))
if (currentCategory.equals(AppProvider.Helper.getCategoryRecentlyUpdated(getActivity())))
return AppProvider.getRecentlyUpdatedUri();
else if (currentCategory.equals(AppProvider.Helper.getCategoryWhatsNew(getActivity())))
if (currentCategory.equals(AppProvider.Helper.getCategoryWhatsNew(getActivity())))
return AppProvider.getNewlyAddedUri();
else
return AppProvider.getCategoryUri(currentCategory);
return AppProvider.getCategoryUri(currentCategory);
}
private void setCurrentCategory(String category) {

View File

@ -67,90 +67,111 @@ public class PreferenceFragment
int result = 0;
if (key.equals(Preferences.PREF_UPD_INTERVAL)) {
ListPreference pref = (ListPreference)findPreference(
Preferences.PREF_UPD_INTERVAL);
int interval = Integer.parseInt(pref.getValue());
Preference onlyOnWifi = findPreference(
Preferences.PREF_UPD_WIFI_ONLY);
onlyOnWifi.setEnabled(interval > 0);
if (interval == 0) {
pref.setSummary(R.string.update_interval_zero);
} else {
pref.setSummary(pref.getEntry());
}
switch (key) {
case Preferences.PREF_UPD_INTERVAL:
ListPreference listPref = (ListPreference)findPreference(
Preferences.PREF_UPD_INTERVAL);
int interval = Integer.parseInt(listPref.getValue());
Preference onlyOnWifi = findPreference(
Preferences.PREF_UPD_WIFI_ONLY);
onlyOnWifi.setEnabled(interval > 0);
if (interval == 0) {
listPref.setSummary(R.string.update_interval_zero);
} else {
listPref.setSummary(listPref.getEntry());
}
break;
} else if (key.equals(Preferences.PREF_UPD_WIFI_ONLY)) {
checkSummary(key, R.string.automatic_scan_wifi_on);
case Preferences.PREF_UPD_WIFI_ONLY:
checkSummary(key, R.string.automatic_scan_wifi_on);
break;
} else if (key.equals(Preferences.PREF_UPD_NOTIFY)) {
checkSummary(key, R.string.notify_on);
case Preferences.PREF_UPD_NOTIFY:
checkSummary(key, R.string.notify_on);
break;
} else if (key.equals(Preferences.PREF_UPD_HISTORY)) {
textSummary(key, R.string.update_history_summ);
case Preferences.PREF_UPD_HISTORY:
textSummary(key, R.string.update_history_summ);
break;
} else if (key.equals(Preferences.PREF_PERMISSIONS)) {
checkSummary(key, R.string.showPermissions_on);
case Preferences.PREF_PERMISSIONS:
checkSummary(key, R.string.showPermissions_on);
break;
} else if (key.equals(Preferences.PREF_COMPACT_LAYOUT)) {
checkSummary(key, R.string.compactlayout_on);
case Preferences.PREF_COMPACT_LAYOUT:
checkSummary(key, R.string.compactlayout_on);
break;
} else if (key.equals(Preferences.PREF_THEME)) {
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
}
case Preferences.PREF_THEME:
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
}
break;
} else if (key.equals(Preferences.PREF_INCOMP_VER)) {
checkSummary(key, R.string.show_incompat_versions_on);
case Preferences.PREF_INCOMP_VER:
checkSummary(key, R.string.show_incompat_versions_on);
break;
} else if (key.equals(Preferences.PREF_ROOTED)) {
checkSummary(key, R.string.rooted_on);
case Preferences.PREF_ROOTED:
checkSummary(key, R.string.rooted_on);
break;
} else if (key.equals(Preferences.PREF_IGN_TOUCH)) {
checkSummary(key, R.string.ignoreTouch_on);
case Preferences.PREF_IGN_TOUCH:
checkSummary(key, R.string.ignoreTouch_on);
break;
} else if (key.equals(Preferences.PREF_LOCAL_REPO_BONJOUR)) {
checkSummary(key, R.string.local_repo_bonjour_on);
case Preferences.PREF_LOCAL_REPO_BONJOUR:
checkSummary(key, R.string.local_repo_bonjour_on);
break;
} else if (key.equals(Preferences.PREF_LOCAL_REPO_NAME)) {
textSummary(key, R.string.local_repo_name_summary);
case Preferences.PREF_LOCAL_REPO_NAME:
textSummary(key, R.string.local_repo_name_summary);
break;
} else if (key.equals(Preferences.PREF_LOCAL_REPO_HTTPS)) {
checkSummary(key, R.string.local_repo_https_on);
case Preferences.PREF_LOCAL_REPO_HTTPS:
checkSummary(key, R.string.local_repo_https_on);
break;
} else if (key.equals(Preferences.PREF_CACHE_APK)) {
checkSummary(key, R.string.cache_downloaded_on);
case Preferences.PREF_CACHE_APK:
checkSummary(key, R.string.cache_downloaded_on);
break;
} else if (key.equals(Preferences.PREF_EXPERT)) {
checkSummary(key, R.string.expert_on);
case Preferences.PREF_EXPERT:
checkSummary(key, R.string.expert_on);
break;
} else if (key.equals(Preferences.PREF_ROOT_INSTALLER)) {
checkSummary(key, R.string.root_installer_on);
case Preferences.PREF_ROOT_INSTALLER:
checkSummary(key, R.string.root_installer_on);
break;
} else if (key.equals(Preferences.PREF_SYSTEM_INSTALLER)) {
checkSummary(key, R.string.system_installer_on);
case Preferences.PREF_SYSTEM_INSTALLER:
checkSummary(key, R.string.system_installer_on);
break;
} else if (key.equals(Preferences.PREF_ENABLE_PROXY)) {
CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
pref.setSummary(R.string.enable_proxy_summary);
case Preferences.PREF_ENABLE_PROXY:
CheckBoxPreference checkPref = (CheckBoxPreference) findPreference(key);
checkPref.setSummary(R.string.enable_proxy_summary);
break;
} else if (key.equals(Preferences.PREF_PROXY_HOST)) {
EditTextPreference textPref = (EditTextPreference) findPreference(key);
String text = Preferences.get().getProxyHost();
if (TextUtils.isEmpty(text) || text.equals(Preferences.DEFAULT_PROXY_HOST))
textPref.setSummary(R.string.proxy_host_summary);
else
textPref.setSummary(text);
case Preferences.PREF_PROXY_HOST:
EditTextPreference textPref = (EditTextPreference) findPreference(key);
String text = Preferences.get().getProxyHost();
if (TextUtils.isEmpty(text) || text.equals(Preferences.DEFAULT_PROXY_HOST))
textPref.setSummary(R.string.proxy_host_summary);
else
textPref.setSummary(text);
break;
} else if (key.equals(Preferences.PREF_PROXY_PORT)) {
EditTextPreference textPref = (EditTextPreference) findPreference(key);
int port = Preferences.get().getProxyPort();
if (port == Preferences.DEFAULT_PROXY_PORT)
textPref.setSummary(R.string.proxy_port_summary);
else
textPref.setSummary(String.valueOf(port));
case Preferences.PREF_PROXY_PORT:
EditTextPreference textPref2 = (EditTextPreference) findPreference(key);
int port = Preferences.get().getProxyPort();
if (port == Preferences.DEFAULT_PROXY_PORT)
textPref2.setSummary(R.string.proxy_port_summary);
else
textPref2.setSummary(String.valueOf(port));
break;
}
}

View File

@ -229,13 +229,14 @@ public class RepoDetailsFragment extends Fragment {
updateHandler = UpdateService.updateRepoNow(repo.address, getActivity()).setListener(new ProgressListener() {
@Override
public void onProgress(Event event) {
if (event.type.equals(UpdateService.EVENT_COMPLETE_WITH_CHANGES)) {
repo = loadRepoDetails();
updateView((ViewGroup)getView());
}
if (event.type.equals(UpdateService.EVENT_FINISHED)) {
updateHandler = null;
switch (event.type) {
case UpdateService.EVENT_COMPLETE_WITH_CHANGES:
repo = loadRepoDetails();
updateView((ViewGroup)getView());
break;
case UpdateService.EVENT_FINISHED:
updateHandler = null;
break;
}
}
});

View File

@ -106,17 +106,20 @@ public class ConfirmReceiveSwapFragment extends Fragment implements ProgressList
// an additional dialog. E.g. White text on blue, letting the user
// know what we are up to.
if (event.type.equals(UpdateService.EVENT_COMPLETE_AND_SAME) ||
event.type.equals(UpdateService.EVENT_COMPLETE_WITH_CHANGES)) {
((ConnectSwapActivity)getActivity()).onRepoUpdated(repo);
/*Intent intent = new Intent();
intent.putExtra("category", newRepoConfig.getHost()); // TODO: Load repo from database to get proper name. This is what the category we want to select will be called.
getActivity().setResult(Activity.RESULT_OK, intent);
finish();*/
} else if (event.type.equals(UpdateService.EVENT_ERROR)) {
// TODO: Show message on this screen (with a big "okay" button that goes back to F-Droid activity)
// rather than finishing directly.
finish();
}
switch (event.type) {
case UpdateService.EVENT_COMPLETE_AND_SAME:
case UpdateService.EVENT_COMPLETE_WITH_CHANGES:
((ConnectSwapActivity)getActivity()).onRepoUpdated(repo);
/*Intent intent = new Intent();
intent.putExtra("category", newRepoConfig.getHost()); // TODO: Load repo from database to get proper name. This is what the category we want to select will be called.
getActivity().setResult(Activity.RESULT_OK, intent);
finish();*/
break;
case UpdateService.EVENT_ERROR:
// TODO: Show message on this screen (with a big "okay" button that goes back to F-Droid activity)
// rather than finishing directly.
finish();
break;
}
}
}

View File

@ -37,10 +37,13 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
@Override
public void onBackPressed() {
if (currentState().equals(STATE_START_SWAP)) {
finish();
} else {
super.onBackPressed();
switch (currentState()) {
case STATE_START_SWAP:
finish();
break;
default:
super.onBackPressed();
break;
}
}
@ -50,19 +53,24 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
}
public void nextStep() {
String current = currentState();
if (current.equals(STATE_START_SWAP)) {
showSelectApps();
} else if (current.equals(STATE_SELECT_APPS)) {
prepareLocalRepo();
} else if (current.equals(STATE_JOIN_WIFI)) {
ensureLocalRepoRunning();
if (!attemptToShowNfc()) {
switch (currentState()) {
case STATE_START_SWAP:
showSelectApps();
break;
case STATE_SELECT_APPS:
prepareLocalRepo();
break;
case STATE_JOIN_WIFI:
ensureLocalRepoRunning();
if (!attemptToShowNfc()) {
showWifiQr();
}
break;
case STATE_NFC:
showWifiQr();
}
} else if (current.equals(STATE_NFC)) {
showWifiQr();
} else if (current.equals(STATE_WIFI_QR)) {
break;
case STATE_WIFI_QR:
break;
}
supportInvalidateOptionsMenu();
}