OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
6 | 6 |
7 import android.app.Dialog; | 7 import android.app.Dialog; |
8 import android.content.Context; | 8 import android.content.Context; |
9 import android.content.DialogInterface; | 9 import android.content.DialogInterface; |
10 import android.content.Intent; | 10 import android.content.Intent; |
11 import android.graphics.Color; | 11 import android.graphics.Color; |
12 import android.provider.Browser; | 12 import android.provider.Browser; |
13 import android.text.TextUtils; | 13 import android.text.TextUtils; |
14 import android.view.LayoutInflater; | 14 import android.view.LayoutInflater; |
15 import android.view.View; | 15 import android.view.View; |
16 import android.view.View.OnClickListener; | 16 import android.view.View.OnClickListener; |
17 import android.view.ViewGroup; | 17 import android.view.ViewGroup; |
18 import android.view.Window; | 18 import android.view.Window; |
19 import android.widget.Button; | |
19 import android.widget.ImageView; | 20 import android.widget.ImageView; |
20 import android.widget.LinearLayout; | 21 import android.widget.LinearLayout; |
21 import android.widget.ScrollView; | 22 import android.widget.ScrollView; |
22 import android.widget.TextView; | 23 import android.widget.TextView; |
23 | 24 |
25 import org.chromium.base.ApiCompatibilityUtils; | |
24 import org.chromium.base.CalledByNative; | 26 import org.chromium.base.CalledByNative; |
25 import org.chromium.chrome.R; | 27 import org.chromium.chrome.R; |
26 import org.chromium.content.browser.WebContentsObserverAndroid; | 28 import org.chromium.content.browser.WebContentsObserverAndroid; |
27 import org.chromium.content_public.browser.WebContents; | 29 import org.chromium.content_public.browser.WebContents; |
28 | 30 |
29 import java.net.URISyntaxException; | 31 import java.net.URISyntaxException; |
30 | 32 |
31 /** | 33 /** |
32 * Java side of Android implementation of the website settings UI. | 34 * Java side of Android implementation of the website settings UI. |
33 */ | 35 */ |
34 public class WebsiteSettingsPopup implements OnClickListener { | 36 public class WebsiteSettingsPopup implements OnClickListener { |
35 private static final String HELP_URL = | 37 private static final String HELP_URL = |
36 "http://www.google.com/support/chrome/bin/answer.py?answer=95617"; | 38 "http://www.google.com/support/chrome/bin/answer.py?answer=95617"; |
37 private static final int DESCRIPTION_TEXT_SIZE_SP = 12; | 39 private static final int DESCRIPTION_TEXT_SIZE_SP = 12; |
38 private final Context mContext; | 40 private final Context mContext; |
39 private final Dialog mDialog; | 41 private final Dialog mDialog; |
40 private final LinearLayout mContainer; | 42 private final LinearLayout mContainer; |
41 private final WebContents mWebContents; | 43 private final WebContents mWebContents; |
42 private final int mPaddingWide, mPaddingThin; | 44 private final int mPaddingWide, mPaddingThin; |
45 private final long mNativeWebsiteSettingsPopup; | |
43 private TextView mCertificateViewer, mMoreInfoLink; | 46 private TextView mCertificateViewer, mMoreInfoLink; |
44 private ViewGroup mCertificateLayout, mDescriptionLayout; | 47 private ViewGroup mCertificateLayout, mDescriptionLayout; |
48 private Button mResetCertDecisionsButton; | |
45 private String mLinkUrl; | 49 private String mLinkUrl; |
46 | 50 |
47 private WebsiteSettingsPopup(Context context, WebContents webContents) { | 51 private WebsiteSettingsPopup(Context context, WebContents webContents) { |
48 mContext = context; | 52 mContext = context; |
49 mWebContents = webContents; | 53 mWebContents = webContents; |
50 | 54 |
51 mContainer = new LinearLayout(mContext); | 55 mContainer = new LinearLayout(mContext); |
52 mContainer.setOrientation(LinearLayout.VERTICAL); | 56 mContainer.setOrientation(LinearLayout.VERTICAL); |
53 mContainer.setBackgroundColor(Color.WHITE); | 57 mContainer.setBackgroundColor(Color.WHITE); |
54 mPaddingWide = (int) context.getResources().getDimension( | 58 mPaddingWide = (int) context.getResources().getDimension( |
55 R.dimen.certificate_viewer_padding_wide); | 59 R.dimen.certificate_viewer_padding_wide); |
56 mPaddingThin = (int) context.getResources().getDimension( | 60 mPaddingThin = (int) context.getResources().getDimension( |
57 R.dimen.certificate_viewer_padding_thin); | 61 R.dimen.certificate_viewer_padding_thin); |
58 mContainer.setPadding(mPaddingWide, mPaddingWide + mPaddingThin, mPaddin gWide, | 62 mContainer.setPadding(mPaddingWide, mPaddingWide + mPaddingThin, mPaddin gWide, |
59 mPaddingWide); | 63 mPaddingWide); |
60 | 64 |
61 mDialog = new Dialog(mContext); | 65 mDialog = new Dialog(mContext); |
62 mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); | 66 mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); |
63 mDialog.setCanceledOnTouchOutside(true); | 67 mDialog.setCanceledOnTouchOutside(true); |
64 // This needs to come after other member initialization. | 68 // This needs to come after other member initialization. |
65 final long nativeWebsiteSettingsPopup = nativeInit(this, webContents); | 69 mNativeWebsiteSettingsPopup = nativeInit(this, webContents); |
66 final WebContentsObserverAndroid webContentsObserver = | 70 final WebContentsObserverAndroid webContentsObserver = |
67 new WebContentsObserverAndroid(mWebContents) { | 71 new WebContentsObserverAndroid(mWebContents) { |
68 @Override | 72 @Override |
69 public void navigationEntryCommitted() { | 73 public void navigationEntryCommitted() { |
70 // If a navigation is committed (e.g. from in-page redirect), th e data we're | 74 // If a navigation is committed (e.g. from in-page redirect), th e data we're |
71 // showing is stale so dismiss the dialog. | 75 // showing is stale so dismiss the dialog. |
72 mDialog.dismiss(); | 76 mDialog.dismiss(); |
73 } | 77 } |
74 }; | 78 }; |
75 mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { | 79 mDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { |
76 @Override | 80 @Override |
77 public void onDismiss(DialogInterface dialog) { | 81 public void onDismiss(DialogInterface dialog) { |
78 assert nativeWebsiteSettingsPopup != 0; | 82 assert mNativeWebsiteSettingsPopup != 0; |
79 webContentsObserver.detachFromWebContents(); | 83 webContentsObserver.detachFromWebContents(); |
80 nativeDestroy(nativeWebsiteSettingsPopup); | 84 nativeDestroy(mNativeWebsiteSettingsPopup); |
81 } | 85 } |
82 }); | 86 }); |
83 } | 87 } |
84 | 88 |
85 /** | 89 /** |
86 * Adds certificate section, which contains an icon, a headline, a | 90 * Adds certificate section, which contains an icon, a headline, a |
87 * description and a label for certificate info link. | 91 * description and a label for certificate info link. |
88 */ | 92 */ |
89 @CalledByNative | 93 @CalledByNative |
90 private void addCertificateSection(int enumeratedIconId, String headline, St ring description, | 94 private void addCertificateSection(int enumeratedIconId, String headline, St ring description, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 mCertificateViewer.setText(label); | 137 mCertificateViewer.setText(label); |
134 mCertificateViewer.setTextColor( | 138 mCertificateViewer.setTextColor( |
135 mContext.getResources().getColor(R.color.website_settings_popup_ text_link)); | 139 mContext.getResources().getColor(R.color.website_settings_popup_ text_link)); |
136 mCertificateViewer.setTextSize(DESCRIPTION_TEXT_SIZE_SP); | 140 mCertificateViewer.setTextSize(DESCRIPTION_TEXT_SIZE_SP); |
137 mCertificateViewer.setOnClickListener(this); | 141 mCertificateViewer.setOnClickListener(this); |
138 mCertificateViewer.setPadding(0, mPaddingWide, 0, mPaddingWide); | 142 mCertificateViewer.setPadding(0, mPaddingWide, 0, mPaddingWide); |
139 mCertificateLayout.addView(mCertificateViewer); | 143 mCertificateLayout.addView(mCertificateViewer); |
140 } | 144 } |
141 | 145 |
142 @CalledByNative | 146 @CalledByNative |
147 private void addResetCertDecisionsButton(String label) { | |
148 assert mNativeWebsiteSettingsPopup != 0; | |
149 assert mResetCertDecisionsButton == null; | |
150 | |
151 mResetCertDecisionsButton = new Button(mContext); | |
152 mResetCertDecisionsButton.setText(label); | |
153 ApiCompatibilityUtils.setBackgroundForView(mResetCertDecisionsButton, | |
154 mContext.getResources().getDrawable( | |
155 R.drawable.website_settings_reset_cert_decisions)); | |
156 mResetCertDecisionsButton.setTextColor( | |
157 mContext.getResources().getColor( | |
158 R.color.website_settings_popup_reset_cert_decisions_button)); | |
159 mResetCertDecisionsButton.setTextSize(DESCRIPTION_TEXT_SIZE_SP); | |
160 mResetCertDecisionsButton.setOnClickListener(this); | |
161 | |
162 LinearLayout container = new LinearLayout(mContext); | |
163 container.setOrientation(LinearLayout.VERTICAL); | |
164 container.addView(mResetCertDecisionsButton); | |
165 container.setPadding(0, 0, 0, mPaddingWide); | |
166 mCertificateLayout.addView(container); | |
167 } | |
168 | |
169 @CalledByNative | |
143 private void addMoreInfoLink(String linkText) { | 170 private void addMoreInfoLink(String linkText) { |
144 addUrl(linkText, HELP_URL); | 171 addUrl(linkText, HELP_URL); |
145 } | 172 } |
146 | 173 |
147 /** Adds a section containing a description and a hyperlink. */ | 174 /** Adds a section containing a description and a hyperlink. */ |
148 private void addUrl(String label, String url) { | 175 private void addUrl(String label, String url) { |
149 mMoreInfoLink = new TextView(mContext); | 176 mMoreInfoLink = new TextView(mContext); |
150 mLinkUrl = url; | 177 mLinkUrl = url; |
151 mMoreInfoLink.setText(label); | 178 mMoreInfoLink.setText(label); |
152 mMoreInfoLink.setTextColor( | 179 mMoreInfoLink.setTextColor( |
(...skipping 26 matching lines...) Expand all Loading... | |
179 return; | 206 return; |
180 } | 207 } |
181 CertificateViewer.showCertificateChain(mContext, certChain); | 208 CertificateViewer.showCertificateChain(mContext, certChain); |
182 } else if (mMoreInfoLink == v) { | 209 } else if (mMoreInfoLink == v) { |
183 try { | 210 try { |
184 Intent i = Intent.parseUri(mLinkUrl, Intent.URI_INTENT_SCHEME); | 211 Intent i = Intent.parseUri(mLinkUrl, Intent.URI_INTENT_SCHEME); |
185 i.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true); | 212 i.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true); |
186 i.putExtra(Browser.EXTRA_APPLICATION_ID, mContext.getPackageName ()); | 213 i.putExtra(Browser.EXTRA_APPLICATION_ID, mContext.getPackageName ()); |
187 mContext.startActivity(i); | 214 mContext.startActivity(i); |
188 } catch (URISyntaxException ex) {} | 215 } catch (URISyntaxException ex) {} |
216 } else if (mResetCertDecisionsButton == v) { | |
217 nativeResetCertDecisions(mNativeWebsiteSettingsPopup, mWebContents); | |
189 } | 218 } |
190 } | 219 } |
191 | 220 |
192 /** | 221 /** |
193 * Shows a WebsiteSettings dialog for the provided WebContents. | 222 * Shows a WebsiteSettings dialog for the provided WebContents. |
194 * | 223 * |
195 * The popup adds itself to the view hierarchy which owns the reference whil e it's | 224 * The popup adds itself to the view hierarchy which owns the reference whil e it's |
196 * visible. | 225 * visible. |
197 * | 226 * |
198 * @param context Context which is used for launching a dialog. | 227 * @param context Context which is used for launching a dialog. |
199 * @param webContents The WebContents for which to show Website information. This | 228 * @param webContents The WebContents for which to show Website information. This |
200 * information is retrieved for the visible entry. | 229 * information is retrieved for the visible entry. |
201 */ | 230 */ |
202 @SuppressWarnings("unused") | 231 @SuppressWarnings("unused") |
203 public static void show(Context context, WebContents webContents) { | 232 public static void show(Context context, WebContents webContents) { |
204 new WebsiteSettingsPopup(context, webContents); | 233 new WebsiteSettingsPopup(context, webContents); |
205 } | 234 } |
206 | 235 |
207 private static native long nativeInit(WebsiteSettingsPopup popup, WebContent s webContents); | 236 private static native long nativeInit(WebsiteSettingsPopup popup, WebContent s webContents); |
208 private native void nativeDestroy(long nativeWebsiteSettingsPopupAndroid); | 237 private native void nativeDestroy(long nativeWebsiteSettingsPopupAndroid); |
238 private native void nativeResetCertDecisions( | |
239 long nativeWebsiteSettingsPopupAndroid, WebContents webContents); | |
Ted C
2014/08/06 01:01:05
+4 indent
jww
2014/08/06 01:16:08
Darn, I thought I got all of those :-) Done.
| |
209 private native byte[][] nativeGetCertificateChain(WebContents webContents); | 240 private native byte[][] nativeGetCertificateChain(WebContents webContents); |
210 } | 241 } |
OLD | NEW |