package com.appboy.ui.support;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import com.appboy.Constants;
import com.appboy.support.AppboyLogger;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class UriUtils {
private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, UriUtils.class.getName());
/**
* Backport of the Uri.getQueryParameters method.
*
* Note: A Uri such as tel:+1-555-555-5555 is not hierarchical and does not accept a query
* string, so an empty Map will be returned.
*/
@SuppressWarnings("checkstyle:rightcurly")
public static Map<String, String> getQueryParameters(Uri uri) {
if (uri.isOpaque()) {
AppboyLogger.d(TAG, "URI is not hierarchical. There are no query parameters to parse.");
return Collections.emptyMap();
}
String query = uri.getEncodedQuery();
if (query == null) {
return Collections.emptyMap();
}
Map<String, String> parameters = new HashMap<String, String>();
int start = 0;
do {
int next = query.indexOf('&', start);
int end = (next == -1) ? query.length() : next;
int separator = query.indexOf('=', start);
if (separator > end || separator == -1) {
separator = end;
}
if (end > start) {
String name = query.substring(start, separator);
String value = query.substring(separator + 1, end);
parameters.put(Uri.decode(name), Uri.decode(value));
}
// Move start to end of name.
start = end + 1;
} while (start < query.length());
return Collections.unmodifiableMap(parameters);
}
public static Intent getMainActivityIntent(Context context, Bundle extras) {
// get main activity intent.
Intent startActivityIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
startActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (extras != null) {
startActivityIntent.putExtras(extras);
}
return startActivityIntent;
}
}