checkstyle: Add indentation

This commit is contained in:
Daniel Martí 2015-10-08 21:41:38 +02:00
parent 04ea84640e
commit 561d7833d1
38 changed files with 1583 additions and 1581 deletions

View File

@ -25,90 +25,90 @@ import android.provider.ContactsContract;
* @author dswitkin@google.com (Daniel Switkin)
*/
public final class Contents {
private Contents() {
}
public static final class Type {
/**
* Plain text. Use Intent.putExtra(DATA, string). This can be used for URLs too, but string
* must include "http://" or "https://".
*/
public static final String TEXT = "TEXT_TYPE";
/**
* An email type. Use Intent.putExtra(DATA, string) where string is the email address.
*/
public static final String EMAIL = "EMAIL_TYPE";
/**
* Use Intent.putExtra(DATA, string) where string is the phone number to call.
*/
public static final String PHONE = "PHONE_TYPE";
/**
* An SMS type. Use Intent.putExtra(DATA, string) where string is the number to SMS.
*/
public static final String SMS = "SMS_TYPE";
/**
* A contact. Send a request to encode it as follows:
* <p/>
* import android.provider.Contacts;
* <p/>
* Intent intent = new Intent(Intents.Encode.ACTION);
* intent.putExtra(Intents.Encode.TYPE, CONTACT);
* Bundle bundle = new Bundle();
* bundle.putString(Contacts.Intents.Insert.NAME, "Jenny");
* bundle.putString(Contacts.Intents.Insert.PHONE, "8675309");
* bundle.putString(Contacts.Intents.Insert.EMAIL, "jenny@the80s.com");
* bundle.putString(Contacts.Intents.Insert.POSTAL, "123 Fake St. San Francisco, CA 94102");
* intent.putExtra(Intents.Encode.DATA, bundle);
*/
public static final String CONTACT = "CONTACT_TYPE";
/**
* A geographic location. Use as follows:
* Bundle bundle = new Bundle();
* bundle.putFloat("LAT", latitude);
* bundle.putFloat("LONG", longitude);
* intent.putExtra(Intents.Encode.DATA, bundle);
*/
public static final String LOCATION = "LOCATION_TYPE";
private Type() {
private Contents() {
}
}
public static final String URL_KEY = "URL_KEY";
public static final class Type {
/**
* Plain text. Use Intent.putExtra(DATA, string). This can be used for URLs too, but string
* must include "http://" or "https://".
*/
public static final String TEXT = "TEXT_TYPE";
public static final String NOTE_KEY = "NOTE_KEY";
/**
* An email type. Use Intent.putExtra(DATA, string) where string is the email address.
*/
public static final String EMAIL = "EMAIL_TYPE";
/**
* When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple
* phone numbers and addresses.
*/
public static final String[] PHONE_KEYS = {
ContactsContract.Intents.Insert.PHONE,
ContactsContract.Intents.Insert.SECONDARY_PHONE,
ContactsContract.Intents.Insert.TERTIARY_PHONE
};
/**
* Use Intent.putExtra(DATA, string) where string is the phone number to call.
*/
public static final String PHONE = "PHONE_TYPE";
public static final String[] PHONE_TYPE_KEYS = {
ContactsContract.Intents.Insert.PHONE_TYPE,
ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE,
ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE
};
/**
* An SMS type. Use Intent.putExtra(DATA, string) where string is the number to SMS.
*/
public static final String SMS = "SMS_TYPE";
public static final String[] EMAIL_KEYS = {
ContactsContract.Intents.Insert.EMAIL,
ContactsContract.Intents.Insert.SECONDARY_EMAIL,
ContactsContract.Intents.Insert.TERTIARY_EMAIL
};
/**
* A contact. Send a request to encode it as follows:
* <p/>
* import android.provider.Contacts;
* <p/>
* Intent intent = new Intent(Intents.Encode.ACTION);
* intent.putExtra(Intents.Encode.TYPE, CONTACT);
* Bundle bundle = new Bundle();
* bundle.putString(Contacts.Intents.Insert.NAME, "Jenny");
* bundle.putString(Contacts.Intents.Insert.PHONE, "8675309");
* bundle.putString(Contacts.Intents.Insert.EMAIL, "jenny@the80s.com");
* bundle.putString(Contacts.Intents.Insert.POSTAL, "123 Fake St. San Francisco, CA 94102");
* intent.putExtra(Intents.Encode.DATA, bundle);
*/
public static final String CONTACT = "CONTACT_TYPE";
public static final String[] EMAIL_TYPE_KEYS = {
ContactsContract.Intents.Insert.EMAIL_TYPE,
ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE,
ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE
};
/**
* A geographic location. Use as follows:
* Bundle bundle = new Bundle();
* bundle.putFloat("LAT", latitude);
* bundle.putFloat("LONG", longitude);
* intent.putExtra(Intents.Encode.DATA, bundle);
*/
public static final String LOCATION = "LOCATION_TYPE";
private Type() {
}
}
public static final String URL_KEY = "URL_KEY";
public static final String NOTE_KEY = "NOTE_KEY";
/**
* When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple
* phone numbers and addresses.
*/
public static final String[] PHONE_KEYS = {
ContactsContract.Intents.Insert.PHONE,
ContactsContract.Intents.Insert.SECONDARY_PHONE,
ContactsContract.Intents.Insert.TERTIARY_PHONE
};
public static final String[] PHONE_TYPE_KEYS = {
ContactsContract.Intents.Insert.PHONE_TYPE,
ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE,
ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE
};
public static final String[] EMAIL_KEYS = {
ContactsContract.Intents.Insert.EMAIL,
ContactsContract.Intents.Insert.SECONDARY_EMAIL,
ContactsContract.Intents.Insert.TERTIARY_EMAIL
};
public static final String[] EMAIL_TYPE_KEYS = {
ContactsContract.Intents.Insert.EMAIL_TYPE,
ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE,
ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE
};
}

View File

@ -83,118 +83,118 @@ public final class QRCodeEncoder {
private void encodeQRCodeContents(String data, Bundle bundle, String type) {
switch (type) {
case Contents.Type.TEXT:
if (data != null && data.length() > 0) {
contents = data;
displayContents = data;
title = "Text";
}
break;
case Contents.Type.EMAIL:
data = trim(data);
if (data != null) {
contents = "mailto:" + data;
displayContents = data;
title = "E-Mail";
}
break;
case Contents.Type.PHONE:
data = trim(data);
if (data != null) {
contents = "tel:" + data;
displayContents = PhoneNumberUtils.formatNumber(data);
title = "Phone";
}
break;
case Contents.Type.SMS:
data = trim(data);
if (data != null) {
contents = "sms:" + data;
displayContents = PhoneNumberUtils.formatNumber(data);
title = "SMS";
}
break;
case Contents.Type.CONTACT:
if (bundle != null) {
StringBuilder newContents = new StringBuilder(100);
StringBuilder newDisplayContents = new StringBuilder(100);
newContents.append("MECARD:");
String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME));
if (name != null) {
newContents.append("N:").append(escapeMECARD(name)).append(';');
newDisplayContents.append(name);
case Contents.Type.TEXT:
if (data != null && data.length() > 0) {
contents = data;
displayContents = data;
title = "Text";
}
String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL));
if (address != null) {
newContents.append("ADR:").append(escapeMECARD(address)).append(';');
newDisplayContents.append('\n').append(address);
break;
case Contents.Type.EMAIL:
data = trim(data);
if (data != null) {
contents = "mailto:" + data;
displayContents = data;
title = "E-Mail";
}
break;
case Contents.Type.PHONE:
data = trim(data);
if (data != null) {
contents = "tel:" + data;
displayContents = PhoneNumberUtils.formatNumber(data);
title = "Phone";
}
break;
case Contents.Type.SMS:
data = trim(data);
if (data != null) {
contents = "sms:" + data;
displayContents = PhoneNumberUtils.formatNumber(data);
title = "SMS";
}
break;
case Contents.Type.CONTACT:
if (bundle != null) {
StringBuilder newContents = new StringBuilder(100);
StringBuilder newDisplayContents = new StringBuilder(100);
Collection<String> uniquePhones = new HashSet<>(Contents.PHONE_KEYS.length);
for (int x = 0; x < Contents.PHONE_KEYS.length; x++) {
String phone = trim(bundle.getString(Contents.PHONE_KEYS[x]));
if (phone != null) {
uniquePhones.add(phone);
newContents.append("MECARD:");
String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME));
if (name != null) {
newContents.append("N:").append(escapeMECARD(name)).append(';');
newDisplayContents.append(name);
}
String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL));
if (address != null) {
newContents.append("ADR:").append(escapeMECARD(address)).append(';');
newDisplayContents.append('\n').append(address);
}
Collection<String> uniquePhones = new HashSet<>(Contents.PHONE_KEYS.length);
for (int x = 0; x < Contents.PHONE_KEYS.length; x++) {
String phone = trim(bundle.getString(Contents.PHONE_KEYS[x]));
if (phone != null) {
uniquePhones.add(phone);
}
}
for (String phone : uniquePhones) {
newContents.append("TEL:").append(escapeMECARD(phone)).append(';');
newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone));
}
Collection<String> uniqueEmails = new HashSet<>(Contents.EMAIL_KEYS.length);
for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) {
String email = trim(bundle.getString(Contents.EMAIL_KEYS[x]));
if (email != null) {
uniqueEmails.add(email);
}
}
for (String email : uniqueEmails) {
newContents.append("EMAIL:").append(escapeMECARD(email)).append(';');
newDisplayContents.append('\n').append(email);
}
String url = trim(bundle.getString(Contents.URL_KEY));
if (url != null) {
// escapeMECARD(url) -> wrong escape e.g. http\://zxing.google.com
newContents.append("URL:").append(url).append(';');
newDisplayContents.append('\n').append(url);
}
String note = trim(bundle.getString(Contents.NOTE_KEY));
if (note != null) {
newContents.append("NOTE:").append(escapeMECARD(note)).append(';');
newDisplayContents.append('\n').append(note);
}
// Make sure we've encoded at least one field.
if (newDisplayContents.length() > 0) {
newContents.append(';');
contents = newContents.toString();
displayContents = newDisplayContents.toString();
title = "Contact";
} else {
contents = null;
displayContents = null;
}
}
break;
case Contents.Type.LOCATION:
if (bundle != null) {
// These must use Bundle.getFloat(), not getDouble(), it's part of the API.
float latitude = bundle.getFloat("LAT", Float.MAX_VALUE);
float longitude = bundle.getFloat("LONG", Float.MAX_VALUE);
if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) {
contents = "geo:" + latitude + ',' + longitude;
displayContents = latitude + "," + longitude;
title = "Location";
}
}
for (String phone : uniquePhones) {
newContents.append("TEL:").append(escapeMECARD(phone)).append(';');
newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone));
}
Collection<String> uniqueEmails = new HashSet<>(Contents.EMAIL_KEYS.length);
for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) {
String email = trim(bundle.getString(Contents.EMAIL_KEYS[x]));
if (email != null) {
uniqueEmails.add(email);
}
}
for (String email : uniqueEmails) {
newContents.append("EMAIL:").append(escapeMECARD(email)).append(';');
newDisplayContents.append('\n').append(email);
}
String url = trim(bundle.getString(Contents.URL_KEY));
if (url != null) {
// escapeMECARD(url) -> wrong escape e.g. http\://zxing.google.com
newContents.append("URL:").append(url).append(';');
newDisplayContents.append('\n').append(url);
}
String note = trim(bundle.getString(Contents.NOTE_KEY));
if (note != null) {
newContents.append("NOTE:").append(escapeMECARD(note)).append(';');
newDisplayContents.append('\n').append(note);
}
// Make sure we've encoded at least one field.
if (newDisplayContents.length() > 0) {
newContents.append(';');
contents = newContents.toString();
displayContents = newDisplayContents.toString();
title = "Contact";
} else {
contents = null;
displayContents = null;
}
}
break;
case Contents.Type.LOCATION:
if (bundle != null) {
// These must use Bundle.getFloat(), not getDouble(), it's part of the API.
float latitude = bundle.getFloat("LAT", Float.MAX_VALUE);
float longitude = bundle.getFloat("LONG", Float.MAX_VALUE);
if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) {
contents = "geo:" + latitude + ',' + longitude;
displayContents = latitude + "," + longitude;
title = "Location";
}
}
break;
break;
}
}

