1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package com.android.mail.utils; 17 18import android.content.Context; 19import android.content.pm.PackageInfo; 20import android.content.pm.PackageManager; 21import android.net.Uri; 22import android.text.TextUtils; 23 24import java.util.Locale; 25 26/** 27 * Constructs the URL for the context sensitive help page for this mail application. The URL will be 28 * specific to the user's language, application, application version and topic. For example: 29 * 30 * <p>http://support.example.com/email/?hl=en-us&p=androidhelp&version=1 for the top level english 31 * help page for version 1 of the mail application</p> 32 * <p>http://support.example.com/email/?hl=fr-fr&p=email_compose&version=2 for the compose email 33 * french help page for version 2 of the mail application</p> 34 */ 35public final class HelpUrl { 36 private static final String LOG_TAG = LogTag.getLogTag(); 37 38 private HelpUrl() {} 39 40 /** 41 * Constructs the URL for the context sensitive help page for this mail application. 42 * 43 * @param context a context from which to read resources 44 * @param topic describes the help topic to display; this String cannot be empty. 45 * @return Url for the Help page that is specific to a language, application, version and topic 46 */ 47 public static Uri getHelpUrl(final Context context, Uri helpUri, String topic) { 48 if (TextUtils.isEmpty(topic)) { 49 throw new IllegalArgumentException("topic must be non-empty"); 50 } 51 52 // %locale% is a special variable encoded in the Uri that should be replaced if it exists 53 if (helpUri.toString().contains("%locale%")) { 54 helpUri = Uri.parse(helpUri.toString().replace("%locale%", getLocale())); 55 } 56 57 final Uri.Builder builder = helpUri.buildUpon(); 58 builder.appendQueryParameter("p", topic); 59 builder.appendQueryParameter("version", getVersion(context)); 60 61 return builder.build(); 62 } 63 64 private static String getLocale() { 65 final Locale locale = Locale.getDefault(); 66 return locale.getLanguage() + "-" + locale.getCountry().toLowerCase(); 67 } 68 69 private static String getVersion(final Context context) { 70 final String packageName = context.getApplicationInfo().packageName; 71 try { 72 final PackageInfo pi = context.getPackageManager().getPackageInfo(packageName, 0); 73 return String.valueOf(pi.getLongVersionCode()); 74 } catch (PackageManager.NameNotFoundException e) { 75 LogUtils.e(LOG_TAG, "Error finding package name for application" + packageName); 76 throw new IllegalStateException("unable to determine package name for application"); 77 } 78 } 79} 80