Commit 753fc264 authored by Gayane Petrosyan's avatar Gayane Petrosyan Committed by Commit Bot

[QRCode Android] Switch between Share/Scan tab views.

Share tab https://screenshot.googleplex.com/f3uD32mMtwU.png
Scan tab https://screenshot.googleplex.com/b8tCnu82tEu.png

Bug: 993920
Change-Id: I34c834e497e709fd12a300328b5d9bc5ea54907a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1906877Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarJeffrey Cohen <jeffreycohen@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Commit-Queue: Gayane Petrosyan <gayane@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715056}
parent 189ee109
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/share_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/qrcode_text_image"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="200dp"
android:gravity="center_horizontal"
android:layout_gravity="center_horizontal"
android:text="@string/qr_code_share_description"
android:textAppearance="@style/TextAppearance.BlackTitle1"/>
<org.chromium.ui.widget.ButtonCompat
android:id="@+id/download"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/qr_code_download"
style="@style/TextButton"/>
</LinearLayout>
\ No newline at end of file
......@@ -6,14 +6,20 @@ package org.chromium.chrome.browser.share.qrcode;
import android.content.Context;
import org.chromium.chrome.browser.share.qrcode.scan_tab.QrCodeScanCoordinator;
import org.chromium.chrome.browser.share.qrcode.share_tab.QrCodeShareCoordinator;
/**
* Creates the QrCodeDialog.
* Creates and represents the QrCode main UI.
*/
public class QrCodeCoordinator {
QrCodeDialog mDialog;
QrCodeCoordinator(Context context) {
mDialog = new QrCodeDialog(context);
QrCodeShareCoordinator shareCoordinator = new QrCodeShareCoordinator(context);
QrCodeScanCoordinator scanCoordinator = new QrCodeScanCoordinator(context);
mDialog = new QrCodeDialog(context, shareCoordinator.getView(), scanCoordinator.getView());
}
public void show() {
......
......@@ -5,6 +5,8 @@
package org.chromium.chrome.browser.share.qrcode;
import android.content.Context;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
......@@ -12,27 +14,44 @@ import android.view.View;
import org.chromium.chrome.R;
import org.chromium.ui.widget.ChromeImageButton;
import java.util.ArrayList;
/**
* QrCodeDialog is the main view for QR code sharing.
* QrCodeDialog is the main view for QR code sharing and scanning.
*/
public class QrCodeDialog extends AlertDialog {
private final TabLayout mTabLayout;
private final ViewPager mViewPager;
/**
* The QrCodeDialog constructor.
* @param context The context to use.
* @param shareView The view for displaying in the share tab.
* @param scanView The view for displaying in the scan tab.
*/
public QrCodeDialog(Context context) {
public QrCodeDialog(Context context, View shareView, View scanView) {
super(context, R.style.Theme_Chromium_Fullscreen);
View dialogView = (View) LayoutInflater.from(context).inflate(
org.chromium.chrome.browser.share.qrcode.R.layout.qrcode_dialog, null);
setView(dialogView);
ChromeImageButton close_button =
ChromeImageButton closeButton =
(ChromeImageButton) dialogView.findViewById(R.id.close_button);
close_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancel();
}
});
closeButton.setOnClickListener(v -> cancel());
// Setup page adapter and tab layout.
ArrayList<View> pages = new ArrayList<View>();
pages.add(shareView);
pages.add(scanView);
QrCodePageAdapter pageAdapter = new QrCodePageAdapter(pages);
mTabLayout =
dialogView.findViewById(org.chromium.chrome.browser.share.qrcode.R.id.tab_layout);
mViewPager = dialogView.findViewById(
org.chromium.chrome.browser.share.qrcode.R.id.qrcode_view_pager);
mViewPager.setAdapter(pageAdapter);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.addOnTabSelectedListener(
new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
setView(dialogView);
}
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share.qrcode;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
/**
* QrCodePageAdapter instantiates and destroys provided tab views.
*/
class QrCodePageAdapter extends PagerAdapter {
ArrayList<View> mPages;
public QrCodePageAdapter(ArrayList<View> pages) {
mPages = pages;
}
// PagerAdapter implementation.
@Override
public Object instantiateItem(ViewGroup parent, int position) {
View page = mPages.get(position);
parent.addView(page);
return page;
}
@Override
public void destroyItem(ViewGroup parent, int position, Object view) {
parent.removeView((View) view);
}
@Override
public int getCount() {
return mPages.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
\ No newline at end of file
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share.qrcode.scan_tab;
import android.content.Context;
import android.view.View;
/**
* Creates and represents the QrCode scan panel UI.
*/
public class QrCodeScanCoordinator {
private final QrCodeScanView mScanView;
public QrCodeScanCoordinator(Context context) {
mScanView = new QrCodeScanView(context);
}
public View getView() {
return mScanView.getView();
}
}
\ No newline at end of file
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share.qrcode.scan_tab;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
/**
* Manages the Android View representing the QrCode scan panel.
*/
class QrCodeScanView {
private final Context mContext;
private final View mView;
public QrCodeScanView(Context context) {
mContext = context;
mView = new FrameLayout(context);
mView.setLayoutParams(
new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
public View getView() {
return mView;
}
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share.qrcode.share_tab;
import android.content.Context;
import android.view.View;
/**
* Creates and represents the QrCode share panel UI.
*/
public class QrCodeShareCoordinator {
private final QrCodeShareView mShareView;
public QrCodeShareCoordinator(Context context) {
mShareView = new QrCodeShareView(context);
}
public View getView() {
return mShareView.getView();
}
}
\ No newline at end of file
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.share.qrcode.share_tab;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
/**
* Manages the Android View representing the QrCode share panel.
*/
class QrCodeShareView {
private final Context mContext;
private final View mView;
public QrCodeShareView(Context context) {
mContext = context;
mView = (View) LayoutInflater.from(context).inflate(
org.chromium.chrome.browser.share.qrcode.R.layout.qrcode_share_layout, null, false);
}
public View getView() {
return mView;
}
}
......@@ -7,4 +7,9 @@ share_java_sources = [
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeDialog.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeShareActivity.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareView.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/share_tab/QrCodeShareCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanView.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/scan_tab/QrCodeScanCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodePageAdapter.java",
]
......@@ -4013,6 +4013,14 @@ The site does NOT gain access to the camera. The camera images are only visible
Scan
</message>
<message name="IDS_QR_CODE_SHARE_DESCRIPTION" desc="Text on QR code sharing tab describing how to use the QR code.">
To share with people nearby, let them scan this QR code
</message>
<message name="IDS_QR_CODE_DOWNLOAD" desc="Text on QR code download button.">
Download
</message>
<!-- Chime DFM module strings -->
<message name="IDS_CHIME_MODULE_TITLE" desc="Text shown when the chime module is referenced in install start, success, failure UI (e.g. in IDS_MODULE_INSTALL_START_TEXT, which will expand to 'Installing Google Notifications Platform for Chrome…').">
Google Notifications Platform
......
e1b9f6e918c668e4a0d84fcfece1f3844dc33ab3
\ No newline at end of file
89a4180627a1c39d19410b592d30cc9a4fa5fbb2
\ No newline at end of file
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