View File

@ -106,401 +106,401 @@ import java.util.Map;
* @author Isaac Potoczny-Jones
* @author Brad Drehmer
* @author gcstang
*/
*/
public class IntentIntegrator {
public static final int REQUEST_CODE = 0x0000c0de; // Only use bottom 16 bits
private static final String TAG = IntentIntegrator.class.getSimpleName();
public static final int REQUEST_CODE = 0x0000c0de; // Only use bottom 16 bits
private static final String TAG = IntentIntegrator.class.getSimpleName();
public static final String DEFAULT_TITLE = "Install Barcode Scanner?";
public static final String DEFAULT_MESSAGE =
"This application requires Barcode Scanner. Would you like to install it?";
public static final String DEFAULT_YES = "Yes";
public static final String DEFAULT_NO = "No";
public static final String DEFAULT_TITLE = "Install Barcode Scanner?";
public static final String DEFAULT_MESSAGE =
"This application requires Barcode Scanner. Would you like to install it?";
public static final String DEFAULT_YES = "Yes";
public static final String DEFAULT_NO = "No";
private static final String BS_PACKAGE = "com.google.zxing.client.android";
private static final String BSPLUS_PACKAGE = "com.srowen.bs.android";
private static final String BS_PACKAGE = "com.google.zxing.client.android";
private static final String BSPLUS_PACKAGE = "com.srowen.bs.android";
// supported barcode formats
public static final Collection<String> PRODUCT_CODE_TYPES = list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "RSS_14");
public static final Collection<String> ONE_D_CODE_TYPES =
list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "CODE_39", "CODE_93", "CODE_128",
"ITF", "RSS_14", "RSS_EXPANDED");
public static final Collection<String> QR_CODE_TYPES = Collections.singleton("QR_CODE");
public static final Collection<String> DATA_MATRIX_TYPES = Collections.singleton("DATA_MATRIX");
// supported barcode formats
public static final Collection<String> PRODUCT_CODE_TYPES = list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "RSS_14");
public static final Collection<String> ONE_D_CODE_TYPES =
list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "CODE_39", "CODE_93", "CODE_128",
"ITF", "RSS_14", "RSS_EXPANDED");
public static final Collection<String> QR_CODE_TYPES = Collections.singleton("QR_CODE");
public static final Collection<String> DATA_MATRIX_TYPES = Collections.singleton("DATA_MATRIX");
public static final Collection<String> ALL_CODE_TYPES = null;
public static final Collection<String> ALL_CODE_TYPES = null;
public static final List<String> TARGET_BARCODE_SCANNER_ONLY = Collections.singletonList(BS_PACKAGE);
public static final List<String> TARGET_ALL_KNOWN = list(
BSPLUS_PACKAGE, // Barcode Scanner+
BSPLUS_PACKAGE + ".simple", // Barcode Scanner+ Simple
BS_PACKAGE // Barcode Scanner
// What else supports this intent?
);
public static final List<String> TARGET_BARCODE_SCANNER_ONLY = Collections.singletonList(BS_PACKAGE);
public static final List<String> TARGET_ALL_KNOWN = list(
BSPLUS_PACKAGE, // Barcode Scanner+
BSPLUS_PACKAGE + ".simple", // Barcode Scanner+ Simple
BS_PACKAGE // Barcode Scanner
// What else supports this intent?
);
private final Activity activity;
private final Fragment fragment;
private final Activity activity;
private final Fragment fragment;
private String title;
private String message;
private String buttonYes;
private String buttonNo;
private List<String> targetApplications;
private final Map<String, Object> moreExtras = new HashMap<>(3);
private String title;
private String message;
private String buttonYes;
private String buttonNo;
private List<String> targetApplications;
private final Map<String, Object> moreExtras = new HashMap<>(3);
/**
* @param activity {@link Activity} invoking the integration
*/
public IntentIntegrator(Activity activity) {
this.activity = activity;
this.fragment = null;
initializeConfiguration();
}
/**
* @param fragment {@link Fragment} invoking the integration.
* {@link #startActivityForResult(Intent, int)} will be called on the {@link Fragment} instead
* of an {@link Activity}
*/
public IntentIntegrator(Fragment fragment) {
this.activity = fragment.getActivity();
this.fragment = fragment;
initializeConfiguration();
}
private void initializeConfiguration() {
title = DEFAULT_TITLE;
message = DEFAULT_MESSAGE;
buttonYes = DEFAULT_YES;
buttonNo = DEFAULT_NO;
targetApplications = TARGET_ALL_KNOWN;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void setTitleByID(int titleID) {
title = activity.getString(titleID);
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void setMessageByID(int messageID) {
message = activity.getString(messageID);
}
public String getButtonYes() {
return buttonYes;
}
public void setButtonYes(String buttonYes) {
this.buttonYes = buttonYes;
}
public void setButtonYesByID(int buttonYesID) {
buttonYes = activity.getString(buttonYesID);
}
public String getButtonNo() {
return buttonNo;
}
public void setButtonNo(String buttonNo) {
this.buttonNo = buttonNo;
}
public void setButtonNoByID(int buttonNoID) {
buttonNo = activity.getString(buttonNoID);
}
public Collection<String> getTargetApplications() {
return targetApplications;
}
public final void setTargetApplications(List<String> targetApplications) {
if (targetApplications.isEmpty()) {
throw new IllegalArgumentException("No target applications");
/**
* @param activity {@link Activity} invoking the integration
*/
public IntentIntegrator(Activity activity) {
this.activity = activity;
this.fragment = null;
initializeConfiguration();
}
this.targetApplications = targetApplications;
}
public void setSingleTargetApplication(String targetApplication) {
this.targetApplications = Collections.singletonList(targetApplication);
}
/**
* @param fragment {@link Fragment} invoking the integration.
* {@link #startActivityForResult(Intent, int)} will be called on the {@link Fragment} instead
* of an {@link Activity}
*/
public IntentIntegrator(Fragment fragment) {
this.activity = fragment.getActivity();
this.fragment = fragment;
initializeConfiguration();
}
public Map<String, ?> getMoreExtras() {
return moreExtras;
}
private void initializeConfiguration() {
title = DEFAULT_TITLE;
message = DEFAULT_MESSAGE;
buttonYes = DEFAULT_YES;
buttonNo = DEFAULT_NO;
targetApplications = TARGET_ALL_KNOWN;
}
public final void addExtra(String key, Object value) {
moreExtras.put(key, value);
}
public String getTitle() {
return title;
}
/**
* Initiates a scan for all known barcode types with the default camera.
*
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise.
*/
public final AlertDialog initiateScan() {
return initiateScan(ALL_CODE_TYPES, -1);
}
public void setTitle(String title) {
this.title = title;
}
/**
* Initiates a scan for all known barcode types with the specified camera.
*
* @param cameraId camera ID of the camera to use. A negative value means "no preference".
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise.
*/
public final AlertDialog initiateScan(int cameraId) {
return initiateScan(ALL_CODE_TYPES, cameraId);
}
public void setTitleByID(int titleID) {
title = activity.getString(titleID);
}
/**
* Initiates a scan, using the default camera, only for a certain set of barcode types, given as strings corresponding
* to their names in ZXing's {@code BarcodeFormat} class like "UPC_A". You can supply constants
* like {@link #PRODUCT_CODE_TYPES} for example.
*
* @param desiredBarcodeFormats names of {@code BarcodeFormat}s to scan for
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise.
*/
public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats) {
return initiateScan(desiredBarcodeFormats, -1);
}
public String getMessage() {
return message;
}
/**
* Initiates a scan, using the specified camera, only for a certain set of barcode types, given as strings corresponding
* to their names in ZXing's {@code BarcodeFormat} class like "UPC_A". You can supply constants
* like {@link #PRODUCT_CODE_TYPES} for example.
*
* @param desiredBarcodeFormats names of {@code BarcodeFormat}s to scan for
* @param cameraId camera ID of the camera to use. A negative value means "no preference".
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise
*/
public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats, int cameraId) {
Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
intentScan.addCategory(Intent.CATEGORY_DEFAULT);
public void setMessage(String message) {
this.message = message;
}
// check which types of codes to scan for
if (desiredBarcodeFormats != null) {
// set the desired barcode types
StringBuilder joinedByComma = new StringBuilder();
for (String format : desiredBarcodeFormats) {
if (joinedByComma.length() > 0) {
joinedByComma.append(',');
public void setMessageByID(int messageID) {
message = activity.getString(messageID);
}
public String getButtonYes() {
return buttonYes;
}
public void setButtonYes(String buttonYes) {
this.buttonYes = buttonYes;
}
public void setButtonYesByID(int buttonYesID) {
buttonYes = activity.getString(buttonYesID);
}
public String getButtonNo() {
return buttonNo;
}
public void setButtonNo(String buttonNo) {
this.buttonNo = buttonNo;
}
public void setButtonNoByID(int buttonNoID) {
buttonNo = activity.getString(buttonNoID);
}
public Collection<String> getTargetApplications() {
return targetApplications;
}
public final void setTargetApplications(List<String> targetApplications) {
if (targetApplications.isEmpty()) {
throw new IllegalArgumentException("No target applications");
}
joinedByComma.append(format);
}
intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
this.targetApplications = targetApplications;
}
// check requested camera ID
if (cameraId >= 0) {
intentScan.putExtra("SCAN_CAMERA_ID", cameraId);
public void setSingleTargetApplication(String targetApplication) {
this.targetApplications = Collections.singletonList(targetApplication);
}
String targetAppPackage = findTargetAppPackage(intentScan);
if (targetAppPackage == null) {
return showDownloadDialog();
public Map<String, ?> getMoreExtras() {
return moreExtras;
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intentScan);
startActivityForResult(intentScan, REQUEST_CODE);
return null;
}
/**
* Start an activity. This method is defined to allow different methods of activity starting for
* newer versions of Android and for compatibility library.
*
* @param intent Intent to start.
* @param code Request code for the activity
* @see android.app.Activity#startActivityForResult(Intent, int)
* @see android.app.Fragment#startActivityForResult(Intent, int)
*/
protected void startActivityForResult(Intent intent, int code) {
if (fragment == null) {
activity.startActivityForResult(intent, code);
} else {
fragment.startActivityForResult(intent, code);
public final void addExtra(String key, Object value) {
moreExtras.put(key, value);
}
}
private String findTargetAppPackage(Intent intent) {
PackageManager pm = activity.getPackageManager();
List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (availableApps != null) {
for (String targetApp : targetApplications) {
if (contains(availableApps, targetApp)) {
return targetApp;
/**
* Initiates a scan for all known barcode types with the default camera.
*
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise.
*/
public final AlertDialog initiateScan() {
return initiateScan(ALL_CODE_TYPES, -1);
}
/**
* Initiates a scan for all known barcode types with the specified camera.
*
* @param cameraId camera ID of the camera to use. A negative value means "no preference".
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise.
*/
public final AlertDialog initiateScan(int cameraId) {
return initiateScan(ALL_CODE_TYPES, cameraId);
}
/**
* Initiates a scan, using the default camera, only for a certain set of barcode types, given as strings corresponding
* to their names in ZXing's {@code BarcodeFormat} class like "UPC_A". You can supply constants
* like {@link #PRODUCT_CODE_TYPES} for example.
*
* @param desiredBarcodeFormats names of {@code BarcodeFormat}s to scan for
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise.
*/
public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats) {
return initiateScan(desiredBarcodeFormats, -1);
}
/**
* Initiates a scan, using the specified camera, only for a certain set of barcode types, given as strings corresponding
* to their names in ZXing's {@code BarcodeFormat} class like "UPC_A". You can supply constants
* like {@link #PRODUCT_CODE_TYPES} for example.
*
* @param desiredBarcodeFormats names of {@code BarcodeFormat}s to scan for
* @param cameraId camera ID of the camera to use. A negative value means "no preference".
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise
*/
public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats, int cameraId) {
Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
intentScan.addCategory(Intent.CATEGORY_DEFAULT);
// check which types of codes to scan for
if (desiredBarcodeFormats != null) {
// set the desired barcode types
StringBuilder joinedByComma = new StringBuilder();
for (String format : desiredBarcodeFormats) {
if (joinedByComma.length() > 0) {
joinedByComma.append(',');
}
joinedByComma.append(format);
}
intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
}
}
}
return null;
}
private static boolean contains(Iterable<ResolveInfo> availableApps, String targetApp) {
for (ResolveInfo availableApp : availableApps) {
String packageName = availableApp.activityInfo.packageName;
if (targetApp.equals(packageName)) {
return true;
}
}
return false;
}
// check requested camera ID
if (cameraId >= 0) {
intentScan.putExtra("SCAN_CAMERA_ID", cameraId);
}
private AlertDialog showDownloadDialog() {
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);
downloadDialog.setTitle(title);
downloadDialog.setMessage(message);
downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String packageName;
if (targetApplications.contains(BS_PACKAGE)) {
// Prefer to suggest download of BS if it's anywhere in the list
packageName = BS_PACKAGE;
String targetAppPackage = findTargetAppPackage(intentScan);
if (targetAppPackage == null) {
return showDownloadDialog();
}
intentScan.setPackage(targetAppPackage);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intentScan);
startActivityForResult(intentScan, REQUEST_CODE);
return null;
}
/**
* Start an activity. This method is defined to allow different methods of activity starting for
* newer versions of Android and for compatibility library.
*
* @param intent Intent to start.
* @param code Request code for the activity
* @see android.app.Activity#startActivityForResult(Intent, int)
* @see android.app.Fragment#startActivityForResult(Intent, int)
*/
protected void startActivityForResult(Intent intent, int code) {
if (fragment == null) {
activity.startActivityForResult(intent, code);
} else {
// Otherwise, first option:
packageName = targetApplications.get(0);
fragment.startActivityForResult(intent, code);
}
Uri uri = Uri.parse("market://details?id=" + packageName);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try {
if (fragment == null) {
}
private String findTargetAppPackage(Intent intent) {
PackageManager pm = activity.getPackageManager();
List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (availableApps != null) {
for (String targetApp : targetApplications) {
if (contains(availableApps, targetApp)) {
return targetApp;
}
}
}
return null;
}
private static boolean contains(Iterable<ResolveInfo> availableApps, String targetApp) {
for (ResolveInfo availableApp : availableApps) {
String packageName = availableApp.activityInfo.packageName;
if (targetApp.equals(packageName)) {
return true;
}
}
return false;
}
private AlertDialog showDownloadDialog() {
AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);
downloadDialog.setTitle(title);
downloadDialog.setMessage(message);
downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String packageName;
if (targetApplications.contains(BS_PACKAGE)) {
// Prefer to suggest download of BS if it's anywhere in the list
packageName = BS_PACKAGE;
} else {
// Otherwise, first option:
packageName = targetApplications.get(0);
}
Uri uri = Uri.parse("market://details?id=" + packageName);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try {
if (fragment == null) {
activity.startActivity(intent);
} else {
fragment.startActivity(intent);
}
} catch (ActivityNotFoundException anfe) {
// Hmm, market is not installed
Log.w(TAG, "Google Play is not installed; cannot install " + packageName);
}
}
});
downloadDialog.setNegativeButton(buttonNo, null);
downloadDialog.setCancelable(true);
return downloadDialog.show();
}
/**
* <p>Call this from your {@link Activity}'s
* {@link Activity#onActivityResult(int, int, Intent)} method.</p>
*
* @param requestCode request code from {@code onActivityResult()}
* @param resultCode result code from {@code onActivityResult()}
* @param intent {@link Intent} from {@code onActivityResult()}
* @return null if the event handled here was not related to this class, or
* else an {@link IntentResult} containing the result of the scan. If the user cancelled scanning,
* the fields will be null.
*/
public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT");
byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES");
int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE);
Integer orientation = intentOrientation == Integer.MIN_VALUE ? null : intentOrientation;
String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL");
return new IntentResult(contents,
formatName,
rawBytes,
orientation,
errorCorrectionLevel);
}
return new IntentResult();
}
return null;
}
/**
* Defaults to type "TEXT_TYPE".
*
* @param text the text string to encode as a barcode
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise
* @see #shareText(CharSequence, CharSequence)
*/
public final AlertDialog shareText(CharSequence text) {
return shareText(text, "TEXT_TYPE");
}
/**
* Shares the given text by encoding it as a barcode, such that another user can
* scan the text off the screen of the device.
*
* @param text the text string to encode as a barcode
* @param type type of data to encode. See {@code com.google.zxing.client.android.Contents.Type} constants.
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise
*/
public final AlertDialog shareText(CharSequence text, CharSequence type) {
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setAction(BS_PACKAGE + ".ENCODE");
intent.putExtra("ENCODE_TYPE", type);
intent.putExtra("ENCODE_DATA", text);
String targetAppPackage = findTargetAppPackage(intent);
if (targetAppPackage == null) {
return showDownloadDialog();
}
intent.setPackage(targetAppPackage);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intent);
if (fragment == null) {
activity.startActivity(intent);
} else {
} else {
fragment.startActivity(intent);
}
} catch (ActivityNotFoundException anfe) {
// Hmm, market is not installed
Log.w(TAG, "Google Play is not installed; cannot install " + packageName);
}
}
});
downloadDialog.setNegativeButton(buttonNo, null);
downloadDialog.setCancelable(true);
return downloadDialog.show();
}
/**
* <p>Call this from your {@link Activity}'s
* {@link Activity#onActivityResult(int, int, Intent)} method.</p>
*
* @param requestCode request code from {@code onActivityResult()}
* @param resultCode result code from {@code onActivityResult()}
* @param intent {@link Intent} from {@code onActivityResult()}
* @return null if the event handled here was not related to this class, or
* else an {@link IntentResult} containing the result of the scan. If the user cancelled scanning,
* the fields will be null.
*/
public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT");
byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES");
int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE);
Integer orientation = intentOrientation == Integer.MIN_VALUE ? null : intentOrientation;
String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL");
return new IntentResult(contents,
formatName,
rawBytes,
orientation,
errorCorrectionLevel);
}
return new IntentResult();
return null;
}
return null;
}
/**
* Defaults to type "TEXT_TYPE".
*
* @param text the text string to encode as a barcode
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise
* @see #shareText(CharSequence, CharSequence)
*/
public final AlertDialog shareText(CharSequence text) {
return shareText(text, "TEXT_TYPE");
}
/**
* Shares the given text by encoding it as a barcode, such that another user can
* scan the text off the screen of the device.
*
* @param text the text string to encode as a barcode
* @param type type of data to encode. See {@code com.google.zxing.client.android.Contents.Type} constants.
* @return the {@link AlertDialog} that was shown to the user prompting them to download the app
* if a prompt was needed, or null otherwise
*/
public final AlertDialog shareText(CharSequence text, CharSequence type) {
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setAction(BS_PACKAGE + ".ENCODE");
intent.putExtra("ENCODE_TYPE", type);
intent.putExtra("ENCODE_DATA", text);
String targetAppPackage = findTargetAppPackage(intent);
if (targetAppPackage == null) {
return showDownloadDialog();
private static List<String> list(String... values) {
return Collections.unmodifiableList(Arrays.asList(values));
}
intent.setPackage(targetAppPackage);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
attachMoreExtras(intent);
if (fragment == null) {
activity.startActivity(intent);
} else {
fragment.startActivity(intent);
}
return null;
}
private static List<String> list(String... values) {
return Collections.unmodifiableList(Arrays.asList(values));
}
private void attachMoreExtras(Intent intent) {
for (Map.Entry<String, Object> entry : moreExtras.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// Kind of hacky
if (value instanceof Integer) {
intent.putExtra(key, (Integer) value);
} else if (value instanceof Long) {
intent.putExtra(key, (Long) value);
} else if (value instanceof Boolean) {
intent.putExtra(key, (Boolean) value);
} else if (value instanceof Double) {
intent.putExtra(key, (Double) value);
} else if (value instanceof Float) {
intent.putExtra(key, (Float) value);
} else if (value instanceof Bundle) {
intent.putExtra(key, (Bundle) value);
} else {
intent.putExtra(key, value.toString());
}
private void attachMoreExtras(Intent intent) {
for (Map.Entry<String, Object> entry : moreExtras.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// Kind of hacky
if (value instanceof Integer) {
intent.putExtra(key, (Integer) value);
} else if (value instanceof Long) {
intent.putExtra(key, (Long) value);
} else if (value instanceof Boolean) {
intent.putExtra(key, (Boolean) value);
} else if (value instanceof Double) {
intent.putExtra(key, (Double) value);
} else if (value instanceof Float) {
intent.putExtra(key, (Float) value);
} else if (value instanceof Bundle) {
intent.putExtra(key, (Bundle) value);
} else {
intent.putExtra(key, value.toString());
}
}
}
}
}

View File

@ -23,67 +23,67 @@ package com.google.zxing.integration.android;
*/
public final class IntentResult {
private final String contents;
private final String formatName;
private final byte[] rawBytes;
private final Integer orientation;
private final String errorCorrectionLevel;
private final String contents;
private final String formatName;
private final byte[] rawBytes;
private final Integer orientation;
private final String errorCorrectionLevel;
IntentResult() {
this(null, null, null, null, null);
}
IntentResult() {
this(null, null, null, null, null);
}
IntentResult(String contents,
String formatName,
byte[] rawBytes,
Integer orientation,
String errorCorrectionLevel) {
this.contents = contents;
this.formatName = formatName;
this.rawBytes = rawBytes;
this.orientation = orientation;
this.errorCorrectionLevel = errorCorrectionLevel;
}
IntentResult(String contents,
String formatName,
byte[] rawBytes,
Integer orientation,
String errorCorrectionLevel) {
this.contents = contents;
this.formatName = formatName;
this.rawBytes = rawBytes;
this.orientation = orientation;
this.errorCorrectionLevel = errorCorrectionLevel;
}
/**
* @return raw content of barcode
*/
public String getContents() {
return contents;
}
/**
* @return raw content of barcode
*/
public String getContents() {
return contents;
}
/**
* @return name of format, like "QR_CODE", "UPC_A". See {@code BarcodeFormat} for more format names.
*/
public String getFormatName() {
return formatName;
}
/**
* @return name of format, like "QR_CODE", "UPC_A". See {@code BarcodeFormat} for more format names.
*/
public String getFormatName() {
return formatName;
}
/**
* @return raw bytes of the barcode content, if applicable, or null otherwise
*/
public byte[] getRawBytes() {
return rawBytes;
}
/**
* @return raw bytes of the barcode content, if applicable, or null otherwise
*/
public byte[] getRawBytes() {
return rawBytes;
}
/**
* @return rotation of the image, in degrees, which resulted in a successful scan. May be null.
*/
public Integer getOrientation() {
return orientation;
}
/**
* @return rotation of the image, in degrees, which resulted in a successful scan. May be null.
*/
public Integer getOrientation() {
return orientation;
}
/**
* @return name of the error correction level used in the barcode, if applicable
*/
public String getErrorCorrectionLevel() {
return errorCorrectionLevel;
}
/**
* @return name of the error correction level used in the barcode, if applicable
*/
public String getErrorCorrectionLevel() {
return errorCorrectionLevel;
}
@Override
public String toString() {
int rawBytesLength = rawBytes == null ? 0 : rawBytes.length;
return "Format: " + formatName + '\n' + "Contents: " + contents + '\n' + "Raw bytes: (" + rawBytesLength + " bytes)\n" + "Orientation: " + orientation + '\n' + "EC level: " + errorCorrectionLevel + '\n';
}
@Override
public String toString() {
int rawBytesLength = rawBytes == null ? 0 : rawBytes.length;
return "Format: " + formatName + '\n' + "Contents: " + contents + '\n' + "Raw bytes: (" + rawBytesLength + " bytes)\n" + "Orientation: " + orientation + '\n' + "EC level: " + errorCorrectionLevel + '\n';
}
}

View File

@ -769,57 +769,57 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A
switch (item.getItemId()) {
case android.R.id.home:
if (getIntent().hasExtra(EXTRA_HINT_SEARCHING)) {
finish();
} else {
navigateUp();
}
return true;
case android.R.id.home:
if (getIntent().hasExtra(EXTRA_HINT_SEARCHING)) {
finish();
} else {
navigateUp();
}
return true;
case LAUNCH:
launchApk(app.id);
return true;
case LAUNCH:
launchApk(app.id);
return true;
case SHARE:
shareApp(app);
return true;
case SHARE:
shareApp(app);
return true;
case INSTALL:
// Note that this handles updating as well as installing.
if (app.suggestedVercode > 0) {
final Apk apkToInstall = ApkProvider.Helper.find(this, app.id, app.suggestedVercode);
install(apkToInstall);
}
return true;
case INSTALL:
// Note that this handles updating as well as installing.
if (app.suggestedVercode > 0) {
final Apk apkToInstall = ApkProvider.Helper.find(this, app.id, app.suggestedVercode);
install(apkToInstall);
}
return true;
case UNINSTALL:
removeApk(app.id);
return true;
case UNINSTALL:
removeApk(app.id);
return true;
case IGNOREALL:
app.ignoreAllUpdates ^= true;
item.setChecked(app.ignoreAllUpdates);
return true;
case IGNOREALL:
app.ignoreAllUpdates ^= true;
item.setChecked(app.ignoreAllUpdates);
return true;
case IGNORETHIS:
if (app.ignoreThisUpdate >= app.suggestedVercode)
app.ignoreThisUpdate = 0;
else
app.ignoreThisUpdate = app.suggestedVercode;
item.setChecked(app.ignoreThisUpdate > 0);
return true;
case IGNORETHIS:
if (app.ignoreThisUpdate >= app.suggestedVercode)
app.ignoreThisUpdate = 0;
else
app.ignoreThisUpdate = app.suggestedVercode;
item.setChecked(app.ignoreThisUpdate > 0);
return true;
case SEND_VIA_BLUETOOTH:
/*
* If Bluetooth has not been enabled/turned on, then
* enabling device discoverability will automatically enable Bluetooth
*/
Intent discoverBt = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverBt.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 121);
startActivityForResult(discoverBt, REQUEST_ENABLE_BLUETOOTH);
// if this is successful, the Bluetooth transfer is started
return true;
case SEND_VIA_BLUETOOTH:
/*
* If Bluetooth has not been enabled/turned on, then
* enabling device discoverability will automatically enable Bluetooth
*/
Intent discoverBt = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverBt.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 121);
startActivityForResult(discoverBt, REQUEST_ENABLE_BLUETOOTH);
// if this is successful, the Bluetooth transfer is started
return true;
}
return super.onOptionsItemSelected(item);
@ -937,19 +937,19 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A
if (operation == InstallerCallback.OPERATION_INSTALL) {
title = R.string.install_error_title;
switch (errorCode) {
case ERROR_CODE_CANNOT_PARSE:
body = R.string.install_error_cannot_parse;
break;
default: // ERROR_CODE_OTHER
body = R.string.install_error_unknown;
break;
case ERROR_CODE_CANNOT_PARSE:
body = R.string.install_error_cannot_parse;
break;
default: // ERROR_CODE_OTHER
body = R.string.install_error_unknown;
break;
}
} else { // InstallerCallback.OPERATION_DELETE
title = R.string.uninstall_error_title;
switch (errorCode) {
default: // ERROR_CODE_OTHER
body = R.string.uninstall_error_unknown;
break;
default: // ERROR_CODE_OTHER
body = R.string.uninstall_error_unknown;
break;
}
}
runOnUiThread(new Runnable() {
@ -1000,21 +1000,21 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A
boolean finished = false;
switch (event.type) {
case ApkDownloader.EVENT_ERROR:
final int res;
if (event.getData().getInt(ApkDownloader.EVENT_DATA_ERROR_TYPE) == ApkDownloader.ERROR_HASH_MISMATCH)
res = R.string.corrupt_download;
else
res = R.string.details_notinstalled;
// this must be on the main UI thread
Toast.makeText(this, res, Toast.LENGTH_LONG).show();
cleanUpFinishedDownload();
finished = true;
break;
case ApkDownloader.EVENT_APK_DOWNLOAD_COMPLETE:
downloadCompleteInstallApk();
finished = true;
break;
case ApkDownloader.EVENT_ERROR:
final int res;
if (event.getData().getInt(ApkDownloader.EVENT_DATA_ERROR_TYPE) == ApkDownloader.ERROR_HASH_MISMATCH)
res = R.string.corrupt_download;
else
res = R.string.details_notinstalled;
// this must be on the main UI thread
Toast.makeText(this, res, Toast.LENGTH_LONG).show();
cleanUpFinishedDownload();
finished = true;
break;
case ApkDownloader.EVENT_APK_DOWNLOAD_COMPLETE:
downloadCompleteInstallApk();
finished = true;
break;
}
if (finished) {
@ -1032,9 +1032,9 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A
}
switch (requestCode) {
case REQUEST_ENABLE_BLUETOOTH:
fdroidApp.sendViaBluetooth(this, resultCode, app.id);
break;
case REQUEST_ENABLE_BLUETOOTH:
fdroidApp.sendViaBluetooth(this, resultCode, app.id);
break;
}
}
@ -1381,18 +1381,18 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A
private String descAntiFeature(String af) {
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);
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

@ -130,43 +130,43 @@ public class FDroid extends ActionBarActivity {
return;
}
switch (host) {
case "f-droid.org":
// http://f-droid.org/app/app.id
if (path.startsWith("/repository/browse")) {
// http://f-droid.org/repository/browse?fdid=app.id
appId = data.getQueryParameter("fdid");
} else if (path.startsWith("/app")) {
appId = data.getLastPathSegment();
if (appId != null && appId.equals("app")) {
appId = null;
case "f-droid.org":
// http://f-droid.org/app/app.id
if (path.startsWith("/repository/browse")) {
// http://f-droid.org/repository/browse?fdid=app.id
appId = data.getQueryParameter("fdid");
} else if (path.startsWith("/app")) {
appId = data.getLastPathSegment();
if (appId != null && appId.equals("app")) {
appId = null;
}
}
}
break;
case "details":
// market://details?id=app.id
appId = data.getQueryParameter("id");
break;
case "search":
// market://search?q=query
query = data.getQueryParameter("q");
break;
case "play.google.com":
if (path.startsWith("/store/apps/details")) {
// http://play.google.com/store/apps/details?id=app.id
break;
case "details":
// market://details?id=app.id
appId = data.getQueryParameter("id");
} else if (path.startsWith("/store/search")) {
// http://play.google.com/store/search?q=foo
break;
case "search":
// market://search?q=query
query = data.getQueryParameter("q");
}
break;
case "apps":
case "amazon.com":
case "www.amazon.com":
// amzn://apps/android?p=app.id
// http://amazon.com/gp/mas/dl/android?p=app.id
appId = data.getQueryParameter("p");
query = data.getQueryParameter("s");
break;
break;
case "play.google.com":
if (path.startsWith("/store/apps/details")) {
// http://play.google.com/store/apps/details?id=app.id
appId = data.getQueryParameter("id");
} else if (path.startsWith("/store/search")) {
// http://play.google.com/store/search?q=foo
query = data.getQueryParameter("q");
}
break;
case "apps":
case "amazon.com":
case "www.amazon.com":
// amzn://apps/android?p=app.id
// http://amazon.com/gp/mas/dl/android?p=app.id
appId = data.getQueryParameter("p");
query = data.getQueryParameter("s");
break;
}
} else if (scheme.equals("fdroid.app")) {
// fdroid.app:app.id
@ -247,57 +247,57 @@ public class FDroid extends ActionBarActivity {
switch (item.getItemId()) {
case R.id.action_update_repo:
UpdateService.updateNow(this);
return true;
case R.id.action_update_repo:
UpdateService.updateNow(this);
return true;
case R.id.action_manage_repos:
startActivity(new Intent(this, ManageReposActivity.class));
return true;
case R.id.action_manage_repos:
startActivity(new Intent(this, ManageReposActivity.class));
return true;
case R.id.action_settings:
Intent prefs = new Intent(getBaseContext(), PreferencesActivity.class);
startActivityForResult(prefs, REQUEST_PREFS);
return true;
case R.id.action_settings:
Intent prefs = new Intent(getBaseContext(), PreferencesActivity.class);
startActivityForResult(prefs, REQUEST_PREFS);
return true;
case R.id.action_swap:
startActivity(new Intent(this, SwapWorkflowActivity.class));
return true;
case R.id.action_swap:
startActivity(new Intent(this, SwapWorkflowActivity.class));
return true;
case R.id.action_search:
onSearchRequested();
return true;
case R.id.action_search:
onSearchRequested();
return true;
case R.id.action_bluetooth_apk:
/*
* If Bluetooth has not been enabled/turned on, then enabling
* device discoverability will automatically enable Bluetooth
*/
Intent discoverBt = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverBt.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 121);
startActivityForResult(discoverBt, REQUEST_ENABLE_BLUETOOTH);
// if this is successful, the Bluetooth transfer is started
return true;
case R.id.action_bluetooth_apk:
/*
* If Bluetooth has not been enabled/turned on, then enabling
* device discoverability will automatically enable Bluetooth
*/
Intent discoverBt = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverBt.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 121);
startActivityForResult(discoverBt, REQUEST_ENABLE_BLUETOOTH);
// if this is successful, the Bluetooth transfer is started
return true;
case R.id.action_about:
View view = LayoutInflater.from(this).inflate(R.layout.about, null);
case R.id.action_about:
View view = LayoutInflater.from(this).inflate(R.layout.about, null);
String versionName = Utils.getVersionName(this);
if (versionName == null) {
versionName = getString(R.string.unknown);
}
((TextView) view.findViewById(R.id.version)).setText(versionName);
String versionName = Utils.getVersionName(this);
if (versionName == null) {
versionName = getString(R.string.unknown);
}
((TextView) view.findViewById(R.id.version)).setText(versionName);
AlertDialog alrt = new AlertDialog.Builder(this).setView(view).create();
alrt.setTitle(R.string.about_title);
alrt.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
}
});
alrt.show();
return true;
AlertDialog alrt = new AlertDialog.Builder(this).setView(view).create();
alrt.setTitle(R.string.about_title);
alrt.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
}
});
alrt.show();
return true;
}
return super.onOptionsItemSelected(item);
}
@ -306,25 +306,25 @@ public class FDroid extends ActionBarActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_PREFS:
// The automatic update settings may have changed, so reschedule (or
// unschedule) the service accordingly. It's cheap, so no need to
// check if the particular setting has actually been changed.
UpdateService.schedule(getBaseContext());
case REQUEST_PREFS:
// The automatic update settings may have changed, so reschedule (or
// unschedule) the service accordingly. It's cheap, so no need to
// check if the particular setting has actually been changed.
UpdateService.schedule(getBaseContext());
if ((resultCode & PreferencesActivity.RESULT_RESTART) != 0) {
((FDroidApp) getApplication()).reloadTheme();
final Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
break;
case REQUEST_ENABLE_BLUETOOTH:
fdroidApp.sendViaBluetooth(this, resultCode, "org.fdroid.fdroid");
break;
if ((resultCode & PreferencesActivity.RESULT_RESTART) != 0) {
((FDroidApp) getApplication()).reloadTheme();
final Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
break;
case REQUEST_ENABLE_BLUETOOTH:
fdroidApp.sendViaBluetooth(this, resultCode, "org.fdroid.fdroid");
break;
}
}

