Commit cae593b7 authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

Add the stale preview timestamp to the new page info UI

Adds the same string as the Infobar would show according to the UI
mocks.

Also cleans up PageInfoController a bit from my last adventure there.

Bug: 888029
Change-Id: Iba1bae14ba05ecd912431463db73ec7a72ebb7f5
Reviewed-on: https://chromium-review.googlesource.com/1246782Reviewed-by: default avatarTheresa <twellington@chromium.org>
Reviewed-by: default avatarDoug Arnett <dougarnett@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#594857}
parent 2e85ee45
......@@ -64,6 +64,13 @@
android:text="@string/page_info_preview_message"
android:visibility="gone" />
<TextView
android:id="@+id/page_info_stale_preview_timestamp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/BlackCaption"
android:visibility="gone" />
<TextView
android:id="@+id/page_info_preview_load_original"
android:layout_width="match_parent"
......
......@@ -159,14 +159,13 @@ public class PageInfoController
* @param offlinePageUrl URL that the offline page claims to be generated from.
* @param offlinePageCreationDate Date when the offline page was created.
* @param offlinePageState State of the tab showing offline page.
* @param previewOriginalHost The domain of the original page of the displayed preview.
* @param previewPageState State of the tab showing the preview.
* @param publisher The name of the content publisher, if any.
*/
protected PageInfoController(Activity activity, Tab tab, int securityLevel,
String offlinePageUrl, String offlinePageCreationDate,
@OfflinePageState int offlinePageState, String previewOriginalHost,
@PreviewPageState int previewPageState, String publisher) {
@OfflinePageState int offlinePageState, @PreviewPageState int previewPageState,
String publisher) {
mContext = activity;
mTab = tab;
mSecurityLevel = securityLevel;
......@@ -249,7 +248,7 @@ public class PageInfoController
viewParams.siteSettingsButtonShown = false;
}
initPreviewUiParams(viewParams, previewOriginalHost);
initPreviewUiParams(viewParams);
if (isShowingOfflinePage()) {
boolean isConnected = OfflinePageUtils.isConnected();
......@@ -332,9 +331,9 @@ public class PageInfoController
* Initializes the state in viewParams with respect to showing the previews UI.
*
* @param viewParams The PageInfoViewParams to set state on.
* @param previewOriginalHost The hostname of the displayed preview page.
*/
private void initPreviewUiParams(PageInfoViewParams viewParams, String previewOriginalHost) {
private void initPreviewUiParams(PageInfoViewParams viewParams) {
final PreviewsAndroidBridge bridge = PreviewsAndroidBridge.getInstance();
viewParams.separatorShown = mPreviewPageState == PreviewPageState.INSECURE_PAGE_PREVIEW;
viewParams.previewUIShown = isShowingPreview();
if (isShowingPreview()) {
......@@ -342,10 +341,9 @@ public class PageInfoController
viewParams.connectionMessageShown = false;
viewParams.previewShowOriginalClickCallback = () -> {
runAfterDismiss(() -> {
PreviewsAndroidBridge.getInstance().loadOriginal(mTab.getWebContents());
});
runAfterDismiss(() -> { bridge.loadOriginal(mTab.getWebContents()); });
};
final String previewOriginalHost = bridge.getOriginalHost(mTab.getWebContents());
final String loadOriginalText = mContext.getString(
R.string.page_info_preview_load_original, previewOriginalHost);
final SpannableString loadOriginalSpan = SpanApplier.applySpans(loadOriginalText,
......@@ -355,6 +353,9 @@ public class PageInfoController
// because the entire TextView will be clickable.
new NoUnderlineClickableSpan((view) -> {})));
viewParams.previewLoadOriginalMessage = loadOriginalSpan;
viewParams.previewStaleTimestamp =
bridge.getStalePreviewTimestamp(mTab.getWebContents());
}
}
......@@ -568,15 +569,12 @@ public class PageInfoController
final int securityLevel =
SecurityStateModel.getSecurityLevelForWebContents(tab.getWebContents());
final PreviewsAndroidBridge previewsBridge = PreviewsAndroidBridge.getInstance();
@PreviewPageState
int previewPageState = PreviewPageState.NOT_PREVIEW;
String previewOriginalHost = null;
if (previewsBridge.shouldShowPreviewUI(tab.getWebContents())) {
if (PreviewsAndroidBridge.getInstance().shouldShowPreviewUI(tab.getWebContents())) {
previewPageState = securityLevel == ConnectionSecurityLevel.SECURE
? PreviewPageState.SECURE_PAGE_PREVIEW
: PreviewPageState.INSECURE_PAGE_PREVIEW;
previewOriginalHost = previewsBridge.getOriginalHost(tab.getWebContents());
Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile());
tracker.notifyEvent(EventConstants.PREVIEWS_VERBOSE_STATUS_OPENED);
......@@ -607,8 +605,7 @@ public class PageInfoController
}
new PageInfoController(activity, tab, securityLevel, offlinePageUrl,
offlinePageCreationDate, offlinePageState, previewOriginalHost, previewPageState,
contentPublisher);
offlinePageCreationDate, offlinePageState, previewPageState, contentPublisher);
}
private static native long nativeInit(PageInfoController controller, WebContents webContents);
......
......@@ -13,6 +13,7 @@ import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.support.v7.widget.AppCompatTextView;
import android.text.Layout;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
......@@ -170,6 +171,7 @@ public class PageInfoView extends FrameLayout implements OnClickListener, OnLong
public CharSequence url;
public CharSequence previewLoadOriginalMessage;
public CharSequence previewStaleTimestamp;
public int urlOriginLength;
}
......@@ -187,7 +189,6 @@ public class PageInfoView extends FrameLayout implements OnClickListener, OnLong
public static class ConnectionInfoParams {
public CharSequence message;
public CharSequence summary;
public CharSequence previewLoadOriginalMessage;
public Runnable clickCallback;
}
......@@ -199,6 +200,7 @@ public class PageInfoView extends FrameLayout implements OnClickListener, OnLong
private final TextView mConnectionSummary;
private final TextView mConnectionMessage;
private final TextView mPreviewMessage;
private final TextView mPreviewStaleTimestamp;
private final TextView mPreviewLoadOriginal;
private final LinearLayout mPermissionsList;
private final View mSeparator;
......@@ -216,6 +218,7 @@ public class PageInfoView extends FrameLayout implements OnClickListener, OnLong
mConnectionSummary = (TextView) findViewById(R.id.page_info_connection_summary);
mConnectionMessage = (TextView) findViewById(R.id.page_info_connection_message);
mPreviewMessage = (TextView) findViewById(R.id.page_info_preview_message);
mPreviewStaleTimestamp = (TextView) findViewById(R.id.page_info_stale_preview_timestamp);
mPreviewLoadOriginal = (TextView) findViewById(R.id.page_info_preview_load_original);
mPermissionsList = (LinearLayout) findViewById(R.id.page_info_permissions_list);
mSeparator = (View) findViewById(R.id.page_info_separator);
......@@ -247,8 +250,14 @@ public class PageInfoView extends FrameLayout implements OnClickListener, OnLong
initializePageInfoViewChild(mPreviewMessage, params.previewUIShown, 0f, null);
initializePageInfoViewChild(mPreviewLoadOriginal, params.previewUIShown, 0f,
params.previewShowOriginalClickCallback);
initializePageInfoViewChild(mPreviewStaleTimestamp,
params.previewUIShown && !TextUtils.isEmpty(params.previewStaleTimestamp), 0f,
null);
initializePageInfoViewChild(mSeparator, params.separatorShown, 0f, null);
mPreviewLoadOriginal.setText(params.previewLoadOriginalMessage);
if (!TextUtils.isEmpty(params.previewStaleTimestamp)) {
mPreviewStaleTimestamp.setText(params.previewStaleTimestamp);
}
}
public void setPermissions(List<PermissionParams> permissionParamsList) {
......@@ -365,6 +374,7 @@ public class PageInfoView extends FrameLayout implements OnClickListener, OnLong
animatableViews.add(mConnectionSummary);
animatableViews.add(mConnectionMessage);
animatableViews.add(mPreviewMessage);
animatableViews.add(mPreviewStaleTimestamp);
animatableViews.add(mPreviewLoadOriginal);
animatableViews.add(mSeparator);
animatableViews.add(mInstantAppButton);
......
......@@ -29,11 +29,27 @@ public final class PreviewsAndroidBridge {
return nativeShouldShowPreviewUI(mNativePreviewsAndroidBridge, webContents);
}
/**
* Returns the origin host name of the preview being shown.
*/
public String getOriginalHost(WebContents webContents) {
assert shouldShowPreviewUI(webContents) : "getOriginalHost called on a non-preview page";
return nativeGetOriginalHost(mNativePreviewsAndroidBridge, webContents);
}
/**
* If the current preview is a stale preview, this returns the timestamp text to display to the
* user. An empty string is returned if the current preview is not a stale preview.
*/
public String getStalePreviewTimestamp(WebContents webContents) {
assert shouldShowPreviewUI(webContents)
: "getStalePreviewTimestamp called on a non-preview page";
return nativeGetStalePreviewTimestamp(mNativePreviewsAndroidBridge, webContents);
}
/**
* Requests that the original page be loaded.
*/
public void loadOriginal(WebContents webContents) {
assert shouldShowPreviewUI(webContents) : "loadOriginal called on a non-preview page";
nativeLoadOriginal(mNativePreviewsAndroidBridge, webContents);
......@@ -44,6 +60,8 @@ public final class PreviewsAndroidBridge {
long nativePreviewsAndroidBridge, WebContents webContents);
private native String nativeGetOriginalHost(
long nativePreviewsAndroidBridge, WebContents webContents);
private native String nativeGetStalePreviewTimestamp(
long nativePreviewsAndroidBridge, WebContents webContents);
private native void nativeLoadOriginal(
long nativePreviewsAndroidBridge, WebContents webContents);
}
......@@ -80,7 +80,7 @@ public class PageInfoControllerTest {
ThreadUtils.runOnUiThreadBlocking(() -> {
PageInfoController pageInfo = new PageInfoController(mActivityTestRule.getActivity(),
mActivityTestRule.getActivity().getActivityTab(), ConnectionSecurityLevel.NONE,
null, null, PageInfoController.OfflinePageState.NOT_OFFLINE_PAGE, null,
null, null, PageInfoController.OfflinePageState.NOT_OFFLINE_PAGE,
PageInfoController.PreviewPageState.NOT_PREVIEW, null);
PageInfoView pageInfoView = pageInfo.getPageInfoViewForTesting();
// Test that the title contains the Unicode hostname rather than strict equality, as
......
......@@ -55,6 +55,26 @@ PreviewsAndroidBridge::GetOriginalHost(
env, web_contents->GetVisibleURL().host()));
}
base::android::ScopedJavaLocalRef<jstring>
PreviewsAndroidBridge::GetStalePreviewTimestamp(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents) {
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(j_web_contents);
if (!web_contents)
return base::android::ScopedJavaLocalRef<jstring>();
PreviewsUITabHelper* tab_helper =
PreviewsUITabHelper::FromWebContents(web_contents);
if (!tab_helper)
return base::android::ScopedJavaLocalRef<jstring>();
return base::android::ScopedJavaLocalRef<jstring>(
base::android::ConvertUTF16ToJavaString(
env, tab_helper->GetStalePreviewTimestampText()));
}
void PreviewsAndroidBridge::LoadOriginal(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
......
......@@ -28,6 +28,11 @@ class PreviewsAndroidBridge {
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents);
base::android::ScopedJavaLocalRef<jstring> GetStalePreviewTimestamp(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents);
void LoadOriginal(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment