summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/BrowserConfigBase.java
blob: a96e6ad6ccafdd28488e268bf1bcee4c1ab49ab0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
    * Copyright (c) 2014, The Linux Foundation. All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions are
    * met:
    * * Redistributions of source code must retain the above copyright
    * notice, this list of conditions and the following disclaimer.
    * * Redistributions in binary form must reproduce the above
    * copyright notice, this list of conditions and the following
    * disclaimer in the documentation and/or other materials provided
    * with the distribution.
    * * Neither the name of The Linux Foundation nor the names of its
    * contributors may be used to endorse or promote products derived
    * from this software without specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
    * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
    * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
    * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
    * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    *
    */

package com.android.browser;

import com.android.browser.R;

import java.util.Locale;

import android.os.Build;
import android.content.Context;
import android.text.TextUtils;

import org.codeaurora.swe.BrowserCommandLine;

abstract class BrowserConfigBase {

    private static final String OVERRIDE_USER_AGENT = "user-agent";
    private Context mContext;

    public BrowserConfigBase(Context context) {
        mContext = context;
    }

    public void overrideUserAgent() {
        // Check if the UA is already present using command line file
        if (BrowserCommandLine.hasSwitch(OVERRIDE_USER_AGENT)) {
            return;
        }

        String ua = mContext.getResources().getString(R.string.def_useragent);

        if (TextUtils.isEmpty(ua))
            return;

        ua = constructUserAgent(ua);

        if (!TextUtils.isEmpty(ua)){
            BrowserCommandLine.appendSwitchWithValue(OVERRIDE_USER_AGENT, ua);
        }
    }

    public void initCommandLineSwitches() {
        //SWE-hide-title-bar - enable following flags
        BrowserCommandLine.appendSwitch("enable-top-controls-position-calculation");
        BrowserCommandLine.appendSwitchWithValue("top-controls-height", "52");
        BrowserCommandLine.appendSwitchWithValue("top-controls-show-threshold", "0.5");
        BrowserCommandLine.appendSwitchWithValue("top-controls-hide-threshold", "0.5");

        // Allow to override UserAgent
        overrideUserAgent();
    }

    private String constructUserAgent(String userAgent) {
        try {
            userAgent = userAgent.replaceAll("<%build_model>", Build.MODEL);
            userAgent = userAgent.replaceAll("<%build_version>", Build.VERSION.RELEASE);
            userAgent = userAgent.replaceAll("<%build_id>", Build.ID);
            userAgent = userAgent.replaceAll("<%language>", Locale.getDefault().getLanguage());
            userAgent = userAgent.replaceAll("<%country>", Locale.getDefault().getCountry());
            return userAgent;
        } catch (Exception ex) {
            return null;
        }
    }

    public static enum Feature {
        WAP2ESTORE, /* Launch custom app when URL scheme is 'estore:' */
        DRM_UPLOADS, /* Prevent uploading files with DRM filename extensions */
        NETWORK_NOTIFIER, /* Prompt user to select WiFi access point or otherwise enable WLAN */
        EXIT_DIALOG, /* Add 'Exit' menu item and show 'Minimize or quit' dialog */
        TITLE_IN_URL_BAR, /* Display page title instead of url in URL bar */
        CUSTOM_DOWNLOAD_PATH, /* Allow users to provide custom download path */
        ALLOW_MEDIA_DOWNLOADS, /* Add 'Allow media downloads' menu item */
        DISABLE_HISTORY /* Allow disabling saving history for non-incognito tabs */
    }

    public boolean hasFeature(Feature feature) {
        switch (feature) {
            case WAP2ESTORE:
                return mContext.getResources().getBoolean(R.bool.feature_wap2estore);
            case DRM_UPLOADS:
                return mContext.getResources().getBoolean(R.bool.feature_drm_uploads);
            case NETWORK_NOTIFIER:
                return mContext.getResources().getBoolean(R.bool.feature_network_notifier);
            case EXIT_DIALOG:
                return mContext.getResources().getBoolean(R.bool.feature_exit_dialog);
            case TITLE_IN_URL_BAR:
                return mContext.getResources().getBoolean(R.bool.feature_title_in_URL_bar);
            case CUSTOM_DOWNLOAD_PATH:
                return mContext.getResources().getBoolean(R.bool.feature_custom_download_path);
            case ALLOW_MEDIA_DOWNLOADS:
                return mContext.getResources().getBoolean(R.bool.feature_allow_media_downloads);
            case DISABLE_HISTORY:
                return mContext.getResources().getBoolean(R.bool.feature_disable_history);
            default:
                return false;
        }
    }
}