View File

@ -101,7 +101,7 @@ public class FDroidApp extends Application {
}
public void applyTheme(Activity activity) {
activity.setTheme(getCurThemeResId());
activity.setTheme(getCurThemeResId());
}
public static Theme getCurTheme() {
@ -253,18 +253,18 @@ public class FDroidApp extends Application {
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.imageDownloader(new IconDownloader(getApplicationContext()))
.diskCache(new LimitedAgeDiskCache(
new File(StorageUtils.getCacheDirectory(getApplicationContext(), true),
"icons"),
null,
new FileNameGenerator() {
@Override
public String generate(String imageUri) {
return imageUri.substring(
imageUri.lastIndexOf('/') + 1);
} },
// 30 days in secs: 30*24*60*60 = 2592000
2592000)
)
new File(StorageUtils.getCacheDirectory(getApplicationContext(), true),
"icons"),
null,
new FileNameGenerator() {
@Override
public String generate(String imageUri) {
return imageUri.substring(
imageUri.lastIndexOf('/') + 1);
} },
// 30 days in secs: 30*24*60*60 = 2592000
2592000)
)
.threadPoolSize(4)
.threadPriority(Thread.NORM_PRIORITY - 2) // Default is NORM_PRIORITY - 1
.build();

View File

@ -25,36 +25,36 @@ import java.util.List;
public class FDroidCertPins {
public static final String[] DEFAULT_PINS = {
// OU=PositiveSSL, CN=f-droid.org
// Fingerprint: 84B91CDF2312CB9BA7F3BE803783302F8D8C299F
"638F93856E1F5EDFCBD40C46D4160CFF21B0713A",
// OU=PositiveSSL, CN=f-droid.org
// Fingerprint: 84B91CDF2312CB9BA7F3BE803783302F8D8C299F
"638F93856E1F5EDFCBD40C46D4160CFF21B0713A",
// OU=PositiveSSL, CN=f-droid.org
"83a288fdbf7fb27ca2268d553168eb8f38298910",
// OU=PositiveSSL, CN=f-droid.org
"83a288fdbf7fb27ca2268d553168eb8f38298910",
// OU=Gandi Standard SSL, CN=guardianproject.info
"cf2f8e226027599a1a933701418c58ec688a8305",
// OU=Gandi Standard SSL, CN=guardianproject.info
"cf2f8e226027599a1a933701418c58ec688a8305",
// C=US, ST=Washington, L=Seattle, O=Amazon.com Inc., CN=s3.amazonaws.com
"5e77905babb66ca7082979435afbe4edf3f5af12",
// C=US, ST=Washington, L=Seattle, O=Amazon.com Inc., CN=s3.amazonaws.com
"5e77905babb66ca7082979435afbe4edf3f5af12",
// OU=Domain Control Validated - RapidSSL(R), CN=www.psiphon.ca
"3aa1726e64d54bf58bf68fe23208928fd0d9cf8a",
// OU=Domain Control Validated - RapidSSL(R), CN=www.psiphon.ca
"3aa1726e64d54bf58bf68fe23208928fd0d9cf8a",
// OU=EssentialSSL Wildcard, CN=*.panicbutton.io
"cdae8cc70af09a55a7642d13f84241cba1c3a3e6",
// OU=EssentialSSL Wildcard, CN=*.panicbutton.io
"cdae8cc70af09a55a7642d13f84241cba1c3a3e6",
// C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority
// https://cert.startcom.org/
"234b71255613e130dde34269c9cc30d46f0841e0",
// C=IL, O=StartCom Ltd., OU=Secure Digital Certificate Signing, CN=StartCom Certification Authority
// https://cert.startcom.org/
"234b71255613e130dde34269c9cc30d46f0841e0",
// C=US, O=Internet Security Research Group, CN=ISRG Root X1
// https://letsencrypt.org
"f816513cfd1b449f2e6b28a197221fb81f514e3c",
// C=US, O=Internet Security Research Group, CN=ISRG Root X1
// https://letsencrypt.org
"f816513cfd1b449f2e6b28a197221fb81f514e3c",
// C=US, O=IdenTrust, CN=IdenTrust Commercial Root CA 1
// cross-signer for https://letsencrypt.org
"87e3bf322427c1405d2736c381e01d1a71d4a039",
// C=US, O=IdenTrust, CN=IdenTrust Commercial Root CA 1
// cross-signer for https://letsencrypt.org
"87e3bf322427c1405d2736c381e01d1a71d4a039",
};
public static List<String> PINLIST = null;

View File

@ -256,35 +256,35 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
uninitialize(key);
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_NAME:
for (ChangeListener listener : localRepoNameListeners) {
listener.onPreferenceChange();
}
break;
case PREF_LOCAL_REPO_HTTPS:
for (ChangeListener listener : localRepoHttpsListeners) {
listener.onPreferenceChange();
}
case PREF_UNSTABLE_UPDATES:
for (ChangeListener listener : unstableUpdatesListeners) {
listener.onPreferenceChange();
}
break;
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_NAME:
for (ChangeListener listener : localRepoNameListeners) {
listener.onPreferenceChange();
}
break;
case PREF_LOCAL_REPO_HTTPS:
for (ChangeListener listener : localRepoHttpsListeners) {
listener.onPreferenceChange();
}
case PREF_UNSTABLE_UPDATES:
for (ChangeListener listener : unstableUpdatesListeners) {
listener.onPreferenceChange();
}
break;
}
}

