Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Unified Diff: demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java

Issue 1603383003: color, package and action bar configuration. (Closed) Base URL: https://github.com/GoogleChrome/custom-tabs-client.git@master
Patch Set: fixes Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java
diff --git a/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..095e4b7d1e56b1d47b0b46bd0e03bd2787b61847
--- /dev/null
+++ b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java
@@ -0,0 +1,260 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.chromium.customtabsdemos;
Ian Wen 2016/02/10 02:36:06 Add one line before #14.
BigBossZhiling 2016/02/17 05:18:09 Done.
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.v7.app.AppCompatActivity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+import org.chromium.customtabsclient.shared.CustomTabsHelper;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * An activity for advanced UI settings.
+ */
+public class AdvancedUISettingActivity extends AppCompatActivity implements View.OnClickListener{
+ public static final String KEY_PACKAGES_LIST = "packageNameList";
+ public static final String KEY_PACKAGE = "packageName";
+ public static final String KEY_COLOR = "color";
+ public static final String KEY_DESCRIPTIONS = "itemsDescription";
+ public static final String KEY_INTENTS = "itemsIntent";
+ public static final String KEY_IMAGES = "itemsImage";
+
+ private static final int PICK_IMAGE_REQUEST = 1;
+
+ private Spinner mToolbarColorSpinner;
+ private Spinner mPackageSpinner;
+ private Button mSaveButton;
+ private Button mAddActionBarItemButton;
+ private List<String> mPackageNameList;
+ private String mPackageName;
+ private String mColor;
+ private Dialog mAddActionBarItemDialog;
+
+ private Uri mImage;
+ private ArrayList<String> mDescriptions;
Ian Wen 2016/02/10 02:36:06 Instead of holding three lists, make a static priv
BigBossZhiling 2016/02/17 05:18:09 Done.
+ private ArrayList<Uri> mImages;
+ private ArrayList<String> mIntents;
+ /**
+ * Puts uri, instead of Bitmap in intent to save space.
+ */
+ static Bitmap uriToBitMap(Context context, Uri uri) {
+ try {
+ return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.advanced_ui_setting);
+ mToolbarColorSpinner = (Spinner) findViewById(R.id.spinner_color);
+ mPackageSpinner = (Spinner) findViewById(R.id.spinner_package);
+ mSaveButton = (Button) findViewById(R.id.save_setting);
+ mAddActionBarItemButton = (Button) findViewById(R.id.add_actionbar_item);
+ mPackageNameList = (List<String>) getIntent().getSerializableExtra(KEY_PACKAGES_LIST);
+ mPackageName = getIntent().getStringExtra(KEY_PACKAGE);
+ mColor = getIntent().getStringExtra(KEY_COLOR);
+ mDescriptions = (ArrayList<String>) getIntent()
Ian Wen 2016/02/10 02:36:06 #85 - #90 are not formatted correctly. Java line w
BigBossZhiling 2016/02/17 05:18:09 Done.
+ .getSerializableExtra(KEY_DESCRIPTIONS);
+ mIntents = (ArrayList<String>) getIntent()
+ .getSerializableExtra(KEY_INTENTS);
+ mImages = (ArrayList<Uri>) getIntent()
+ .getSerializableExtra(KEY_IMAGES);
+ mSaveButton.setOnClickListener(this);
+ mAddActionBarItemButton.setOnClickListener(this);
+ mToolbarColorSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.row,
+ R.id.item,
+ CustomTabsHelper.getColors()));
+
Ian Wen 2016/02/10 02:36:06 Remove phantom empty lines.
BigBossZhiling 2016/02/17 05:18:09 Done.
+ mPackageSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.row,
+ R.id.item, mPackageNameList));
+
+ // Select UI setting previously set by the user.
Ian Wen 2016/02/10 02:36:06 Move the two comments to the javadoc of selectUISe
BigBossZhiling 2016/02/17 05:18:09 Done.
+ // If first time, select default UI setting from Custom UI Activity.
+ selectUISetting();
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.save_setting:
Ian Wen 2016/02/10 02:36:06 Let's not mingle the onclick in dialog with onclic
BigBossZhiling 2016/02/17 05:18:09 Done.
+ sendUISettingToUIActivity();
+ finish();
+ break;
+ case R.id.add_actionbar_item:
+ showActionBarItemDialogue();
Ian Wen 2016/02/10 02:36:06 In our codebase we never use the word "dialogue" (
BigBossZhiling 2016/02/17 05:18:09 Done.
+ break;
+ case R.id.save_item:
+ saveActionBarItem();
+ // Only add the last item to the UI.
+ displayActionBarItems(mDescriptions.size() - 1,
+ mDescriptions.size());
+ mAddActionBarItemDialog.dismiss();
+ break;
+ case R.id.cancel:
+ mAddActionBarItemDialog.dismiss();
+ break;
+ case R.id.select_file:
+ selectFile();
+ break;
+ case R.id.item_delete:
+ deleteItem(view);
+ break;
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if ((requestCode == PICK_IMAGE_REQUEST)) {
+ try {
+ Uri uri = data.getData();
+ mImage = uri;
+ ImageView image = (ImageView) mAddActionBarItemDialog
+ .findViewById(R.id.imageInDialogue);
+ image.setImageBitmap(uriToBitMap(this, mImage));
+ image.requestLayout();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * Displays items stored in the arraylist from index startIndex to endIndex.
+ * @param startIndex is the starting index.
+ * @param endIndex is the ending index.
+ */
+ private void displayActionBarItems(int startIndex, int endIndex) {
Ian Wen 2016/02/10 02:36:06 The two parameters are not necessary. You can get
BigBossZhiling 2016/02/17 05:18:09 Done.
+ LayoutInflater inflater = (LayoutInflater)getBaseContext()
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ LinearLayout itemsList = (LinearLayout) findViewById(R.id.actionbar_items);
+
+ for (int i = startIndex; i < endIndex; i++) {
+ View item = inflater.inflate(R.layout.display_action_bar_item_setting, null);
+ ((TextView) item.findViewById(R.id.item_description))
+ .setText("Description: " + mDescriptions.get(i));
+ ((TextView) item.findViewById(R.id.item_intent))
+ .setText("Intent: " + mIntents.get(i));
+ ((TextView) item.findViewById(R.id.item_image_title)).setText("Image: ");
+ ImageView image = (ImageView) item.findViewById(R.id.item_image);
+ image.setImageBitmap(uriToBitMap(this, mImages.get(i)));
+ Button deleteButton = (Button) item.findViewById(R.id.item_delete);
+ deleteButton.setOnClickListener(this);
+ itemsList.addView(item);
+ }
+ }
+
+ private void selectFile() {
+ Intent intent = new Intent();
+ intent.setType("image/*");
+ intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
+ startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
+ }
+
+ private void deleteItem(View deleteButton) {
+ LinearLayout lineLayout = (LinearLayout) deleteButton.getParent().getParent();
+ LinearLayout itemLayout = (LinearLayout) lineLayout.getParent();
+ LinearLayout itemsLayout = (LinearLayout) itemLayout.getParent();
+ int index = getIndexOfLayout(itemLayout, itemsLayout);
+ itemsLayout.removeView(itemLayout);
+ mDescriptions.remove(index);
+ mImages.remove(index);
+ mIntents.remove(index);
+ }
+
+ private int getIndexOfLayout(LinearLayout item, LinearLayout setting) {
+ int kidsPos;
+ for (kidsPos = 0; kidsPos < setting.getChildCount(); kidsPos ++) {
+ View view = setting.getChildAt(kidsPos);
+
Ian Wen 2016/02/10 02:36:06 Remove phantom empty lines.
BigBossZhiling 2016/02/17 05:18:09 Done.
+ if (view == item) {
+ break;
+ }
+ }
+ return kidsPos;
+ }
+
+ private void showActionBarItemDialogue() {
Ian Wen 2016/02/10 02:36:06 Dialog.
BigBossZhiling 2016/02/17 05:18:09 Done.
+ mAddActionBarItemDialog = new Dialog(this, R.style.DialogTheme);
+ mAddActionBarItemDialog.setContentView(R.layout.dialogue_add_actionbar_item);
+ mAddActionBarItemDialog.setTitle("Add Action Bar Item");
+ mAddActionBarItemDialog.findViewById(R.id.save_item).setOnClickListener(this);
+ mAddActionBarItemDialog.findViewById(R.id.cancel).setOnClickListener(this);
+ mAddActionBarItemDialog.findViewById(R.id.select_file).setOnClickListener(this);
+ ((Spinner) mAddActionBarItemDialog.findViewById(R.id.intent))
+ .setAdapter(new ArrayAdapter<String>(this, R.layout.row, R.id.item, getIntents()));
+ mImage = Uri.parse(
+ "android.resource://org.chromium.customtabsdemos/drawable/ic_action_name");
+
+ mAddActionBarItemDialog.show();
+ }
+
+ private String[] getIntents() {
+ return new String[] {"Send", "Select Contact", "Add Event", "Camera"};
Ian Wen 2016/02/10 02:36:06 1. This method does not return "Intents"; it retur
BigBossZhiling 2016/02/17 05:18:09 Done.
+ }
+
+ private void sendUISettingToUIActivity() {
+ Intent intent = new Intent();
+ intent.putExtra(KEY_PACKAGE, mPackageSpinner.getSelectedItem().toString());
+ intent.putExtra(KEY_COLOR, mToolbarColorSpinner.getSelectedItem().toString());
+ intent.putExtra(KEY_DESCRIPTIONS, mDescriptions);
+ intent.putExtra(KEY_IMAGES, mImages);
+ intent.putExtra(KEY_INTENTS, mIntents);
+ setResult(0, intent);
Ian Wen 2016/02/10 02:36:06 You need to finish so that the parent activity can
BigBossZhiling 2016/02/17 05:18:09 Done.
+ }
+
+ private void saveActionBarItem() {
+ mDescriptions.add(((EditText) mAddActionBarItemDialog
+ .findViewById(R.id.description)).getText().toString());
+ mImages.add(mImage);
+ mIntents.add(((Spinner) mAddActionBarItemDialog
+ .findViewById(R.id.intent)).getSelectedItem().toString());
+ }
+
+ private void selectUISetting() {
+ for (int position = 0; position < mToolbarColorSpinner.getAdapter().getCount();
+ position ++) {
+ if (mToolbarColorSpinner.getAdapter().getItem(position).equals(mColor)) {
+ mToolbarColorSpinner.setSelection(position);
+ break;
+ }
+ }
+ for (int position = 0; position < mPackageSpinner.getAdapter().getCount(); position ++) {
+ if (mPackageSpinner.getAdapter().getItem(position).equals(mPackageName)) {
+ mPackageSpinner.setSelection(position);
+ break;
+ }
+ }
+
+ displayActionBarItems(0, mDescriptions.size());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698