View File

@ -64,9 +64,9 @@ public class PreferencesActivity extends ActionBarActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}

View File

@ -228,7 +228,7 @@ public class RepoUpdater {
private ContentValues values;
public void rememberUpdate() {
RepoProvider.Helper.update(context, repo, values);
RepoProvider.Helper.update(context, repo, values);
}
}

View File

@ -109,123 +109,123 @@ public class RepoXMLHandler extends DefaultHandler {
final String str = curchars.toString().trim();
if (curapk != null) {
switch (localName) {
case "version":
curapk.version = str;
break;
case "versioncode":
curapk.vercode = Utils.parseInt(str, -1);
break;
case "size":
curapk.size = Utils.parseInt(str, 0);
break;
case "hash":
if (hashType == null || hashType.equals("md5")) {
if (curapk.hash == null) {
case "version":
curapk.version = str;
break;
case "versioncode":
curapk.vercode = Utils.parseInt(str, -1);
break;
case "size":
curapk.size = Utils.parseInt(str, 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 = "MD5";
curapk.hashType = "SHA-256";
}
} 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":
curapk.minSdkVersion = Utils.parseInt(str, 0);
break;
case "maxsdkver":
curapk.maxSdkVersion = Utils.parseInt(str, 0);
break;
case "added":
curapk.added = Utils.parseDate(str, 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;
break;
case "sig":
curapk.sig = str;
break;
case "srcname":
curapk.srcname = str;
break;
case "apkname":
curapk.apkName = str;
break;
case "sdkver":
curapk.minSdkVersion = Utils.parseInt(str, 0);
break;
case "maxsdkver":
curapk.maxSdkVersion = Utils.parseInt(str, 0);
break;
case "added":
curapk.added = Utils.parseDate(str, 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) {
switch (localName) {
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 "changelog":
curapp.changelogURL = str;
break;
case "donate":
curapp.donateURL = str;
break;
case "bitcoin":
curapp.bitcoinAddr = str;
break;
case "litecoin":
curapp.litecoinAddr = str;
break;
case "flattr":
curapp.flattrID = str;
break;
case "web":
curapp.webURL = str;
break;
case "tracker":
curapp.trackerURL = str;
break;
case "added":
curapp.added = Utils.parseDate(str, null);
break;
case "lastupdated":
curapp.lastUpdated = Utils.parseDate(str, null);
break;
case "marketversion":
curapp.upstreamVersion = str;
break;
case "marketvercode":
curapp.upstreamVercode = Utils.parseInt(str, -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;
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 "changelog":
curapp.changelogURL = str;
break;
case "donate":
curapp.donateURL = str;
break;
case "bitcoin":
curapp.bitcoinAddr = str;
break;
case "litecoin":
curapp.litecoinAddr = str;
break;
case "flattr":
curapp.flattrID = str;
break;
case "web":
curapp.webURL = str;
break;
case "tracker":
curapp.trackerURL = str;
break;
case "added":
curapp.added = Utils.parseDate(str, null);
break;
case "lastupdated":
curapp.lastUpdated = Utils.parseDate(str, null);
break;
case "marketversion":
curapp.upstreamVersion = str;
break;
case "marketvercode":
curapp.upstreamVercode = Utils.parseInt(str, -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 (localName.equals("description")) {
description = cleanWhiteSpace(str);

View File

@ -86,13 +86,13 @@ public class SearchResults extends ActionBarActivity {
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case SEARCH:
onSearchRequested();
return true;
case SEARCH:
onSearchRequested();
return true;
}
return super.onOptionsItemSelected(item);

View File

@ -643,9 +643,9 @@ public class UpdateService extends IntentService implements ProgressListener {
*/
private List<Apk> getKnownApks(List<Apk> apks) {
final String[] fields = {
ApkProvider.DataColumns.APK_ID,
ApkProvider.DataColumns.VERSION,
ApkProvider.DataColumns.VERSION_CODE
ApkProvider.DataColumns.APK_ID,
ApkProvider.DataColumns.VERSION,
ApkProvider.DataColumns.VERSION_CODE
};
return ApkProvider.Helper.knownApks(this, apks, fields);
}

View File

@ -83,7 +83,7 @@ public final class Utils {
new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss", Locale.ENGLISH);
private static final String[] FRIENDLY_SIZE_FORMAT = {
"%.0f B", "%.0f KiB", "%.1f MiB", "%.2f GiB" };
"%.0f B", "%.0f KiB", "%.1f MiB", "%.2f GiB" };
public static final String FALLBACK_ICONS_DIR = "/icons/";
@ -611,30 +611,30 @@ public final class Utils {
public void handleTag(boolean opening, String tag, Editable output,
XMLReader reader) {
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• ");
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;
break;
}
}
}

View File

@ -60,66 +60,66 @@ public class Apk extends ValueObject implements Comparable<Apk> {
for (int i = 0; i < cursor.getColumnCount(); 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 = Utils.parseDate(cursor.getString(i), null);
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;
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 = Utils.parseDate(cursor.getString(i), null);
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

@ -389,28 +389,28 @@ public class ApkProvider extends FDroidProvider {
QuerySelection query = new QuerySelection(selection, selectionArgs);
switch (matcher.match(uri)) {
case CODE_LIST:
break;
case CODE_LIST:
break;
case CODE_SINGLE:
query = query.add(querySingle(uri));
break;
case CODE_SINGLE:
query = query.add(querySingle(uri));
break;
case CODE_APP:
query = query.add(queryApp(uri.getLastPathSegment()));
break;
case CODE_APP:
query = query.add(queryApp(uri.getLastPathSegment()));
break;
case CODE_APKS:
query = query.add(queryApks(uri.getLastPathSegment()));
break;
case CODE_APKS:
query = query.add(queryApks(uri.getLastPathSegment()));
break;
case CODE_REPO:
query = query.add(queryRepo(Long.parseLong(uri.getLastPathSegment())));
break;
case CODE_REPO:
query = query.add(queryRepo(Long.parseLong(uri.getLastPathSegment())));
break;
default:
Log.e(TAG, "Invalid URI for apk content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for apk content provider: " + uri);
default:
Log.e(TAG, "Invalid URI for apk content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for apk content provider: " + uri);
}
Query queryBuilder = new Query();
@ -458,27 +458,27 @@ public class ApkProvider extends FDroidProvider {
switch (matcher.match(uri)) {
case CODE_REPO:
query = query.add(queryRepo(Long.parseLong(uri.getLastPathSegment())));
break;
case CODE_REPO:
query = query.add(queryRepo(Long.parseLong(uri.getLastPathSegment())));
break;
case CODE_APP:
query = query.add(queryApp(uri.getLastPathSegment()));
break;
case CODE_APP:
query = query.add(queryApp(uri.getLastPathSegment()));
break;
case CODE_APKS:
query = query.add(queryApks(uri.getLastPathSegment()));
break;
case CODE_APKS:
query = query.add(queryApks(uri.getLastPathSegment()));
break;
case CODE_LIST:
throw new UnsupportedOperationException("Can't delete all apks.");
case CODE_LIST:
throw new UnsupportedOperationException("Can't delete all apks.");
case CODE_SINGLE:
throw new UnsupportedOperationException("Can't delete individual apks.");
case CODE_SINGLE:
throw new UnsupportedOperationException("Can't delete individual apks.");
default:
Log.e(TAG, "Invalid URI for apk content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for apk content provider: " + uri);
default:
Log.e(TAG, "Invalid URI for apk content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for apk content provider: " + uri);
}
int rowsAffected = write().delete(getTableName(), query.getSelection(), query.getArgs());

View File

@ -119,100 +119,100 @@ public class App extends ValueObject implements Comparable<App> {
for (int i = 0; i < cursor.getColumnCount(); i++) {
String n = cursor.getColumnName(i);
switch (n) {
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.CHANGELOG_URL:
changelogURL = 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.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 = Utils.parseDate(cursor.getString(i), null);
break;
case AppProvider.DataColumns.LAST_UPDATED:
lastUpdated = Utils.parseDate(cursor.getString(i), null);
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.ICON_URL_LARGE:
iconUrlLarge = 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;
case "_id":
break;
default:
Log.e(TAG, "Unknown column name " + n);
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.CHANGELOG_URL:
changelogURL = 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.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 = Utils.parseDate(cursor.getString(i), null);
break;
case AppProvider.DataColumns.LAST_UPDATED:
lastUpdated = Utils.parseDate(cursor.getString(i), null);
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.ICON_URL_LARGE:
iconUrlLarge = 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;
case "_id":
break;
default:
Log.e(TAG, "Unknown column name " + n);
}
}
}

View File

@ -212,14 +212,14 @@ public class AppProvider extends FDroidProvider {
}
String[] ALL = {
_ID, IS_COMPATIBLE, APP_ID, NAME, SUMMARY, ICON, DESCRIPTION,
LICENSE, WEB_URL, TRACKER_URL, SOURCE_URL, CHANGELOG_URL, DONATE_URL,
BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID,
UPSTREAM_VERSION, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES,
IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE,
SUGGESTED_VERSION_CODE, SuggestedApk.VERSION,
InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME
_ID, IS_COMPATIBLE, APP_ID, NAME, SUMMARY, ICON, DESCRIPTION,
LICENSE, WEB_URL, TRACKER_URL, SOURCE_URL, CHANGELOG_URL, DONATE_URL,
BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID,
UPSTREAM_VERSION, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES,
IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE,
SUGGESTED_VERSION_CODE, SuggestedApk.VERSION,
InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME
};
}
@ -345,24 +345,24 @@ public class AppProvider extends FDroidProvider {
@Override
public void addField(String field) {
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;
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;
}
}
@ -655,10 +655,10 @@ public class AppProvider extends FDroidProvider {
" fdroid_app.categories LIKE ? OR " + // Last category e.g. "%,internet"
" fdroid_app.categories LIKE ? "; // One of many categories e.g. "%,internet,%"
final String[] args = {
category,
category + ",%",
"%," + category,
"%," + category + ",%",
category,
category + ",%",
"%," + category,
"%," + category + ",%",
};
return new AppQuerySelection(selection, args);
}
@ -682,70 +682,70 @@ public class AppProvider extends FDroidProvider {
boolean includeSwap = true;
switch (matcher.match(uri)) {
case CODE_LIST:
includeSwap = false;
break;
case CODE_LIST:
includeSwap = false;
break;
case CODE_SINGLE:
selection = selection.add(querySingle(uri.getLastPathSegment()));
break;
case CODE_SINGLE:
selection = selection.add(querySingle(uri.getLastPathSegment()));
break;
case CAN_UPDATE:
selection = selection.add(queryCanUpdate());
includeSwap = false;
break;
case CAN_UPDATE:
selection = selection.add(queryCanUpdate());
includeSwap = false;
break;
case REPO:
selection = selection.add(queryRepo(Long.parseLong(uri.getLastPathSegment())));
break;
case REPO:
selection = selection.add(queryRepo(Long.parseLong(uri.getLastPathSegment())));
break;
case INSTALLED:
selection = selection.add(queryInstalled());
includeSwap = false;
break;
case INSTALLED:
selection = selection.add(queryInstalled());
includeSwap = false;
break;
case SEARCH:
selection = selection.add(querySearch(uri.getLastPathSegment()));
includeSwap = false;
break;
case SEARCH:
selection = selection.add(querySearch(uri.getLastPathSegment()));
includeSwap = false;
break;
case SEARCH_REPO:
selection = selection.add(querySearch(uri.getPathSegments().get(2)));
selection = selection.add(queryRepo(Long.parseLong(uri.getPathSegments().get(1))));
break;
case SEARCH_REPO:
selection = selection.add(querySearch(uri.getPathSegments().get(2)));
selection = selection.add(queryRepo(Long.parseLong(uri.getPathSegments().get(1))));
break;
case NO_APKS:
selection = selection.add(queryNoApks());
break;
case NO_APKS:
selection = selection.add(queryNoApks());
break;
case APPS:
selection = selection.add(queryApps(uri.getLastPathSegment()));
break;
case APPS:
selection = selection.add(queryApps(uri.getLastPathSegment()));
break;
case IGNORED:
selection = selection.add(queryIgnored());
break;
case IGNORED:
selection = selection.add(queryIgnored());
break;
case CATEGORY:
selection = selection.add(queryCategory(uri.getLastPathSegment()));
includeSwap = false;
break;
case CATEGORY:
selection = selection.add(queryCategory(uri.getLastPathSegment()));
includeSwap = false;
break;
case RECENTLY_UPDATED:
sortOrder = " fdroid_app.lastUpdated DESC";
selection = selection.add(queryRecentlyUpdated());
includeSwap = false;
break;
case RECENTLY_UPDATED:
sortOrder = " fdroid_app.lastUpdated DESC";
selection = selection.add(queryRecentlyUpdated());
includeSwap = false;
break;
case NEWLY_ADDED:
sortOrder = " fdroid_app.added DESC";
selection = selection.add(queryNewlyAdded());
includeSwap = false;
break;
case NEWLY_ADDED:
sortOrder = " fdroid_app.added DESC";
selection = selection.add(queryNewlyAdded());
includeSwap = false;
break;
default:
Log.e(TAG, "Invalid URI for app content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for app content provider: " + uri);
default:
Log.e(TAG, "Invalid URI for app content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for app content provider: " + uri);
}
if (!includeSwap) {
@ -773,12 +773,12 @@ public class AppProvider extends FDroidProvider {
QuerySelection query = new QuerySelection(where, whereArgs);
switch (matcher.match(uri)) {
case NO_APKS:
query = query.add(queryNoApks());
break;
case NO_APKS:
query = query.add(queryNoApks());
break;
default:
throw new UnsupportedOperationException("Delete not supported for " + uri + ".");
default:
throw new UnsupportedOperationException("Delete not supported for " + uri + ".");
}
@ -801,16 +801,16 @@ public class AppProvider extends FDroidProvider {
QuerySelection query = new QuerySelection(where, whereArgs);
switch (matcher.match(uri)) {
case CALC_APP_DETAILS_FROM_INDEX:
updateAppDetails();
return 0;
case CALC_APP_DETAILS_FROM_INDEX:
updateAppDetails();
return 0;
case CODE_SINGLE:
query = query.add(querySingle(uri.getLastPathSegment()));
break;
case CODE_SINGLE:
query = query.add(querySingle(uri.getLastPathSegment()));
break;
default:
throw new UnsupportedOperationException("Update not supported for " + uri + ".");
default:
throw new UnsupportedOperationException("Update not supported for " + uri + ".");
}
int count = write().update(getTableName(), values, query.getSelection(), query.getArgs());

View File

@ -86,13 +86,13 @@ public abstract class FDroidProvider extends ContentProvider {
public String getType(Uri uri) {
String type;
switch (getMatcher().match(uri)) {
case CODE_LIST:
type = "dir";
break;
case CODE_SINGLE:
default:
type = "item";
break;
case CODE_LIST:
type = "dir";
break;
case CODE_SINGLE:
default:
type = "item";
break;
}
return "vnd.android.cursor." + type + "/vnd." + AUTHORITY + "." + getProviderName();
}

View File

@ -61,7 +61,7 @@ public class InstalledAppProvider extends FDroidProvider {
String APPLICATION_LABEL = "applicationLabel";
String[] ALL = {
_ID, APP_ID, VERSION_CODE, VERSION_NAME, APPLICATION_LABEL,
_ID, APP_ID, VERSION_CODE, VERSION_NAME, APPLICATION_LABEL,
};
}
@ -142,21 +142,21 @@ public class InstalledAppProvider extends FDroidProvider {
QuerySelection selection = new QuerySelection(customSelection, selectionArgs);
switch (matcher.match(uri)) {
case CODE_LIST:
break;
case CODE_LIST:
break;
case CODE_SINGLE:
selection = selection.add(queryApp(uri.getLastPathSegment()));
break;
case CODE_SINGLE:
selection = selection.add(queryApp(uri.getLastPathSegment()));
break;
case CODE_SEARCH:
selection = selection.add(querySearch(uri.getLastPathSegment()));
break;
case CODE_SEARCH:
selection = selection.add(querySearch(uri.getLastPathSegment()));
break;
default:
String message = "Invalid URI for installed app content provider: " + uri;
Log.e(TAG, message);
throw new UnsupportedOperationException(message);
default:
String message = "Invalid URI for installed app content provider: " + uri;
Log.e(TAG, message);
throw new UnsupportedOperationException(message);
}
Cursor cursor = read().query(getTableName(), projection, selection.getSelection(), selection.getArgs(), null, null, sortOrder);

View File

@ -46,45 +46,45 @@ public class Repo extends ValueObject {
for (int i = 0; i < cursor.getColumnCount(); i++) {
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 = Utils.parseTime(cursor.getString(i), null);
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;
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 = Utils.parseTime(cursor.getString(i), null);
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

@ -281,22 +281,22 @@ public class RepoProvider extends FDroidProvider {
}
switch (matcher.match(uri)) {
case CODE_LIST:
// Do nothing (don't restrict query)
break;
case CODE_LIST:
// Do nothing (don't restrict query)
break;
case CODE_SINGLE:
selection = (selection == null ? "" : selection + " AND ") +
case CODE_SINGLE:
selection = (selection == null ? "" : selection + " AND ") +
DataColumns._ID + " = " + uri.getLastPathSegment();
break;
break;
case CODE_ALL_EXCEPT_SWAP:
selection = DataColumns.IS_SWAP + " = 0 OR " + DataColumns.IS_SWAP + " IS NULL ";
break;
case CODE_ALL_EXCEPT_SWAP:
selection = DataColumns.IS_SWAP + " = 0 OR " + DataColumns.IS_SWAP + " IS NULL ";
break;
default:
Log.e(TAG, "Invalid URI for repo content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for repo content provider: " + uri);
default:
Log.e(TAG, "Invalid URI for repo content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for repo content provider: " + uri);
}
Cursor cursor = read().query(getTableName(), projection, selection,
@ -346,18 +346,18 @@ public class RepoProvider extends FDroidProvider {
public int delete(Uri uri, String where, String[] whereArgs) {
switch (matcher.match(uri)) {
case CODE_LIST:
// Don't support deleting of multiple repos.
return 0;
case CODE_LIST:
// Don't support deleting of multiple repos.
return 0;
case CODE_SINGLE:
where = (where == null ? "" : where + " AND ") +
case CODE_SINGLE:
where = (where == null ? "" : where + " AND ") +
"_ID = " + uri.getLastPathSegment();
break;
break;
default:
Log.e(TAG, "Invalid URI for repo content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for repo content provider: " + uri);
default:
Log.e(TAG, "Invalid URI for repo content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for repo content provider: " + uri);
}
int rowsAffected = write().delete(getTableName(), where, whereArgs);

View File

@ -91,16 +91,16 @@ public class DefaultInstaller extends Installer {
* never executed on Androids before 4.0
*/
switch (requestCode) {
case REQUEST_CODE_INSTALL:
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
case REQUEST_CODE_INSTALL:
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
return true;
case REQUEST_CODE_DELETE:
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
return true;
case REQUEST_CODE_DELETE:
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
return true;
default:
return false;
return true;
default:
return false;
}
}

View File

@ -99,34 +99,34 @@ public class DefaultSdk14Installer extends Installer {
@Override
public boolean handleOnActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE_INSTALL:
if (resultCode == Activity.RESULT_OK) {
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
} else if (resultCode == Activity.RESULT_CANCELED) {
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
InstallerCallback.ERROR_CODE_CANCELED);
} else {
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
InstallerCallback.ERROR_CODE_OTHER);
}
case REQUEST_CODE_INSTALL:
if (resultCode == Activity.RESULT_OK) {
mCallback.onSuccess(InstallerCallback.OPERATION_INSTALL);
} else if (resultCode == Activity.RESULT_CANCELED) {
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
InstallerCallback.ERROR_CODE_CANCELED);
} else {
mCallback.onError(InstallerCallback.OPERATION_INSTALL,
InstallerCallback.ERROR_CODE_OTHER);
}
return true;
case REQUEST_CODE_DELETE:
if (resultCode == Activity.RESULT_OK) {
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
} else if (resultCode == Activity.RESULT_CANCELED) {
mCallback.onError(InstallerCallback.OPERATION_DELETE,
InstallerCallback.ERROR_CODE_CANCELED);
} else {
// UninstallAppProgress actually returns
// Activity.RESULT_FIRST_USER if something breaks
mCallback.onError(InstallerCallback.OPERATION_DELETE,
InstallerCallback.ERROR_CODE_OTHER);
}
return true;
case REQUEST_CODE_DELETE:
if (resultCode == Activity.RESULT_OK) {
mCallback.onSuccess(InstallerCallback.OPERATION_DELETE);
} else if (resultCode == Activity.RESULT_CANCELED) {
mCallback.onError(InstallerCallback.OPERATION_DELETE,
InstallerCallback.ERROR_CODE_CANCELED);
} else {
// UninstallAppProgress actually returns
// Activity.RESULT_FIRST_USER if something breaks
mCallback.onError(InstallerCallback.OPERATION_DELETE,
InstallerCallback.ERROR_CODE_OTHER);
}
return true;
default:
return false;
return true;
default:
return false;
}
}

View File

@ -161,7 +161,7 @@ public final class LocalRepoKeyStore {
KeyManager wrappedKeyManager = new KerplappKeyManager(
(X509KeyManager) defaultKeyManager);
keyManagers = new KeyManager[] {
wrappedKeyManager
wrappedKeyManager
};
} catch (UnrecoverableKeyException | KeyStoreException | NoSuchAlgorithmException | CertificateException | OperatorCreationException | IOException e) {
Log.e(TAG, "Error loading keystore", e);
@ -255,7 +255,7 @@ public final class LocalRepoKeyStore {
private void addToStore(String alias, KeyPair kp, Certificate cert) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {
Certificate[] chain = {
cert
cert
};
keyStore.setKeyEntry(alias, kp.getPrivate(),
"".toCharArray(), chain);
@ -274,7 +274,7 @@ public final class LocalRepoKeyStore {
KeyManager defaultKeyManager = keyManagerFactory.getKeyManagers()[0];
KeyManager wrappedKeyManager = new KerplappKeyManager((X509KeyManager) defaultKeyManager);
keyManagers = new KeyManager[] {
wrappedKeyManager
wrappedKeyManager
};
}

View File

@ -92,7 +92,7 @@ public class BluetoothDownloader extends Downloader {
details != null &&
details.getCacheTag() != null &&
details.getCacheTag().equals(getCacheTag())
);
);
}
@Override

View File

@ -54,18 +54,18 @@ public class LocalHTTPD extends NanoHTTPD {
while (st.hasMoreTokens()) {
String tok = st.nextToken();
switch (tok) {
case "/":
newUri += "/";
break;
case " ":
newUri += "%20";
break;
default:
try {
newUri += URLEncoder.encode(tok, "UTF-8");
} catch (UnsupportedEncodingException ignored) {
}
break;
case "/":
newUri += "/";
break;
case " ":
newUri += "%20";
break;
default:
try {
newUri += URLEncoder.encode(tok, "UTF-8");
} catch (UnsupportedEncodingException ignored) {
}
break;
}
}
return newUri;
@ -105,13 +105,13 @@ public class LocalHTTPD extends NanoHTTPD {
private Response handlePost(IHTTPSession session) {
Uri uri = Uri.parse(session.getUri());
switch (uri.getPath()) {
case "/request-swap":
if (!session.getParms().containsKey("repo")) {
Log.e(TAG, "Malformed /request-swap request to local repo HTTP server. Should have posted a 'repo' parameter.");
return new Response(Response.Status.BAD_REQUEST, MIME_PLAINTEXT, "Requires 'repo' parameter to be posted.");
}
requestSwap(session.getParms().get("repo"));
return new Response(Response.Status.OK, MIME_PLAINTEXT, "Swap request received.");
case "/request-swap":
if (!session.getParms().containsKey("repo")) {
Log.e(TAG, "Malformed /request-swap request to local repo HTTP server. Should have posted a 'repo' parameter.");
return new Response(Response.Status.BAD_REQUEST, MIME_PLAINTEXT, "Requires 'repo' parameter to be posted.");
}
requestSwap(session.getParms().get("repo"));
return new Response(Response.Status.OK, MIME_PLAINTEXT, "Swap request received.");
}
return new Response("");
}

View File

@ -21,8 +21,8 @@ public class TorHttpDownloader extends HttpDownloader {
@Override
protected void setupConnection() throws IOException {
SocketAddress sa = new InetSocketAddress("127.0.0.1", 8118);
Proxy tor = new Proxy(Proxy.Type.HTTP, sa);
connection = (HttpURLConnection) sourceUrl.openConnection(tor);
SocketAddress sa = new InetSocketAddress("127.0.0.1", 8118);
Proxy tor = new Proxy(Proxy.Type.HTTP, sa);
connection = (HttpURLConnection) sourceUrl.openConnection(tor);
}
}

View File

@ -353,14 +353,14 @@ public class AppSecurityPermissions {
private List<MyPermissionInfo> getPermissionList(MyPermissionGroupInfo grp, int which) {
switch (which) {
case WHICH_NEW:
return grp.mNewPermissions;
case WHICH_PERSONAL:
return grp.mPersonalPermissions;
case WHICH_DEVICE:
return grp.mDevicePermissions;
default:
return grp.mAllPermissions;
case WHICH_NEW:
return grp.mNewPermissions;
case WHICH_PERSONAL:
return grp.mPersonalPermissions;
case WHICH_DEVICE:
return grp.mDevicePermissions;
default:
return grp.mAllPermissions;
}
}

View File

@ -34,12 +34,12 @@ public class AppListFragmentPagerAdapter extends FragmentPagerAdapter {
@Override
public Fragment getItem(int i) {
switch (i) {
case TabManager.INDEX_AVAILABLE:
return new AvailableAppsFragment();
case TabManager.INDEX_INSTALLED:
return new InstalledAppsFragment();
default:
return new CanUpdateAppsFragment();
case TabManager.INDEX_AVAILABLE:
return new AvailableAppsFragment();
case TabManager.INDEX_INSTALLED:
return new InstalledAppsFragment();
default:
return new CanUpdateAppsFragment();
}
}
@ -49,14 +49,14 @@ public class AppListFragmentPagerAdapter extends FragmentPagerAdapter {
@Override
public String getPageTitle(int i) {
switch (i) {
case TabManager.INDEX_AVAILABLE:
return parent.getString(R.string.tab_available_apps);
case TabManager.INDEX_INSTALLED:
return parent.getString(R.string.tab_installed_apps);
case TabManager.INDEX_CAN_UPDATE:
return getUpdateTabTitle();
default:
return "";
case TabManager.INDEX_AVAILABLE:
return parent.getString(R.string.tab_available_apps);
case TabManager.INDEX_INSTALLED:
return parent.getString(R.string.tab_installed_apps);
case TabManager.INDEX_CAN_UPDATE:
return getUpdateTabTitle();
default:
return "";
}
}

View File

@ -155,17 +155,17 @@ public class ManageReposActivity extends ActionBarActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent destIntent = new Intent(this, FDroid.class);
setResult(RESULT_OK, destIntent);
NavUtils.navigateUpTo(this, destIntent);
return true;
case R.id.action_add_repo:
showAddRepo();
return true;
case R.id.action_update_repo:
UpdateService.updateNow(this);
return true;
case android.R.id.home:
Intent destIntent = new Intent(this, FDroid.class);
setResult(RESULT_OK, destIntent);
NavUtils.navigateUpTo(this, destIntent);
return true;
case R.id.action_add_repo:
showAddRepo();
return true;
case R.id.action_update_repo:
UpdateService.updateNow(this);
return true;
}
return super.onOptionsItemSelected(item);
}
@ -649,11 +649,11 @@ public class ManageReposActivity extends ActionBarActivity {
Uri uri = RepoProvider.allExceptSwapUri();
Utils.debugLog(TAG, "Creating repo loader '" + uri + "'.");
final String[] projection = {
RepoProvider.DataColumns._ID,
RepoProvider.DataColumns.NAME,
RepoProvider.DataColumns.PUBLIC_KEY,
RepoProvider.DataColumns.FINGERPRINT,
RepoProvider.DataColumns.IN_USE
RepoProvider.DataColumns._ID,
RepoProvider.DataColumns.NAME,
RepoProvider.DataColumns.PUBLIC_KEY,
RepoProvider.DataColumns.FINGERPRINT,
RepoProvider.DataColumns.IN_USE
};
return new CursorLoader(getActivity(), uri, projection, null, null, null);
}

View File

@ -47,23 +47,23 @@ public class RepoDetailsActivity extends ActionBarActivity {
* all of this info, otherwise they will be hidden.
*/
private static final int[] SHOW_IF_EXISTS = {
R.id.label_repo_name,
R.id.text_repo_name,
R.id.text_description,
R.id.label_num_apps,
R.id.text_num_apps,
R.id.label_last_update,
R.id.text_last_update,
R.id.label_repo_fingerprint,
R.id.text_repo_fingerprint,
R.id.text_repo_fingerprint_description
R.id.label_repo_name,
R.id.text_repo_name,
R.id.text_description,
R.id.label_num_apps,
R.id.text_num_apps,
R.id.label_last_update,
R.id.text_last_update,
R.id.label_repo_fingerprint,
R.id.text_repo_fingerprint,
R.id.text_repo_fingerprint_description
};
/**
* If the repo has <em>not</em> been updated yet, then we only show
* these, otherwise they are hidden.
*/
private static final int[] HIDE_IF_EXISTS = {
R.id.text_not_yet_updated,
R.id.text_not_yet_updated,
};
private Repo repo;
private long repoId;
@ -95,9 +95,9 @@ public class RepoDetailsActivity extends ActionBarActivity {
repoId = getIntent().getLongExtra(ARG_REPO_ID, 0);
final String[] projection = {
RepoProvider.DataColumns.NAME,
RepoProvider.DataColumns.ADDRESS,
RepoProvider.DataColumns.FINGERPRINT
RepoProvider.DataColumns.NAME,
RepoProvider.DataColumns.ADDRESS,
RepoProvider.DataColumns.FINGERPRINT
};
repo = RepoProvider.Helper.findById(this, repoId, projection);
@ -317,22 +317,22 @@ public class RepoDetailsActivity extends ActionBarActivity {
private void promptForDelete() {
new AlertDialog.Builder(this)
.setTitle(R.string.repo_confirm_delete_title)
.setMessage(R.string.repo_confirm_delete_body)
.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RepoProvider.Helper.remove(getApplicationContext(), repoId);
finish();
}
}).setNegativeButton(android.R.string.cancel,
.setTitle(R.string.repo_confirm_delete_title)
.setMessage(R.string.repo_confirm_delete_body)
.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
RepoProvider.Helper.remove(getApplicationContext(), repoId);
finish();
}
}).setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing...
}
}
).show();
).show();
}
}

View File

@ -34,21 +34,21 @@ public abstract class AppListFragment extends ThemeableListFragment implements
private static final int REQUEST_APPDETAILS = 0;
public static final String[] APP_PROJECTION = {
AppProvider.DataColumns._ID, // Required for cursor loader to work.
AppProvider.DataColumns.APP_ID,
AppProvider.DataColumns.NAME,
AppProvider.DataColumns.SUMMARY,
AppProvider.DataColumns.IS_COMPATIBLE,
AppProvider.DataColumns.LICENSE,
AppProvider.DataColumns.ICON,
AppProvider.DataColumns.ICON_URL,
AppProvider.DataColumns.InstalledApp.VERSION_CODE,
AppProvider.DataColumns.InstalledApp.VERSION_NAME,
AppProvider.DataColumns.SuggestedApk.VERSION,
AppProvider.DataColumns.SUGGESTED_VERSION_CODE,
AppProvider.DataColumns.IGNORE_ALLUPDATES,
AppProvider.DataColumns.IGNORE_THISUPDATE,
AppProvider.DataColumns.REQUIREMENTS, // Needed for filtering apps that require root.
AppProvider.DataColumns._ID, // Required for cursor loader to work.
AppProvider.DataColumns.APP_ID,
AppProvider.DataColumns.NAME,
AppProvider.DataColumns.SUMMARY,
AppProvider.DataColumns.IS_COMPATIBLE,
AppProvider.DataColumns.LICENSE,
AppProvider.DataColumns.ICON,
AppProvider.DataColumns.ICON_URL,
AppProvider.DataColumns.InstalledApp.VERSION_CODE,
AppProvider.DataColumns.InstalledApp.VERSION_NAME,
AppProvider.DataColumns.SuggestedApk.VERSION,
AppProvider.DataColumns.SUGGESTED_VERSION_CODE,
AppProvider.DataColumns.IGNORE_ALLUPDATES,
AppProvider.DataColumns.IGNORE_THISUPDATE,
AppProvider.DataColumns.REQUIREMENTS, // Needed for filtering apps that require root.
};
public static final String APP_SORT = AppProvider.DataColumns.NAME;

View File

@ -72,108 +72,108 @@ public class PreferencesFragment extends PreferenceFragment
int result = 0;
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;
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;
case Preferences.PREF_UPD_WIFI_ONLY:
checkSummary(key, R.string.automatic_scan_wifi_on);
break;
case Preferences.PREF_UPD_WIFI_ONLY:
checkSummary(key, R.string.automatic_scan_wifi_on);
break;
case Preferences.PREF_UPD_NOTIFY:
checkSummary(key, R.string.notify_on);
break;
case Preferences.PREF_UPD_NOTIFY:
checkSummary(key, R.string.notify_on);
break;
case Preferences.PREF_UPD_HISTORY:
textSummary(key, R.string.update_history_summ);
break;
case Preferences.PREF_UPD_HISTORY:
textSummary(key, R.string.update_history_summ);
break;
case Preferences.PREF_COMPACT_LAYOUT:
checkSummary(key, R.string.compactlayout_on);
break;
case Preferences.PREF_COMPACT_LAYOUT:
checkSummary(key, R.string.compactlayout_on);
break;
case Preferences.PREF_THEME:
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
}
break;
case Preferences.PREF_THEME:
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
}
break;
case Preferences.PREF_INCOMP_VER:
checkSummary(key, R.string.show_incompat_versions_on);
break;
case Preferences.PREF_INCOMP_VER:
checkSummary(key, R.string.show_incompat_versions_on);
break;
case Preferences.PREF_ROOTED:
checkSummary(key, R.string.rooted_on);
break;
case Preferences.PREF_ROOTED:
checkSummary(key, R.string.rooted_on);
break;
case Preferences.PREF_IGN_TOUCH:
checkSummary(key, R.string.ignoreTouch_on);
break;
case Preferences.PREF_IGN_TOUCH:
checkSummary(key, R.string.ignoreTouch_on);
break;
case Preferences.PREF_LOCAL_REPO_NAME:
textSummary(key, R.string.local_repo_name_summary);
break;
case Preferences.PREF_LOCAL_REPO_NAME:
textSummary(key, R.string.local_repo_name_summary);
break;
case Preferences.PREF_LOCAL_REPO_HTTPS:
checkSummary(key, R.string.local_repo_https_on);
break;
case Preferences.PREF_LOCAL_REPO_HTTPS:
checkSummary(key, R.string.local_repo_https_on);
break;
case Preferences.PREF_LANGUAGE:
langSpinner(key);
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
FDroidApp.updateLanguage(this.getActivity());
}
break;
case Preferences.PREF_LANGUAGE:
langSpinner(key);
entrySummary(key);
if (changing) {
result |= PreferencesActivity.RESULT_RESTART;
getActivity().setResult(result);
FDroidApp.updateLanguage(this.getActivity());
}
break;
case Preferences.PREF_CACHE_APK:
checkSummary(key, R.string.cache_downloaded_on);
break;
case Preferences.PREF_CACHE_APK:
checkSummary(key, R.string.cache_downloaded_on);
break;
case Preferences.PREF_EXPERT:
checkSummary(key, R.string.expert_on);
break;
case Preferences.PREF_EXPERT:
checkSummary(key, R.string.expert_on);
break;
case Preferences.PREF_PRIVILEGED_INSTALLER:
checkSummary(key, R.string.system_installer_on);
break;
case Preferences.PREF_PRIVILEGED_INSTALLER:
checkSummary(key, R.string.system_installer_on);
break;
case Preferences.PREF_ENABLE_PROXY:
CheckBoxPreference checkPref = (CheckBoxPreference) findPreference(key);
checkPref.setSummary(R.string.enable_proxy_summary);
break;
case Preferences.PREF_ENABLE_PROXY:
CheckBoxPreference checkPref = (CheckBoxPreference) findPreference(key);
checkPref.setSummary(R.string.enable_proxy_summary);
break;
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;
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;
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;
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

@ -234,17 +234,17 @@ public class SwapWorkflowActivity extends AppCompatActivity {
.setTitle(R.string.swap_join_same_wifi)
.setMessage(R.string.swap_join_same_wifi_desc)
.setNeutralButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
}
}
).setPositiveButton(R.string.wifi, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
}
@Override
public void onClick(DialogInterface dialog, int which) {
// Do nothing
}
}
).setPositiveButton(R.string.wifi, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));
}
}
).setNegativeButton(R.string.wifi_ap, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

View File

@ -142,12 +142,12 @@ public class PrivilegedService extends Service {
// get internal methods via reflection
try {
Class<?>[] installTypes = {
Uri.class, IPackageInstallObserver.class, int.class,
String.class
Uri.class, IPackageInstallObserver.class, int.class,
String.class
};
Class<?>[] deleteTypes = {
String.class, IPackageDeleteObserver.class,
int.class
String.class, IPackageDeleteObserver.class,
int.class
};
PackageManager pm = getPackageManager();

View File

@ -34,6 +34,8 @@
<!--<module name="MethodLength" />-->
<!--<module name="ParameterNumber" />-->
<module name="Indentation" />
<module name="EmptyForIteratorPad" />
<module name="GenericWhitespace" />
<module name="MethodParamPad" />